我有一个文件,其中包含一些行:
/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 命令”。