在屏幕会话的多个进程中自动粘贴命令

在屏幕会话的多个进程中自动粘贴命令

我有几组用 bash 编写的命令,包含在一个文本文件中,用 分隔\n\n,我想自动将每个命令粘贴到给定的屏幕进程中。为了清楚起见,假设我的command.txt仅包含:

#first bunch of commands:    
executable_script1.sh
mv executable_script1 directory1


#second bunch of commands:    
executable_script2.sh
mv executable_script2 directory2

因此,第一组命令将executable_script1.sh在它移动之后运行executable_script1。在此示例中,我的屏幕包含 3 个进程:

0$ htop
1$ bash
2$ bash

进程的名称无关紧要,唯一重要的信息是我想要Nscreen process 中的命令N$,因为0$总是htop.

就目前而言,我一直在相应的屏幕进程中手动复制/粘贴每组命令,这显然有效,但现在我将处理超过 40 组命令和尽可能多的屏幕进程。那么,如何将命令自动粘贴N到屏幕终端呢?N$我认为bash/shell脚本可以解决这个问题,但我对此还不够流利。请注意,如果需要,我可以txt通过一堆命令创建一个文件。

你能帮我解决这个问题吗?请随时询问任何缺失的信息。

答案1

我终于找到了答案,感谢这个帖子在 StackExchange 上!有时只需要一些其他关键字就能找到解决方案,所以我会回答这个问题,以防其他人最终来到这里。

简而言之

使用以下命令自动将命令粘贴到屏幕中bash

screen -x screen_name -p 1 -S stuff 'executable_script1.sh\n'

其中-p 1指的是1$屏幕处理。请注意,\n命令末尾是必需的,就像粘贴命令行后按 Enter 键一样。

详细步骤

1) 创建screen您想要工作的会话(此处名为“screen_name”):

screen -S screen_name

为所有命令提供足够的进程(在我的示例中,0$ htop加上 2 个进程:1$2$)。请注意,您可以.screenrc在主目录中进行编辑,以便默认情况下屏幕会话以给定数量的进程启动。对于这个例子,我的.screenrc包含:

screen -t htop
screen -t 
screen -t 

2) 为每组命令创建 bash 文件,由不同的屏幕进程执行。

这里我有 2 个文件,screen1包含:

#!/bin/bash

screen -x screen_name -p 1 -X stuff 'executable_script1.sh\n'
screen -x screen_name -p 1 -X stuff 'mv executable_script1 directory1\n'

screen2包含:

#!/bin/bash

screen -x screen_name -p 2 -X stuff 'executable_script2.sh\n'
screen -x screen_name -p 2 -X stuff 'mv executable_script2 directory1\n'

3) 将所有命令一次性粘贴到终端中:

bash /path_to_screen1/screen1 & /path_to_screen1/screen2 &

即使您进行了长时间的计算,您也可以立即关闭此终端,因为它所做的只是将命令粘贴到screen.手动打开screen会话以验证这些行是否正在执行。

不用说,如果您有大量命令要传递到许多屏幕进程,您可以创建 bash 文件并通过脚本(例如)粘贴命令(步骤 2 和 3)python。如果需要,还executable_script1.sh可以包含调用,如在普通终端中一样。pythonpython python_script.py

希望这会帮助其他人!

相关内容