5

私が行った場合

`echo $SHELL`

、私は得る/bin/bash

しかし、このループを実行しようとすると:

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

{1..20}予想される20個の数字ではなく取得します。

たぶん、ルビーは他のシェルを使ってそれらのコマンドを実行しますか? どうすればこれを回避できますか?

編集:ソフトウェアのバージョン:

$ 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)
4

1 に答える 1

6

Ruby はsh、バッククォートと #system のサブシェルとして使用します。$SHELLはデフォルトのシェルで$0あり、現在のシェルがわかります。具体的に呼び出すことで、目的のシェルを取得できます

$ 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
于 2012-09-27T22:10:51.403 に答える