bash - Bash 脚本中的 SSH 搞乱文件读取

标签 bash unix

<分区>

我有一个脚本,它逐行读取文件并根据读取的内容执行操作。它所做的其中一件事是通过 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 正在使用标准输入。通过 -n

关于bash - Bash 脚本中的 SSH 搞乱文件读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6585100/

相关文章:

bash - 在 xargs 变量上使用 sed 在 shell 扩展中不起作用

bash - 如何在 bash 脚本中使用远程命令结果分配局部变量?

linux - 在日志文件中搜索特定文本,然后将日志文件的所有内容合并到一个文件中

linux - bash 脚本语言使用循环打印数字列表

linux - 以编程方式发送 SSH 转义字符

regex - 如何匹配两个文件并按列过滤第三个文件的匹配值?

linux - 在 Bash 脚本中指定路径变量

c - 比较c中的两个char指针值时strcmp返回true

c - 通过 BASH 在 C 中指定命令行参数

unix - 编译 Haskell 的多个 .hs 文件 - Unix