2010-10-27 61 views
0

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

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

我试过如下:

echo setting=value|my_prog -F -

但它不承认-作为标准输入。

回答

4

您可以试试/dev/stdin而不是-

您也可以使用此文件:

my_prog -F /dev/stdin <<OPTS 
opt1 arg1 
opt2 arg2 
OPTS 

最后,你可以让bash的分配文件描述符你(如果你需要标准输入别的东西,例如):

my_prog -F <(cat <<OPTS 
opt1 arg1 
opt2 arg2 
OPTS 
) 
+0

我去了'my_prog -F <(echo setting = value)'。它的工作,这是一个简单的一行。我一直认为'<(回声设置=值)'意味着去stdin..nope。 – User1 2010-10-28 14:46:25

+0

另外,我喜欢这个解决方案,因为我不必担心fd = 3是否被用在其他地方,比如我的答案。 – User1 2010-10-28 14:48:02

2

在写这个问题,我想通了,我想我也有同感:

 
exec 3< <(echo setting=value) 
my_prog -F /dev/fd/3 

它读取#3文件描述符,我也不需要管理的任何权限或担心删除它时,我完成了。

2

这听起来像你想要做这样的事情:

#!/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 
+0

实际上连字符只会告诉shell删除连续的引导标签(不是空格)。 'Tab-tab-space-tab-foo'会变成'space-tab-foo','space-space-bar'会变成'space-space-bar'。 – 2010-10-27 18:44:23

+0

这是一个公平点。相应编辑:-) – 2010-10-27 21:24:12

2

您可以使用进程替换为这个:

my_prog -F <(command-that-generates-config) 

其中command-that-generates-config可像echo setting=value或一个功能。