【问题标题】:Expect script called from bash script not returning control when completed期望从 bash 脚本调用的脚本在完成时不会返回控制
【发布时间】:2019-06-02 02:26:18
【问题描述】:

我正在使用其中的多线程从 bash 脚本内部的 for 循环中调用期望脚本。期望脚本执行 ssh 登录并使用 nohup 命令调用 python 脚本以重新启动主机。 但是,完成重启后,控制并没有返回到bash脚本。

Shell 脚本代码:

for host in ${hosts[@]};
do
  ./b.exp $id $pswd $host &
done
wait
echo "Completed"

期望脚本代码:

set timeout -1
spawn ssh <server login>
send "nohup /loc/c.py $host\r"
send -- "exit\r"
expect eof

我期待在所有主机重新启动完成后,脚本应该打印“已完成”。 但是,它没有打印任何东西,我需要手动退出执行。

有人可以告诉我在这里做错了什么吗?

【问题讨论】:

    标签: bash expect


    【解决方案1】:

    nohup 不分离终端,你要发送

     nohup /loc/c.py $host &
    

    &amp; 在后台运行作业是重大变化。

    (正确地说$host也应该被引用,但是如果你确定它包含一个没有空格或通配符的单个标记,这应该没有关系。同样"${hosts[@]}"应该有双引号,但同样,在给定条件,不带引号应该没问题。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-23
      • 2014-09-20
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多