向已经运行的屏幕会话发送命令


11

我一直在尝试将命令发送到opensolaris中正在运行的gnu屏幕会话(4.00.03),但无法通过以下任意组合来使其运行任何命令 screen -X

好的,我使用进行了一次屏幕会话screen -S test,然后尝试使用,screen -r -X "date"以便仅在重新连接时显示日期。但是既没有错误消息也没有在屏幕上输出。我尝试了很多组合,甚至不记得了。

关于如何实现的任何提示?

之所以这样做,是因为我有一个程序,它不是作为守护程序提供的,而我希望在屏幕会话中启动它,因此以后可以查看发生了什么。


1
好像他们在手册页中所说的“命令”是用于屏幕命令一样,例如屏幕会话本身的设置。而不是为在屏幕会话中打开的外壳发送命令。因此,任何人都知道如何使用bash脚本实现它?

@Axon:是的,-X发送屏幕命令,而不是外壳命令,但是screen具有命令“ screen”,可以打开新的屏幕窗口。

Answers:


18

其实很简单。您可以使用以下内容:

screen -S sessionname -X stuff 'command'`echo -ne '\015'`

echo -ne '\015'模拟按下Enter键。

注意:“ stuff”是一个屏幕命令。 http://www.gnu.org/software/screen/manual/screen.html#Stuff


您能指定“东西”代表什么吗?那是名称...还是命令...还是其他参数?
塞林2012年

它实际上是有效的,但是无论如何我都不会说;)这就像传递按键事件并将换行符传递到屏幕一样。不只是普通的屏幕执行命令...吗?
ducin

@Cecin:stuff是一个屏幕命令,用于将字符串“塞入” stdin
konrad

这非常好,但是由于某种原因,它不适用于“ screen -RdS会话名-X东西'ls -l' echo -ne '\015'”,为什么呢?
e271p314 2014年

除非我两次运行该命令,然后在单独的命令行上运行,否则这screen -d -m -S sessionname; screen -S sessionname -X [...](screen -d -m -S sessionname&)&sleep 10;screen -S sessionname -X [...]不起作用。向下投票
user3338098

5

听起来像您想要的:

$ screen -S test -d -m -c / dev / null-sh -c'date; 高管$ SHELL'

-S测试:命名此会话
-d -m:开始屏幕分离
-c / dev / null:忽略〜/ .screenrc(提供其他文件或删除此选项,
  如所须)
-:屏幕结尾选项
sh -c'date; exec $ SHELL':要运行屏幕的命令,请注意,如果此命令
  只是“日期”,那么屏幕将立即退出。如果你不想退出
  屏幕退出命令后,您可以使用:
    $ screen -S test -d -m -c / dev / null-您的命令在这里

或者,也许您只想要dtach


运行此命令不会产生任何结果。没有成功或错误消息,但screen -list显示没有打开会话。
塞林2012年

这个答案对我有用。关键是-结束屏幕选项。
Plazgoth'7

1
screen -S <session_name> -X screen [-t <title>] <shell_command> [<args>]

在名为session_name的现有会话中打开一个新窗口(标题为title),然后执行shell_command(带有可选参数args

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.