在螢幕會話的多個程序中自動粘貼命令
我有幾串用 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
如果需要,我可以通過一堆命令創建一個文件。你能幫我解決這個問題嗎?請隨時詢問任何缺失的資訊。
感謝 StackExchange 上的這篇文章,我終於找到了答案!有時只需要一些其他關鍵字就可以找到解決方案,所以我會回答這個問題,以防其他人在這裡結束。
簡而言之
使用以下命令自動將命令粘貼到螢幕中
bash
:screen -x screen_name -p 1 -S stuff 'executable_script1.sh\n'
其中
-p 1
指的是1$
螢幕程序。請注意,\n
命令末尾是必需的,就像在粘貼命令行後按 Enter 時一樣。詳細步驟
- 創建
screen
你想要工作的會話(這裡命名為’screen_name’):screen -S screen_name
為所有命令提供足夠的程序(在我的範例中,
0$ htop
加上 2 個程序 :1$
和2$
)。請注意,您可以.screenrc
在主目錄中進行編輯,以便螢幕會話預設以給定數量的程序開始。對於這個例子,我的.screenrc
包含:screen -t htop screen -t screen -t
- 為每組命令創建 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 文件並通過腳本(
python
例如)粘貼命令(步驟 2 和 3)。如果需要,也executable_script1.sh
可以包含呼叫,使用, 就像在普通終端中一樣。python``python python_script.py
希望這對其他人有幫助!