在屏幕会话的多个进程中自动粘贴命令
Automatically paste commands in multiple processes of a screen session
我有几个 linux
命令包含在一个文本文件中,由 \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$
中执行命令 N
,因为 0$
始终是 htop
.
至于现在,我已经copying/pasting在相应的屏幕进程中手动处理了每串命令,效果明显,但现在我将处理40多串命令和尽可能多的屏幕进程.那么,如何将命令 N
自动粘贴到 N$
屏幕终端?我认为 bash
/shell
脚本可以解决问题,但我对它不够流利。我目前使用 python2
脚本来生成我的 command.txt
文件,所以请注意,如果需要,我可以很容易地通过一堆命令创建一个 txt
文件。
你能帮我解决这个问题吗?请随时询问任何遗漏的信息。
PS:我也在Unix Stackexchange上问过这个问题,但是这个论坛的人似乎少得多......如果我们在这里找到答案,我会邀请回答者将它也粘贴到我的 Unix Stackexchange 问题下,因为这可以帮助其他人!
感谢this post,我终于找到了答案!有时只需要一些其他关键字就可以找到解决方案,所以我会回答这个问题以防其他人在这里结束。
简而言之
使用bash
命令在屏幕中自动粘贴命令:
screen -x screen_name -p 1 -X stuff 'executable_script1.sh\n'
其中 -p 1
指的是 1$
屏幕进程。请注意,命令末尾的 \n
是必需的,因为在粘贴命令行后按回车键时。
详细步骤
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 directory2\n'
3) 在终端中一次粘贴所有命令,使用 :
bash /path_to_screen1/screen1 & /path_to_screen2/screen2 &
您可以立即关闭此终端,即使您有很长的 运行 计算,因为它所做的只是将命令粘贴到 screen
中。手动打开您的 screen
会话以验证这些行是否正在执行。
不用说,如果您有大量命令要传递给许多屏幕进程,您可以创建 bash 文件并通过脚本粘贴命令(步骤 2 和 3)(使用 python
例如)。如果需要,executable_script1.sh
也可以包含 python
调用,就像在普通终端中一样,使用 python python_script.py
。
希望这对其他人有帮助!
我有几个 linux
命令包含在一个文本文件中,由 \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$
中执行命令 N
,因为 0$
始终是 htop
.
至于现在,我已经copying/pasting在相应的屏幕进程中手动处理了每串命令,效果明显,但现在我将处理40多串命令和尽可能多的屏幕进程.那么,如何将命令 N
自动粘贴到 N$
屏幕终端?我认为 bash
/shell
脚本可以解决问题,但我对它不够流利。我目前使用 python2
脚本来生成我的 command.txt
文件,所以请注意,如果需要,我可以很容易地通过一堆命令创建一个 txt
文件。
你能帮我解决这个问题吗?请随时询问任何遗漏的信息。
PS:我也在Unix Stackexchange上问过这个问题,但是这个论坛的人似乎少得多......如果我们在这里找到答案,我会邀请回答者将它也粘贴到我的 Unix Stackexchange 问题下,因为这可以帮助其他人!
感谢this post,我终于找到了答案!有时只需要一些其他关键字就可以找到解决方案,所以我会回答这个问题以防其他人在这里结束。
简而言之
使用bash
命令在屏幕中自动粘贴命令:
screen -x screen_name -p 1 -X stuff 'executable_script1.sh\n'
其中 -p 1
指的是 1$
屏幕进程。请注意,命令末尾的 \n
是必需的,因为在粘贴命令行后按回车键时。
详细步骤
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 directory2\n'
3) 在终端中一次粘贴所有命令,使用 :
bash /path_to_screen1/screen1 & /path_to_screen2/screen2 &
您可以立即关闭此终端,即使您有很长的 运行 计算,因为它所做的只是将命令粘贴到 screen
中。手动打开您的 screen
会话以验证这些行是否正在执行。
不用说,如果您有大量命令要传递给许多屏幕进程,您可以创建 bash 文件并通过脚本粘贴命令(步骤 2 和 3)(使用 python
例如)。如果需要,executable_script1.sh
也可以包含 python
调用,就像在普通终端中一样,使用 python python_script.py
。
希望这对其他人有帮助!