如何使用命令启动Unix屏幕命令?

时间:2009-02-12 22:24:50

标签: bash unix shell command-line gnu-screen

根据docs for the Unix "screen" command,你可以在.screenrc中配置它以一堆默认屏幕开始,每个屏幕都运行你指定的命令。

这是我的cofig:

# Default screens
screen -t "shell_0"  1
screen -t "autotest" 2 cd ~/project/contactdb ; autotest

它不会运行自动测试命令。当我开始autotest时,我正在尝试运行screen的窗口立即关闭。

我也尝试过......

screen -t "autotest" 2 cd ~/project/contactdb

同样的结果。

我也试过......

screen -t "autotest" 2 ls

也有相同的结果。

让它在启动时在给定屏幕上运行命令的秘诀是什么?

6 个答案:

答案 0 :(得分:21)

你的程序正在运行(好吧,除了cd),它只是在没有父shell的情况下运行,所以一旦它完成,它就会退出并且你已经完成了。

你可以这样做:

screen -t "autotest" 2 bash -c 'cd ~/project/contactdb ; autotest'

产生两枚炮弹,但生命可能继续存在。

答案 1 :(得分:15)

试试这个:

$ screen -S 'tailf messages' -d -m tailf /var/log/messages

然后你可以这样做:

$ screen -ls
1234.tailf messages

其次是:

$screen -r 1234

答案 2 :(得分:7)

这可能有所帮助,但可能并不完全是您想要的。

将“zombie az”或“defzombie az”作为.screenrc的第一行。 “az”可以是你想要的任何2个键。现在,当一个屏幕应该关闭(例如命令完成执行)时,它实际上不会关闭;点击'a'将关闭它,点击'z'将重新执行附加到该屏幕的命令。

我在the screen user's manual找到了。

答案 3 :(得分:5)

您也可以将字符“填充”到屏幕中,就像您输入了字符一样。

以下是您使用示例执行此操作的方法:


screen -t "shell_0"  1

# create the following screen in the desired dir, instead of cd-ing afterwards :)
chdir ~/project/contactdb
screen -t "autotest" 2

# (without this sometimes screens fail to start correctly for me)
sleep 5

# paste some text into screen number 2:
select 2
stuff "autotest\012"

答案 4 :(得分:4)

这是我的样子。它似乎工作正常。我认为如果命令“autotest”不存在,则括号可能导致问题,或者屏幕不会打开窗口。

screen -t zsh 1
screen -t emacs 2 emacs -nw
screen -t mutt 3 mutt
monitor on
screen -t mc 4 mc -s
screen -t elinks 4 elinks

答案 5 :(得分:0)

我是这样做的。

screen -t shell_0
chdir ~/project/contactdb
screen -t autotest autotest

以上似乎是通过屏幕程序性评估的。首先,我们建立一个标题为shell_0的新屏幕。由于我们没有提供其他选项,因此当前工作目录将是父shell或用户主目录的目录。然后,我们将新屏幕的默认目录设置为~/project/contactdb。接下来,我们建立一个运行autotest命令的新屏幕。

窗口编号(n)是可选的,我通常会省略它。