我有一个专有的命令行程序,我想用bash脚本调用。它在.conf文件中有几个选项,不能用作命令行开关。我可以使用开关-F
将程序指向任何.conf文件。
我宁愿不管理与此脚本分开的.conf文件。有没有办法创建临时文档来使用.conf文件?
我尝试了以下内容:
echo setting=value|my_prog -F -
但它不会将-
识别为stdin。
答案 0 :(得分:4)
您可以尝试使用/dev/stdin
代替-
。
您还可以使用此处的文档:
my_prog -F /dev/stdin <<OPTS
opt1 arg1
opt2 arg2
OPTS
最后,您可以让bash为您分配文件描述符(例如,如果您需要stdin用于其他内容):
my_prog -F <(cat <<OPTS
opt1 arg1
opt2 arg2
OPTS
)
答案 1 :(得分:2)
在写这个问题时,我想出来并认为我会分享:
exec 3< <(echo setting=value) my_prog -F /dev/fd/3
它读取#3文件描述符,我不需要管理任何权限,也不用担心在我完成后删除它。
答案 2 :(得分:2)
听起来你想做这样的事情:
#!/bin/bash
MYTMPFILE=/tmp/_myfilesettings.$$
cat <<-! > $MYTMPFILE
somekey=somevalue
someotherkey=somevalue
!
my_prog -F $MYTMPFILE
rm -f $MYTMPFILE
这使用所谓的“here”文档,因为“cat&lt;&lt; - !”之间的所有内容都是如此。取决于 !被逐字阅读为stdin。其中的' - '基本上告诉shell删除所有前导标签。
您可以使用任何内容作为“到此处”标记,例如,这也可以使用:
cat <<-EOF > somewhere
stuff
more stuff
EOF
答案 3 :(得分:2)
您可以使用流程替换:
my_prog -F <(command-that-generates-config)
其中command-that-generates-config
可以是echo setting=value
或函数。