2012-09-27 17 views
5

如果我做哪個shell ruby​​使用它的子shell?

`echo $SHELL` 

,我得到/bin/bash

但是,如果我嘗試運行這個循環:

`for x in {1..20}; do echo $x; done` 

我得到{1..20},而不是預期的20個電話號碼。

也許紅寶石使用其他一些shell來運行這些命令?我該如何解決這個問題?

編輯:軟件版本:

$ irb --version 
irb 0.9.5(05/04/13) 
$ ruby --version 
ruby 1.8.7 (2010-06-23 patchlevel 299) [x86_64-linux] 
$ bash --version 
GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu) 
+0

我得到' 「/斌/慶典\ N」'和'「1 \ N2 \ N3 \ N4 \ N5 \ N6 \ N7 \ n8 \ N9 \ N10得到您想要的殼\ N11 \ N12 \ N13 \ N14 \ N15 \ N16 \ N17 \ N18 \ N19 \ N20 \ n「個' – Kyle

回答

6

紅寶石使用sh作爲子shell的反引號和#system。 $SHELL是你的默認shell,$0應該告訴你你當前的shell。您可以通過專門調用它

$ ruby -v 
ruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux], MBARI 0x6770, Ruby Enterprise Edition 2011.03 
$ irb --version 
irb 0.9.5(05/04/13) 
$ irb 
irb(main):001:0> `echo $0 -- $SHELL` 
=> "sh -- /bin/bash\n" 
irb(main):002:0> `bash -c 'echo $0 -- $SHELL'` 
=> "bash -- /bin/bash\n" 
irb(main):003:0> ENV['SHELL'] 
=> "/bin/bash" 
irb(main):004:0> system 'bash', '-c', 'echo $0 -- $SHELL' 
bash -- /bin/bash 
=> true 
irb(main):005:0> system 'echo $0 -- $SHELL' 
sh -- /bin/bash 
=> true