【发布时间】:2011-07-05 15:24:28
【问题描述】:
我有一个脚本可以逐行读取文件并根据它读取的内容执行操作。它所做的其中一件事是通过 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 吃掉你的标准输入了吗(这里,你的useless use of cat 是标准输入)?试试 ssh -n 看看会发生什么...
-
我强烈建议您在逐行读取文件时始终使用
read -r,如果空格对您很重要,您可能需要while IFS=$'\n' read -r。