Ошибка, которую я вижу для некоторого тестового кода,
can't read "file_": no such variable
while executing
, что указывает на то, что TCL ищет несуществующую file_
переменную. Это можно исправить, отметив, где заканчиваются переменные существа и; TCL использует для этого тот же синтаксис, что и Perl, {}
вокруг имени переменной.
spawn sh -c "ssh -o StrictHostKeyChecking=no hostname <./script.sh > /root/scp_output_${file}_${date}.txt"
Вы читаете три строчки, значит звоните read
три раза:
{
IFS= read -r a
IFS= read -r b
IFS= read -r c
} <<'END_INPUT'
line 1
line 2
line 3
END_INPUT
printf '<%s> <%s> <%s>\n' "$a" "$b" "$c"
Обобщая это на произвольное количество строк:
set --
while IFS= read -r line; do
set -- "$@" "<$line>" # cheating here by adding on the "<...>"
done <<'END_INPUT'
line 1
line 2
line 3
line 4
END_INPUT
printf '%s\n' "$*"
"$*"
будет расширен до одной строки в кавычках, состоящей из всех позиционных параметров, разделенных первым символом$IFS
(пробела по умолчанию ).