【问题标题】:Including "cat" command in unix shell Here Document在 unix shell 中包含“cat”命令 Here Document
【发布时间】:2014-10-11 14:02:29
【问题描述】:

我正在尝试创建一个 Here Document,它是一个包含 cat 命令的 shell 脚本。当然,遇到第二只猫时它会失败。我也在执行很多替换,所以不能使用“DOC”转义技巧。

myfile="/tmp/myipaddr"
cat >/usr/bin/setIPaddress <<_DOC_

...     

OUT=`cat $myfile`

...
_DOC_

我想我可以回显到一个文件中,但这看起来很笨拙,而且我有很多引号和反引号需要逃避?!?还有其他想法吗?

【问题讨论】:

  • 这应该可以,有什么问题?
  • 它有效。如果您期望OUT 在(外部)cat 执行期间包含cat $myfile 的内容,那么您就错了。

标签: bash shell unix heredoc


【解决方案1】:

假设文件包含

hello world

正如所写,您生成的脚本将包含该行

OUT=hello world

因为命令替换是立即执行的。

至少,您需要将此处文档中的行引用为

OUT="`cat $myfile`"

我怀疑您想要的是在生成的 shell 脚本中包含文字命令替换。为此,您需要引用反引号以防止它们立即被评估。更好的是,使用推荐的命令替换形式 $(...),并引用美元符号。

cat >/usr/bin/setIPaddress <<_DOC_

...     

OUT=\$(cat $myfile)

...
_DOC_

/usr/bin/setIPaddress 然后将包含该行

OUT=$(cat /tmp/myipaddr)

【讨论】:

  • 还有更高效的是OUT=\$(&lt;"$myfile")
  • 假设/usr/bin/setIPaddress 将与bash 一起执行。
猜你喜欢
  • 1970-01-01
  • 2017-03-14
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多