首页 > 解决方案 > SSH 时从另一个脚本调用脚本不会执行所有命令

问题描述

我正在尝试从另一个脚本调用脚本,因为我正在使用“spawn”(来自期望数据包)来执行 SSH 到另一台机器。基本上,在我的主脚本(scriptA.sh)中执行比较和例程后,它会调用另一个脚本(scriptB.sh)。调用工作正常,因为我可以看到 SSH 已正确执行。但是,由于并非所有命令都正确执行,因此看起来有些问题。如果我手动执行这些命令,它就可以工作。

我在有时会冻结并显示完全白屏的机器上运行应用程序。scriptB.sh 杀死 firefox 并在后台重新打开浏览器。如果我手动执行命令,这些命令可以正常工作:

  1. sudo killall 火狐
  2. export DISPLAY=:0.0 (我不需要“sudo”)
  3. /usr/local/bin/run_digital_signage_firefox.sh&(此命令必须在没有“sudo”的情况下运行)

这是来自我的 scriptA.sh 的一个非常小的简历(我执行这个脚本是这样的:sudo ./scriptA.sh):

#!/bin/bash

...something....

 export username
 export password
 export IP
 sh /home/mydirectory/scriptB.sh

...something....

这是我的 scriptB.sh(我在 scriptA.sh 中使用“export”传递用户名、密码和 IP):

#!/bin/bash
   /usr/bin/expect << EOF
   spawn ssh test@$IP "sudo killall firefox && export DISPLAY=:0.0 && /usr/local/bin/run_digital_signage_firefox.sh&"
   sleep 3
   expect "*?ame:*" {
   send "$username\r"
   sleep 2
   expect "*?assword:*"
   send "$password\r"
   sleep 2
   expect "\r"
   sleep 2
   }
   expect "*?(yes/no)*" {
   send "yes\r"
   sleep 2
   expect "*?ame:*"
   send "$username\r"
   sleep 2
   expect "*?assword:*"
   send "$password\r"
   expect "\r"
   sleep 2
   }
EOF

当 scriptA.sh 调用 scriptB.sh 时,它似乎可以杀死 firefox 浏览器,但不能使用命令“/usr/local/bin/run_digital_signage_firefox.sh&”对其进行初始化。我必须在没有 sudo 的情况下运行此命令,但即使我尝试在 scriptB.sh 的 SSH 中添加“sudo /usr/local/bin/run_digital_signage_firefox.sh&”,它也无法正常工作。脚本似乎没有执行“/usr/local/bin/run_digital_signage_firefox.sh&”,也没有执行“sudo /usr/local/bin/run_digital_signage_firefox.sh&”。我需要执行脚本的最后一部分以再次打开 firefox 浏览器。

这两个脚本在 ugo 中都有 rwx 权限。

标签: linuxbashsshexpectspawn

解决方案


推荐阅读