Bash

Bash 腳本:循環文件

  • May 5, 2020

我有一個文件,裡面有幾行:

/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}"

循環有效。

ssh從循環繼承標準輸入流while並將讀取您的整個$filelist文件,除了由read.

要停止ssh這樣做,請使用ssh -nssh ... </dev/null

ssh以這種方式工作以允許您通過簡單的重定向或管道將數據傳遞到遠端系統,如

ssh remote 'cat >remotefile' <localfile

另請參閱“需要幫助理解帶有管道、重定向和遠端連接的 shell 命令”。

引用自:https://unix.stackexchange.com/questions/584427