![创建后无法立即将命令“填充”到创建的“屏幕”中](https://linux22.com/image/27286/%E5%88%9B%E5%BB%BA%E5%90%8E%E6%97%A0%E6%B3%95%E7%AB%8B%E5%8D%B3%E5%B0%86%E5%91%BD%E4%BB%A4%E2%80%9C%E5%A1%AB%E5%85%85%E2%80%9D%E5%88%B0%E5%88%9B%E5%BB%BA%E7%9A%84%E2%80%9C%E5%B1%8F%E5%B9%95%E2%80%9D%E4%B8%AD.png)
可能的重复:
将文本输入发送到分离的屏幕
参考回答的问题: 从外部将输入发送到屏幕会话
我正在尝试编写一个脚本,该脚本将创建一个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
外壳。但是cd
和some_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 语句以供执行。