Pash: PowerShell open source reimplementation for Linux, Mac, & Solaris
pash.sourceforge.net
pash.sourceforge.net
bash-3.2$ osh ls -f ^ select 'f: f.size > 20000' $
('./.DS_Store',)
('./.psql_history',)
('./backup.log',)
('./loljack.jpg',)
osh invokes the interpreter. ls is osh's ls command. The -f flag restricts the ls command to files. ^ is the osh pipe character, so the list of files in the current directory is piped to the next command. select filters out objects that don't pass the predicate, in this case, that file.size > 20000. $ renders output (using python's str()).osh also does database access, e.g.
osh sql "select * from my_table" $
and remote access. E.g., to run the same query on every node of a cluster named foobar: osh @foobar [ sql "select count(*) from my_table" ] $
Piping python tuples between commands and then operating on them from the command line is really handy.Object Shell also has a python API, e.g.
#!/usr/bin/python
from osh.api import *
osh(remote('foobar',
sql("select count(*) from my_table")),
out())Pipe is interpreted by the shell and separates the commands on either side, so I don't see how that could work. The very first version of osh actually did run separate commands, connected by a Unix pipe, but the pickling and unpickling costs were extremely high, so I opted for running the whole command in one process.
(check date of newest files http://sourceforge.net/projects/pash/files/)
It's really too bad, as there are some interesting tools written in Powershell-only/first mode. I was on the hunt for something like this a little while back when I had some cool VMware tools that were only in Powershell, but wanted to run them from Linux.
Would love to hear I'm wrong about this, or that there's another ps implementation for those on Linux/ Mac.
Here is a more recent thread pining for cross-platform Powershell.
I, for one, am quite glad that my shell does not pipe objects. Text-based transports have the wonderful property that they are suspend-able (i.e. save output to a file, transfer them to another machine load them from the file; something you can't do with objects without serialization) and consistently represented on the console and for the receiving process.
Processes on my machine send and receive arbitrary byte streams. I have specialized tools for communicating with servers with specialized protocols. If you really want a shell AND a scripting language all at once, use something like IPython: http://ipython.scipy.org/moin/
1. Syntax that doesn't suck
2. Higher-than-text-level abstraction
Or, in short
ps OUTLOOK | kill
Ie, no grepping. Yes, that's an actual posh command, as there's aliases for common unix commands.