いくつかの行を含むファイルがあります:
/snapshot/200
/snapshot/201
/snapshot/202
今、私はwhile IFSループで各行を使用して、それらに対して特定のアクションを実行しようとしています。
while IFS=' ' read -r test || [ -n "${test}" ];
do
if ssh root@$TARGET "[ ! -d $test ]"
then
echo "${test}"
fi
done < $filelist
ここでの問題は、1つの結果しか得られず、ファイル全体をループしていないのですか?これらの名前のディレクトリはないため、ifステートメントは正しいはずです。
ただし、if部分全体を削除して、
echo "${test}"
ループは機能します。
ssh
はwhile
ループから標準入力ストリームを継承し、read
によって読み取られる最初の行を除いて$filelist
ファイル全体を読み取ります。
ssh
がこれを実行しないようにするには、ssh -n
またはssh ... </dev/null
を使用します。
ssh
はこのように機能し、次のように、単純なリダイレクトまたはパイプを介してリモートシステムにデータを渡すことができます。
ssh remote 'cat >remotefile' <localfile
" パイプ、リダイレクト、およびリモート接続を使用したシェルコマンドの理解に役立つ必要があります "も参照してください。