Команда с перенаправлением ввода внутри цикла while - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь выполнить цикл внутри текстового файла, содержащего команды, которые должны быть выполнены:

    while IFS= read -r line
    do
      $line
    done < msmtp-cmds.txt

Команды внутри текстового файла:

  msmtp -t < message1.txt
  msmtp -t < message2.txt

После замены команд знак перенаправлениякажется, игнорируется, так как msmtp пытается использовать message1.txt в качестве получателя, но я не могу понять, почему

1 Ответ

1 голос
/ 03 октября 2019

< не является аргументом команды;это синтаксис оболочки, который анализируется перед расширением параметра . Если ваше намерение состоит в том, чтобы выполнить произвольный код, считанный из файла, то для этого и нужен eval.

while IFS= read -r line; do
  eval "$line"
done < msmtp-cmds.txt

Однако на этом этапе вы можете просто получить исходный файл, а не читать его построчнострока:

. smtp-cmds.txt
...