我有一个专有的命令行程序,我想在bash脚本中调用。它在.conf文件中有几个选项不可用作命令行开关。我可以使用开关将程序指向任何.conf文件,-F
。如何在Bash中快速创建.conf文件
我宁愿不管理与此脚本分开的.conf文件。有没有办法创建一个临时文件来使用.conf文件?
我试过如下:
echo setting=value|my_prog -F -
但它不承认-
作为标准输入。
我有一个专有的命令行程序,我想在bash脚本中调用。它在.conf文件中有几个选项不可用作命令行开关。我可以使用开关将程序指向任何.conf文件,-F
。如何在Bash中快速创建.conf文件
我宁愿不管理与此脚本分开的.conf文件。有没有办法创建一个临时文件来使用.conf文件?
我试过如下:
echo setting=value|my_prog -F -
但它不承认-
作为标准输入。
您可以试试/dev/stdin
而不是-
。
您也可以使用此文件:
my_prog -F /dev/stdin <<OPTS
opt1 arg1
opt2 arg2
OPTS
最后,你可以让bash的分配文件描述符你(如果你需要标准输入别的东西,例如):
my_prog -F <(cat <<OPTS
opt1 arg1
opt2 arg2
OPTS
)
在写这个问题,我想通了,我想我也有同感:
exec 3< <(echo setting=value) my_prog -F /dev/fd/3
它读取#3文件描述符,我也不需要管理的任何权限或担心删除它时,我完成了。
这听起来像你想要做这样的事情:
#!/bin/bash
MYTMPFILE=/tmp/_myfilesettings.$$
cat <<-! > $MYTMPFILE
somekey=somevalue
someotherkey=somevalue
!
my_prog -F $MYTMPFILE
rm -f $MYTMPFILE
此使用所谓的“这里”文件,所有内容之间的“猫< < - !”取决于 !是逐字读作stdin。这个' - '基本上告诉shell删除所有引导标签。
可以使用任何内容为“前往此处”标记,例如,这会工作,以及:
cat <<-EOF > somewhere
stuff
more stuff
EOF
实际上连字符只会告诉shell删除连续的引导标签(不是空格)。 'Tab-tab-space-tab-foo'会变成'space-tab-foo','space-space-bar'会变成'space-space-bar'。 – 2010-10-27 18:44:23
这是一个公平点。相应编辑:-) – 2010-10-27 21:24:12
您可以使用进程替换为这个:
my_prog -F <(command-that-generates-config)
其中command-that-generates-config
可像echo setting=value
或一个功能。
我去了'my_prog -F <(echo setting = value)'。它的工作,这是一个简单的一行。我一直认为'<(回声设置=值)'意味着去stdin..nope。 – User1 2010-10-28 14:46:25
另外,我喜欢这个解决方案,因为我不必担心fd = 3是否被用在其他地方,比如我的答案。 – User1 2010-10-28 14:48:02