代码之家  ›  专栏  ›  技术社区  ›  Rogach

红宝石用哪一个贝壳作为它的子贝壳?

  •  5
  • Rogach  · 技术社区  · 12 年前

    如果我这样做

    `echo $SHELL`
    

    ,我明白 /bin/bash

    但如果我尝试运行此循环:

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

    我明白了 {1..20} 而不是预期的20个数字。

    也许ruby使用其他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)
    
    1 回复  |  直到 12 年前
        1
  •  6
  •   dbenhur    12 年前

    Ruby使用 sh 作为backticks和#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