установить переменную в разделе heredoc - PullRequest
4 голосов
/ 14 февраля 2011

Я новичок в сценарии оболочки, поэтому я должен делать что-то глупое, почему это не сработает:

#!/bin/sh

myFile=$1

while read line
do
ssh $USER@$line <<ENDSSH
ls -d foo* | wc -l 
count=`ls -d foo* | wc -l`
echo $count
ENDSSH
done <$myfile

Две строки должны быть напечатаны, и каждая должна иметь одинаковое значение ... но они не имеют. Первый оператор print [результат ls -d foo * | wc -l] имеет правильное значение, второй оператор печати неверен, он всегда печатает пустым. Нужно ли делать что-то особенное, чтобы присвоить значение $ count?

Что я делаю не так?

Спасибо

1 Ответ

7 голосов
/ 14 февраля 2011
#!/bin/sh

while read line; do
  echo Begin $line
  ssh $USER@$line << \ENDSSH
  ls -d foo* | wc -l 
  count=`ls -d foo* | wc -l`
  echo $count
ENDSSH
done < $1

Единственная проблема с вашим сценарием состояла в том, что когда токен heredoc не заключен в кавычки, оболочка выполняет расширение переменных, поэтому $count расширялась вашей локальной оболочкой до отправки удаленных команд ...

...