标准来源(OSX上的Bash)

时间:2010-04-04 14:53:32

标签: bash macos

我正在尝试做这样的事情

 ruby test.rb | source /dev/stdin

test.rb只打印出cd /。没有错误,但它也没有做任何事情。如果我用这个:

 ruby test.rb > /tmp/eraseme2352; source /tmp/eraseme2352

它工作正常,但我想避开中间文件。

编辑:这一点的全部意义在于命令完成后需要保留更改。对不起,我之前没有说清楚。

6 个答案:

答案 0 :(得分:6)

您可以尝试:

$(ruby test.rb)

$(...)告诉bash执行()内命令产生的任何输出。

答案 1 :(得分:3)

eval `ruby test.rb`

答案 2 :(得分:2)

在经验丰富的bash黑客出现纠正我之前,你可以这样做:

for c in `ruby test.rb` ; do $c ; done

警告:这不符合您的要求。阅读评论!

答案 3 :(得分:2)

以下代码适用于Mac OS X 10.6.7:

/bin/bash

sw_vers   # Mac OS X 10.6.7

bash --version   # GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)

source /dev/stdin <<<'echo a b c'

source /dev/stdin  <<< "$(ruby -e 'puts "echo a b c"')"

source /dev/stdin <<<'testvar=TestVal'; echo $testvar


source /dev/stdin <<-'EOF'
echo a b c
EOF

source /dev/stdin <<-'EOF'
$(ruby -e 'puts "echo a b c"') 
EOF

(
source /dev/stdin <<-'EOF'
testvar=TestVal
EOF
echo $testvar
)

答案 4 :(得分:1)

bash(不是sh):

while read -a line
do
  "${line[@]}"
done < <(somescript)

命令参数中的空格需要反斜杠转义才能工作。

答案 5 :(得分:0)

如何

ruby test.rb | bash