我有一個腳本逐行讀取文件,並根據它讀取的內容做一些事情。它所做的一件事是ssh到遠程服務器並獲取一些信息。由於某種原因,這完全超出了我的視野,這會停止從文件中讀取行。在Bash腳本中調用SSH的文件讀取
劇本基本上是(我剪了很多它簡化問題,所以如果它看起來像它並沒有真正做任何事情,不用擔心):
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)是stdin)?嘗試ssh -n,看看會發生什麼...... – Useless
我強烈建議你在逐行閱讀文件時總是使用'read -r',並且你可能希望'while IFS = $'\ n'read -r'如果空白對你很重要。 – Sorpigal