创建后无法立即将命令“填充”到创建的“屏幕”中

创建后无法立即将命令“填充”到创建的“屏幕”中

可能的重复:
将文本输入发送到分离的屏幕

参考回答的问题: 从外部将输入发送到屏幕会话

我正在尝试编写一个脚本,该脚本将创建一个screen然后将stuff(在我的例子中是UNIX命令)输入到我希望它执行的shell中。

这是我到目前为止所拥有的:

$ screen -dmS new_screen bash

$ screen -S new_screen -X stuff "cd /some/path/
some_script_file.sh
" <--This new line is required to execute the above command. 
$ # Note: See comments. We could insert the newline character instead of 'hard-coding' a newline string literal.

由于某种原因,屏幕创建良好并进入bash外壳。但是cdsome_script_file.sh命令不会填充到屏幕的 bash shell 中。

现在真正奇怪的部分是..我脱离屏幕后,重新执行下面的 stuff 命令..

$ screen -S new_screen -X stuff "cd /some/path/
some_script_file.sh
"

然后附加回 new_screen。现在我看到命令已正确填充并在屏幕内的 bash shell 中执行。

不确定我在这里哪里出错了,将命令填充到尚未连接的屏幕中似乎存在任何问题。

答案1

首次创建屏幕会话时,不会选择任何窗口。因此,当您发送命令时,屏幕不知道将其发送到哪个窗口。然而,一旦连接到屏幕,窗口就被选中,这就是为什么您可以在执行此操作后发送命令。要从命令行选择窗口,您需要使用该-p选项。

这是对命令的修改,应该可以工作:

screen -S new_screen -p 0 -X stuff "cd /some/path/
some_script_file.sh
"

答案2

@vgoff“所以字符串中的返回文字。这可以与管道一起使用吗?您仍然需要返回作为最后一个字符吗? - vgoff”

查看使用返回文字或返回字符 (^M):

bash-3.00$ echo "(1) This sentence
> (2) has
> (3) 3 returns
> (4) in it.
> " | grep "has";
(2) has

看起来返回文字不会影响管道。我们需要在结束报价之前有一个 return 作为 RETURN 键来发送 echo 语句以供执行。

相关内容