2012-09-27 14 views
5

Jeśli robięKtóry ruby ​​powłoki używa jako podpowłoki?

`echo $SHELL` 

, mam /bin/bash.

Ale jeśli próbuję uruchomić tę pętlę:

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

mam {1..20} zamiast oczekiwanych 20 numerów.

Może ruby ​​używa innej powłoki do uruchamiania tych poleceń? Jak mogę obejść ten problem?

EDIT: wersje oprogramowania:

$ 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

uzyskać ' "/ bin/bash \ n"' i '" 1 \ n2 \ n3 \ n4 \ n5 \ n6 \ n7 \ n8 \ n9 \ n10 \ n11 \ n12 \ n13 \ n14 \ n15 \ n16 \ n17 \ n18 \ n19 \ n20 \ n "' – Kyle

Odpowiedz

6

Ruby używa sh jako podpowłoki dla backticks i #system. $SHELL to twoja domyślna powłoka, $0 powinieneś powiedzieć twoją bieżącą powłokę. Można uzyskać pożądany powłokę przez specjalnie powołując go

$ 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 
Powiązane problemy