将文件内容重定向为 shell 命令的输入

Redirect content of the file as input to shell command

我试图将文件的内容传递给 bash 命令,但我得到以下 error.Here 是代码片段:

for QM in QM/* do sudo -u mqm runmqsc "$(basename -s .txt "$QM")" < cat $(basename $QM) done

+ sudo -u mqm runmqsc MSGSVCDC MSGSVCDC.txt /var/lib/cloud/instance/scripts/part-001:第 51 行:cat:没有那个文件或目录

谁能告诉我如何解决它。

您使用构造 < cat $(basename $QM) 进行了一种奇特的尝试,试图发明 UUOC 的变体。但是将文件的内容作为标准输入传递给bash命令,重定向只是<$QM,因为应用basename是错误的这里。如果在某些情况下你真的需要通过像 basename 这样的命令预处理文件名,最可移植的语法(也被旧的 shell 理解)是 <`basename $QM`。在 Bash 当然 <$(basename $QM) 也可以。