ファイルを1行ずつ読み込み、読み取った内容に基づいて処理するスクリプトがあります。それがすることの1つは、リモートサーバーへのsshであり、いくつかの情報を取得します。何らかの理由でそれが私を完全に超えている場合、これはファイルからの行の読み取りを停止します。SSHのBashスクリプトの読み込みファイルの読み込み
スクリプトは本質的である(私は質問を簡素化するために、それの多くを切り取ってきたので、それはそれは本当に何もしていないように見える場合は心配しないでください):このスクリプト
cat $csv | while read line; do
shopt -s nocasematch
for j in "${file_list[@]}"; do
found=0;
for i in $(ssh some_server "ls /some_path/${line:0:1}/${line:1:1}/$line*"); do
if [[ $i =~ .*$j$ ]]; then
echo "do something";
found=1;
break;
fi;
done;
if [[ $found -ne 1 ]]; then
echo "don't have $j";
fi;
if [[ $found -ne 1 && $j == '\.pdf' ]]; then
getPDF $line ${dest};
fi;
done;
shopt -u nocasematch
done
csvの最初の行でのみ実行されます。スクリプトの "ssh"部分を何か他のものに置き換えると、ファイルのすべての行ですべて実行されます。何がありますか?
はsshをここにあなたの標準入力を(食べている、あなたの[猫の無駄な使用] (http://en.wikipedia.org/wiki/Cat_%28Unix%29#Useless_use_of_cat)は標準ですか? ssh -nを試してみてください... – Useless
ファイルを1行ずつ読み込む際に 'read -r'を使用することを強くお勧めします。おそらく' while IFS = $ '\ n' read -r'空白があなたにとって重要であるならばそれで。 – Sorpigal