我正在尝试做这样的事情
ruby test.rb | source /dev/stdin
test.rb只打印出cd /
。没有错误,但它也没有做任何事情。如果我用这个:
ruby test.rb > /tmp/eraseme2352; source /tmp/eraseme2352
它工作正常,但我想避开中间文件。
编辑:这一点的全部意义在于命令完成后需要保留更改。对不起,我之前没有说清楚。
答案 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