linux - SSH 时从另一个脚本调用脚本不会执行所有命令
问题描述
我正在尝试从另一个脚本调用脚本,因为我正在使用“spawn”(来自期望数据包)来执行 SSH 到另一台机器。基本上,在我的主脚本(scriptA.sh)中执行比较和例程后,它会调用另一个脚本(scriptB.sh)。调用工作正常,因为我可以看到 SSH 已正确执行。但是,由于并非所有命令都正确执行,因此看起来有些问题。如果我手动执行这些命令,它就可以工作。
我在有时会冻结并显示完全白屏的机器上运行应用程序。scriptB.sh 杀死 firefox 并在后台重新打开浏览器。如果我手动执行命令,这些命令可以正常工作:
- sudo killall 火狐
- export DISPLAY=:0.0 (我不需要“sudo”)
- /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 权限。
解决方案
推荐阅读
- javascript - 为什么标签显示在选择框内?
- testng - 我们应该在 TestNg DataProviders 中调用 API 吗?
- c# - 如何将 ObjectHandle 从 Pkcs11Interop 转换为 X509 证书或 Pem 格式?
- html - 无法将字体用于自定义字体
- c# - JSON到C#中的数组
- javascript - 使用 vanilla JS 自动多次运行循环
- javascript - 不知道为什么我的 app.get 运行了两次?
- kubernetes - 我如何才能在拒绝状态下批准 CSR?
- javascript - 使用 if else 语句的数组大小切片回退
- python - conda-forge:为什么 Conda 总是想降级 NumPy?