Bash 脚本:循环遍历文件

Bash 脚本:循环遍历文件

我有一个文件,其中包含一些行:

/snapshot/200
/snapshot/201
/snapshot/202

现在我尝试使用每行和 while IFS 循环来对它们执行某些操作。

while IFS=' ' read -r test || [ -n "${test}" ];
do
    if ssh root@$TARGET "[ ! -d $test ]"
    then
        echo "${test}"
    fi
done < $filelist

这里的问题是我只得到一个结果并且它没有循环整个文件? if 语句应该是正确的,因为不存在具有这些名称的目录。

但是如果我删除整个 if 部分并只使用

echo "${test}"

循环有效。

答案1

ssh从循环继承标准输入流while,并将读取整个$filelist文件,除了由 读取的第一行read

要停止ssh执行此操作,请使用ssh -n、 或ssh ... </dev/null

ssh通过这种方式工作,您可以通过简单的重定向或管道将数据传递到远程系统,如下所示

ssh remote 'cat >remotefile' <localfile

也可以看看 ”需要帮助理解带有管道、重定向和远程连接的 shell 命令”。

相关内容