SSH 时从另一个脚本调用脚本不会执行所有命令

时间:2021-02-18 19:21:01

标签: linux bash ssh expect spawn

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

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

  1. sudo killall firefox
  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 权限。

0 个答案:

没有答案