手动运行时脚本完全运行,但从另一个脚本运行时错过命令

时间:2016-05-07 13:14:33

标签: linux bash sh centos6 gnu-screen

我有2个脚本,我正在测试以自动启动服务器上的服务,但它们表现得非常奇怪。

第一个脚本是

#!/bin/sh
screen -dmS Test_Screen
sleep 1
sudo sh cd.sh
echo "finished"

哪个运行完美,但它运行的脚本不是,如下

#!/bin/sh
screen -S Test_Screen -X stuff "cd /home/Test"
sleep 1
screen -S Test_Screen -X eval "stuff \015"
sleep 1
echo "Complete"

如果我从命令行运行它并将CD放入屏幕内的目录,第二个脚本将运行完美。但是,如果它从第一个脚本运行,它不会 CD到屏幕内的正确目录,但它仍然会打印"完成"。

我使用CENTOS 6.7和最新版本的GNU屏幕

任何想法?

2 个答案:

答案 0 :(得分:0)

这似乎是会话嵌套的问题。 在第一个脚本中,您将创建一个名为Test_Screen的会话。 在第二个脚本中,-S参数告诉屏幕创建一个同名的会话。这可能导致屏幕退出,而不是cd进入正确的目录。

您可以在cd前面移动sudo sh cd.sh命令,然后从第二个脚本中删除screen次调用,只留下

stuff \015
echo "Complete"

使用正确的screen标志也应该有用。

#!/bin/sh
screen -dr Test_Screen -X stuff "cd /home/Test"
sleep 1
screen -dr Test_Screen -X eval "stuff \015"
sleep 1
echo "Complete"

要获得更现代的屏幕替代方案,请查看tmux

答案 1 :(得分:0)

好的,所以这真的很奇怪。发布后我在centos 6.7 hyper V测试环境中尝试了几件事,并得到了完全相同的问题。然而,在当天晚些时候,我们最终改变了服务提供商,并在此过程中升级到了centos 7。我不确定为什么,但自更新以来,脚本现在运行完美,我能够将两个脚本合并为一个,以提高效率。如果有人知道为什么更新修复它随时让我知道。