我正在自动化一个维护例程,涉及启动和停止在屏幕会话中运行的脚本。 我的方法是杀死屏幕会话,然后重新启动它,并使用能力在脚本内运行命令,同时创build屏幕和传递命令,而无需附加到屏幕上。
不过,我在这方面遇到困难。 我可以正确地创build屏幕,而无需使用screen -d -m -S screen_name
。 但是,如果我运行的命令基于:
screen -S screen_name-X stuff "command 1"'echo -ne '\015''"command 2"'echo -ne '\015''
与echo -ne'\ 015'包装反引号,而不是单引号。 这是模拟用户按下回车键,因为我使用的命令是移动到一个目录,并执行一个脚本在那里。 这个命令可以工作,但是只有在屏幕创build完成后才能连接。 正如我试图自动创build屏幕和运行其中的命令的过程,我想避免必须附加和分离在一个脚本。 我将尝试创build一个包含我需要在屏幕内执行的命令的shell脚本,并根据我的结果进行编辑。
有没有办法在一个命令中创build一个屏幕并在屏幕上运行一个命令,或者在创build之后但在命令执行之前不必附加到屏幕上?
提前致谢。
**更新 – 尝试build议将我需要执行的命令放在shell脚本中我已经能够成功地创build一个屏幕并从屏幕内执行命令,但是我得到的是当脚本停止运行屏幕也closures。 这不应该是一个问题,因为脚本是一个日志脚本,应该只停留在系统pipe理员的知识或通过我试图发展的脚本停止,但最好有屏幕设置的方式,屏幕如果脚本停止不会消失。 是否有可能实现这种行为? **
我想你可能会遇到几个问题。
如果在重新连接之前命令完成,屏幕将会消失。 你可以用下面的方法演示这个:
screen -d -m ls -l
它将运行ls -l
命令,但screen -list
不会在屏幕进程结束时显示它。
我也不知道你想用这个\ 015的东西做什么。 也许更新你的问题会有所帮助,因为我想你想要做的是在屏幕会话中运行多个命令。 这应该像下面这样简单:
screen -d -m bash -c "command1 ; command2 ; command3"
如果这些使用了很多,也许你应该创build一个运行这些命令的shell脚本,然后使用一个更简单的命令:
screen -d -m /path/to/script.sh
之前我遇到过这个问题,这是一个cygwin实现的bug。
我所做的只是创build一个“.screenrc_detaching”只有以下命令
#detach detach
然后开始屏幕
screen -c ~/loginScripts/tempScreenrc/.screenrc_detaching
然后你有你的屏幕会话,它已经被连接和分离,你很好的泵命令。
简单 ! :P
这为我做了这个工作,没有-c
不工作
screen -d -m bash -c "command1; command2; command3"
开始一个分离的屏幕
screen -dmS <screen name>
在先前创build的分离屏幕中执行命令
screen -S <screen name> -X stuff '<CMD>\n'
是的,你需要inputinput符号来提交命令,否则它只会将string添加到屏幕上。