![在屏幕会话的多个进程中自动粘贴命令](https://linux22.com/image/159883/%E5%9C%A8%E5%B1%8F%E5%B9%95%E4%BC%9A%E8%AF%9D%E7%9A%84%E5%A4%9A%E4%B8%AA%E8%BF%9B%E7%A8%8B%E4%B8%AD%E8%87%AA%E5%8A%A8%E7%B2%98%E8%B4%B4%E5%91%BD%E4%BB%A4.png)
我有几组用 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
进程的名称无关紧要,唯一重要的信息是我想要N
screen 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
可以包含调用,如在普通终端中一样。python
python python_script.py
希望这会帮助其他人!