我有一个脚本,逐行读取一个文件,并根据它读取的东西做东西。 它所做的一件事是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”部分,它会一直运行在文件的所有行上。 是什么赋予了?
sorting范围Linux
linux批量重命名目录和strip#字符从名字
LD_LIBRARY_PATH的副作用
在configuration文件中使用ssh命令在远程机器上执行shell脚本
在bash脚本中,$' 0'会评估什么,为什么?
从terminal创build临时Cron作业
execl()bash返回一个eio(input/输出错误)后从标准input读取
在Apache Nifi中从ExecuteProcess调用远程shell脚本时,无法将envionmentvariables作为敏感字段传递
查看当前login的用户,并从/ etc / passwd获取他们的信息
ssh正在使用stdin。 通过-n 。
如果你在循环内运行从标准输入(如ssh )读取的命令,你需要确保:
你的循环不会遍历stdin
您的命令已将其stdin重定向到:
前者:
while read -u 5 -r; do ssh "$REPLY" ... done 5<file
…使用bash 4.1或更新版本,可以使用自动文件描述符赋值来重写:
while read -u "$file_fd" -r; do ssh "$REPLY" ... done {file_fd}<file
后者:
while read -r; do ssh "$REPLY" ... </dev/null done <file
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。