在 while 循环中带有输入重定向的命令
Command with input redirection inside while loop
我正在尝试在包含要执行的命令的文本文件中循环:
while IFS= read -r line
do
$line
done < msmtp-cmds.txt
文本文件中的命令是:
msmtp -t < message1.txt
msmtp -t < message2.txt
命令替换后,重定向符号似乎被忽略了,因为 msmtp 正在尝试使用 message1.txt 作为收件人,但我不明白为什么
<
不是命令的参数; shell 语法在 之前 参数扩展被解析。如果您的意图是执行从文件中读取的任意代码,那就是 eval
的目的。
while IFS= read -r line; do
eval "$line"
done < msmtp-cmds.txt
但是,到那时,您还不如只获取文件而不是逐行读取它:
. smtp-cmds.txt
我正在尝试在包含要执行的命令的文本文件中循环:
while IFS= read -r line
do
$line
done < msmtp-cmds.txt
文本文件中的命令是:
msmtp -t < message1.txt
msmtp -t < message2.txt
命令替换后,重定向符号似乎被忽略了,因为 msmtp 正在尝试使用 message1.txt 作为收件人,但我不明白为什么
<
不是命令的参数; shell 语法在 之前 参数扩展被解析。如果您的意图是执行从文件中读取的任意代码,那就是 eval
的目的。
while IFS= read -r line; do
eval "$line"
done < msmtp-cmds.txt
但是,到那时,您还不如只获取文件而不是逐行读取它:
. smtp-cmds.txt