如何创建一个屏幕,执行给定的命令?

Ale*_*rov 32 gnu-screen

我在*nix中相当新.有没有办法创建一个屏幕,它将立即执行给定的命令序列(使用自己的参数)?两个小时的谷歌搜索没有产生任何结果 - 也许是因为我无法清楚地说出这个问题.

我希望有类似的东西

screen -dmS new_screen exec "cd /dir && java -version"
Run Code Online (Sandbox Code Playgroud)

我使用的是屏幕v4.00.03和CentOS 5.5(内核版本2.6.18-194.26.1.el5.028stab079.2)

kR1*_*105 36

您创建一个名称和分离模式的屏幕:

screen -S "mylittlescreen" -d -m
Run Code Online (Sandbox Code Playgroud)

然后发送要在屏幕上执行的命令:

screen -r "mylittlescreen" -X stuff $'ls\n'
Run Code Online (Sandbox Code Playgroud)

$命令之前是使壳解析\n引号内,并且换行需要执行命令(比如当你按回车键).

这对我这个屏幕版本有用:

$ screen -v

屏幕版本4.00.03jw4(FAU)2006年5月2日

man screen有关这些命令的详细信息,请参阅.


小智 32

问题是使用'exec'屏幕命令不会启动shell.'cd'是内置的shell,所以你需要一个shell.此外,您需要一个仍然运行的shell,以便屏幕不会终止.

您可以使用-X选项来筛选以将命令发送到正在运行的屏幕会话,并使用'stuff'命令将键击发送到当前窗口.试试这个:

screen -dmS new_screen sh
screen -S new_screen -X stuff "cd /dir
"
screen -S new_screen -X stuff "java -version
"
Run Code Online (Sandbox Code Playgroud)

是的,您需要将引号放在下一行,以便执行命令.

  • 我通过在那里包含`-p 0`来实现这一点(`screen -S new_screen -p 0 -X stuff"......"`) (11认同)
  • 您可以使用`$'命令\n'`而不是将双引号放在下一行.见[this](http://stackoverflow.com/a/3182519/693869) (9认同)
  • @mloar这里`stuff`的目的是什么? (5认同)

Tus*_*ami 5

screen -dmS screen_name bash -c 'sleep 100'

这将创建名为的新屏幕screen_name.在屏幕内,它将睡眠100秒.

请注意,如果您sleep 100在执行时键入某个命令而不是立即终止,则屏幕也将终止.所以你将无法看到刚刚创建的屏幕