首頁  >  問答  >  主體

centos - shellscript 循環執行程式碼,但每次執行一次以後就退出了?

while read $HOSTNAME
do
    ssh root@$HOSTNAME "poweroff"
done < host.log

host.log 中的內容:
192.168.122.1
192.168.122.2
192.168.122.3

機器配置過ssh互信

執行那個後發現每次只能關掉一台機器腳本就退出了。需要再次執行才能關閉後面的機器,請問是為什麼?謝謝

过去多啦不再A梦过去多啦不再A梦2733 天前854

全部回覆(4)我來回復

  • 淡淡烟草味

    淡淡烟草味2017-04-25 09:03:06

    在這行寫成這樣試試: ssh root@$HOSTNAME "poweroff" < /dev/null

    回覆
    0
  • 漂亮男人

    漂亮男人2017-04-25 09:03:06

    或寫 ssh -n 吧。出現這種情況的原因是,ssh 讀取了你餘下的 stdin。

    所以我盡量不使用 while + 重定向讀取數據,要讀也用另外的文件描述符來讀。 stdin 很容易被別的指令讀走的。

    回覆
    0
  • 黄舟

    黄舟2017-04-25 09:03:06

    perl -ne 'system q/ssh/, q/root@/.$_,q/poweroff/' host.log #這樣該可以

    回覆
    0
  • 怪我咯

    怪我咯2017-04-25 09:03:06

    去掉while read $HOSTNAME中的$

    while read HOSTNAME
    do
    ssh root@$HOSTNAME "poweroff"
    done < host.log

    回覆
    0
  • 取消回覆