我有ruby脚本,它接收配置文件的名称作为参数。 我需要在循环中运行它,在每次迭代时更改配置内的一些参数。
sed一切正常,但我不知道如何将sed的脚本输出传递给ruby,以便ruby会认为它是文件?有可能吗?
代码可能更清晰:
这就是通常推出的方式:
ruby script.rb config.conf
我想要的是:
sed 's/one_param/another_param/' config.conf | ruby script.rb ???????
我应该放什么让ruby脚本认为它收到的文件内容为sed的输出? 我想到了将临时文件保存为sed的输出然后将文件传递给script.rb的解决方法,但我确定有更好的方法来实现它
答案 0 :(得分:2)
有关如何使用流程替换的信息,请参阅this answer。
简而言之:
cat <( echo "yo")
或者在你的情况下:
ruby script.rb <(sed 's/one_param/another_param/' config.conf)
要创建流程替换,请将命令与<(...)
括起来,如:<(COMMAND)
答案 1 :(得分:0)
传统上,UNIX程序接受-
作为文件名来表示“从标准输入读取”:
echo foo | wc -
这是一项基本适用于所有地方的惯例。
然而,不了解Unix的脚本编写者可能不会想到实现这一点。这是一个应由他们修复的错误,但您可以使用/dev/stdin
来解决此问题:
echo foo | wc /dev/stdin
在您的示例中,这将是
之一sed 's/one_param/another_param/' config.conf | ruby script.rb -
sed 's/one_param/another_param/' config.conf | ruby script.rb /dev/stdin