What subshell does ` (backquote) use to run commands?
puts `echo $SHELL`
m.
···
Noah Easterly <noah.easterly@gmail.com> wrote:
What subshell does ` (backquote) use to run commands?
--
matt neuburg, phd = matt@tidbits.com, Matt Neuburg’s Home Page
Tiger - http://www.takecontrolbooks.com/tiger-customizing.html
AppleScript - http://www.amazon.com/gp/product/0596102119
Read TidBITS! It's free and smart. http://www.tidbits.com
Noah Easterly wrote:
What subshell does ` (backquote) use to run commands?
$ irb
irb(main):001:0> `echo $SHELL`
=> "/bin/bash\n"
YMMV, depending on platform and version.
···
--
Paul Lutus
http://www.arachnoid.com
On Solaris it does seem to just use the sh shell. I tested it out with
some export commands (which work under ksh, the shell reported by `echo
$SHELL`) and errors ocurred. If, however, I did it the sh way with
setting a variable and seperately exporting and then echoing, it worked
which seems to suggest sh.
irb(main):001:0> `echo $SHELL`
=> "/bin/ksh\n"
irb(main):002:0> `export TEST=test; echo $TEST`
sh: TEST=test: is not an identifier
=> ""
irb(main):003:0> `TEST=test; export TEST; echo $TEST`
=> "test\n"
Hope that helps
···
On Nov 14, 8:14 pm, "Noah Easterly" <noah.easte...@gmail.com> wrote:
What subshell does ` (backquote) use to run commands?
I don't think it's using the $SHELL variable to choose which shell to
use (and I don't trust all the shells to set $SHELL)
As an example:
so here's a command that I get different responses on, depending on
which shell it's run in
sh-2.05b$ ls **/*.rb | wc -l
1
sh-2.05b$ zsh -c "ls **/*.rb | wc -l"
12
And in ruby backticks, I get the sh response
sh-2.05b$ ruby -e "puts %x{ls **/*.rb | wc -l}"
1
even when the $SHELL is set otherwise
sh-2.05b$ export SHELL=/bin/zsh
sh-2.05b$ echo $SHELL
/bin/zsh
sh-2.05b$ ruby -e "puts %x{echo $SHELL}"
/bin/zsh
sh-2.05b$ ruby -e "puts %x{ls **/*.rb | wc -l}"
1
or if the ruby script is run by a different shell
zsh: echo $SHELL
/bin/zsh
zsh: ruby -e "puts %x{echo $SHELL}"
/bin/zsh
zsh: ruby -e "puts %x{ls **/*.rb | wc -l}"
1
So my question remains, how is ruby choosing which shell to use for
backtick commands? (since in this case it really doesn't seem like it's
checking $SHELL at all).
I know I can force a choice of shell from within the backtick (ruby -e
'puts %x{/bin/sh -c "ls **/*.rb | wc -l"}'), but I want to know where
ruby's getting its choice of shell from.
···
On Nov 14, 2:56 pm, Paul Lutus <nos...@nosite.zzz> wrote:
Noah Easterly wrote:
> What subshell does ` (backquote) use to run commands?$ irb
irb(main):001:0> `echo $SHELL`
=> "/bin/bash\n"YMMV, depending on platform and version.
--
Paul Lutushttp://www.arachnoid.com
Noah Easterly wrote:
I don't think it's using the $SHELL variable to choose which shell to
use (and I don't trust all the shells to set $SHELL)As an example:
so here's a command that I get different responses on, depending on
which shell it's run insh-2.05b$ ls **/*.rb | wc -l
1
sh-2.05b$ zsh -c "ls **/*.rb | wc -l"
12And in ruby backticks, I get the sh response
sh-2.05b$ ruby -e "puts %x{ls **/*.rb | wc -l}"
1
How about
ruby -e "puts %x{zsh -c 'ls **/*.rb' | wc -l}"
I would not trust ruby to figure out the "correct" shell. I would not even be surprised if it was hardwired to /bin/sh for consistent behavior.
-Nate
$ ruby -e'`ps -ef | grep rakrok`'
UID PID PPID NLWP PGID SID STIME TIME COMMAND
...
rakrok 1822 7866 0 15:55:57 pts/211 0:00 ruby -eputs `ps -ef | grep
rakrok`
rakrok 2172 1822 0 15:55:57 pts/211 0:00 sh -c ps -ef | grep rakrok
So the shell being used is /bin/sh
-rr-
···
On 11/14/06, Noah Easterly <noah.easterly@gmail.com> wrote:
I don't think it's using the $SHELL variable to choose which shell to
use (and I don't trust all the shells to set $SHELL)
Ok, from skimming process.c in the ruby source, it looks like it's hard
coded to use 'sh', either through
calls to system (implicitly, since it forwards to sh by ISO standards),
execl (explicitly), or spawnl (explicitly),
except in the case of WIN_32, though, when it calls do_spawn, which i
think checks the RUBYSHELL environment variable.
Which is confusing. Can anyone lend me some clarity?
···
On Nov 14, 3:49 pm, "Noah Easterly" <noah.easte...@gmail.com> wrote:
I don't think it's using the $SHELL variable to choose which shell to
use (and I don't trust all the shells to set $SHELL)As an example:
so here's a command that I get different responses on, depending on
which shell it's run insh-2.05b$ ls **/*.rb | wc -l
1
sh-2.05b$ zsh -c "ls **/*.rb | wc -l"
12And in ruby backticks, I get the sh response
sh-2.05b$ ruby -e "puts %x{ls **/*.rb | wc -l}"
1even when the $SHELL is set otherwise
sh-2.05b$ export SHELL=/bin/zsh
sh-2.05b$ echo $SHELL
/bin/zsh
sh-2.05b$ ruby -e "puts %x{echo $SHELL}"
/bin/zsh
sh-2.05b$ ruby -e "puts %x{ls **/*.rb | wc -l}"
1or if the ruby script is run by a different shell
zsh: echo $SHELL
/bin/zsh
zsh: ruby -e "puts %x{echo $SHELL}"
/bin/zsh
zsh: ruby -e "puts %x{ls **/*.rb | wc -l}"
1So my question remains, how is ruby choosing which shell to use for
backtick commands? (since in this case it really doesn't seem like it's
checking $SHELL at all).
I know I can force a choice of shell from within the backtick (ruby -e
'puts %x{/bin/sh -c "ls **/*.rb | wc -l"}'), but I want to know where
ruby's getting its choice of shell from.On Nov 14, 2:56 pm, Paul Lutus <nos...@nosite.zzz> wrote:
> Noah Easterly wrote:
> > What subshell does ` (backquote) use to run commands?$ irb
> irb(main):001:0> `echo $SHELL`
> => "/bin/bash\n"> YMMV, depending on platform and version.
> --
> Paul Lutushttp://www.arachnoid.com
Noah Easterly wrote:
I don't think it's using the $SHELL variable to choose which shell to
use (and I don't trust all the shells to set $SHELL)
No, The $SHELL variable should be an accurate report of the shell in use. It
is not a question of the $SHELL variable _causing_ the named shell to be
used, but that it should accurately _report_ which shell is in use. That is
what it is supposed to do, and if it were not accurate, that would be a
serious bug.
(long pause ....)
Based on the remaining content of your post, it seems the $SHELL variable
isn't reporting anything accurate or useful. That's discouraging.
···
--
Paul Lutus
http://www.arachnoid.com