如何使用命令启动Unix的screen命令?

25
根据Unix中"screen"命令的文档,您可以在.screenrc中配置它以启动一堆默认屏幕,每个屏幕都运行您指定的命令。
这是我的配置:
# Default screens
screen -t "shell_0"  1
screen -t "autotest" 2 cd ~/project/contactdb ; autotest

它不会运行自动测试命令。当我尝试运行autotest时,那个窗口会立即关闭。

我也尝试了以下方法...

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

相同的结果。
我也尝试过...
screen -t "autotest" 2 ls

同样的结果也可以在那里得到。

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

6个回答

21

您的程序正在运行(除了cd命令),只是它是在没有父级shell的情况下运行的,因此一旦完成,它就会退出并结束。

您可以这样做:

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

生成两个shell,但生活可能会继续。

16

试试这个:

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

然后稍后您可以执行:

$ screen -ls
1234.tailf messages

接着是:

$screen -r 1234

你也可以使用 $screen -r tailf 来跟踪日志,这样更加方便,而且不需要使用 -ls - Granitosaurus

7
这可能有所帮助,但可能并不完全符合您的要求。
在您的.screenrc文件的第一行中输入"zombie az"或"defzombie az"。 "az"可以是任何您喜欢的2个键。现在,当一个屏幕应该关闭时(例如,命令执行完成),它不会真正关闭;按下'a'将关闭它,按下'z'将重新执行附加到该屏幕的命令。
我在screen用户手册中找到了这个方法。

6
你还可以像打字一样把字符输入到屏幕中。以下是如何在你的示例中实现这一点:

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

这是我的代码样例,看起来运行良好。我认为问题可能出在括号上或者如果命令“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

0

这是我会怎么做。

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接