4

私はシェルスクリプトの初心者なので、ばかげたことをしているに違いありません。なぜこれが機能しないのですか:

#!/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

2行が印刷され、それぞれが同じ値を持つはずです...しかし、そうではありません。最初の print ステートメント [ls -d foo* の結果 | wc -l] には正しい値がありますが、2 番目の print ステートメントは正しくありません。常に空白で出力されます。$count に値を割り当てるために何か特別なことをする必要がありますか?

私は何を間違っていますか?

ありがとう

4

1 に答える 1

7
#!/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

スクリプトの唯一の問題は、ヒアドキュメントトークンが引用符で囲まれていない場合、シェルが変数展開を行うため$count、リモートコマンドが出荷される前にローカルシェルによって展開されていたことです...

于 2011-02-14T16:38:58.803 に答える