bash 中 < 和 >> 与 - 一起使用时的区别

bash 中 < 和 >> 与 - 一起使用时的区别

这可能有点具体,就像我在查看 rpm 包的脚本时遇到的那样。最初的包有:

rpm --import - << EOF
GPG
KEY
HERE
EOF

此操作失败并出现以下错误:-:导入读取失败(0)。

软件包已被修改,现在安装时没有出现以下问题:

echo "GPG
KEY
HERE" >> rpm --import -

我不明白为什么第一个失败而第二个失败。另外,是否可以有

echo "GPG
KEY
HERE" | rpm --import -

作为一种选择?

提前谢谢了!

答案1

您的第一个示例将实例之间的文本EOF视为具有变量插值的双引号字符串(即,对以成对反引号开头或在成对反引号中的所有变量、命令和表达式$进行求值和扩展)。这是作为标准输入rpm命令。

您的第二个实例附加这三行(也带有变量插值):

GPG
KEY
HERE --import -

rpm到当前目录中的文件。特别注意的是它不运行rpm命令

您的第三个选项写入三行(再次使用变量插值):

GPG
KEY
HERE

作为标准输入对于命令rpm --import -

在所有情况下,您都可以通过在字符串周围使用单引号而不是双引号或不使用双引号来防止变量的扩展和插值(在第一种情况下,您将使用<<'EOF')。

另请注意,它似乎rpm不用-作读取的标记标准输入,所以没有一个选项可以达到您想要的效果。您需要将 GPG 密钥写入文件或使用该<( echo... )构造代替-.

相关内容