我知道我可以使用bash的进程替换功能通过进程替换来指定文件参数,然后使用here文档来指定数据,如下所示:
foo --config <(cat <<EOF
# contents of config file
...
EOF
)
当我在同一个脚本中的两个不同位置需要相同的here文档时,将here文档存储在变量中会更有用。
我该怎么做:
read -r -d '' MY_CONFIG <<EOF
# contents of config file
...
EOF
那么如何调用foo
将$MY_CONFIG
的内容传递给--config
参数?
答案 0 :(得分:2)
此外,您可以在流程替换中使用herestring
:
MY_CONFIG="hello world"
md5sum <( <<< "$MY_CONFIG" )
答案 1 :(得分:1)
我在写这个问题时遇到了解决方案。而不是使用<(cat ...)
,我们可以使用<(echo ...)
从流程替换中编写内容。所以我们可以简单地使用:
foo --config <(echo "$MY_CONFIG")
测试这个的一个简单例子是:
MY_CONFIG="hello world"
less -f <(echo "$MY_CONFIG")
这应该打开更少,并在缓冲区中显示hello world
。
答案 2 :(得分:1)
我认为您发现自己的解决方案更简单,但为了完整起见,您可以通过here-docs来实现这一目标。
要在变量中存储here-doc,您可以使用(>
是辅助提示字符串):
$ var=$(cat <<EOF
> line1
> line2
> EOF
> )
$ declare -p var
declare -- var="line1
line2"
然后,使用带有该变量内容的here-doc:
$ cat <<EOF
> $var
> EOF
line1
line2
即,对于你的情况,这样的事情:
$ foo --config <(cat <<EOF
> $var
> EOF
> )
正如我所说,仅使用<(echo "$var")
或<(printf '%s\n' "$var")
显然更为简单。