如何在Bash中动态创建.conf文件

时间:2010-10-27 15:14:41

标签: bash

我有一个专有的命令行程序,我想用bash脚本调用。它在.conf文件中有几个选项,不能用作命令行开关。我可以使用开关-F将程序指向任何.conf文件。

我宁愿不管理与此脚本分开的.conf文件。有没有办法创建临时文档来使用.conf文件?

我尝试了以下内容:

echo setting=value|my_prog -F -

但它不会将-识别为stdin。

4 个答案:

答案 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或函数。