Bash

在螢幕會話的多個程序中自動粘貼命令

  • September 5, 2019

我有幾串用 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 組命令和盡可能多的螢幕程序。那麼,我怎樣才能將命令自動粘貼NN$螢幕終端呢?我認為bash/shell腳本可以解決問題,但我對它不夠流利。請注意,txt如果需要,我可以通過一堆命令創建一個文件。

你能幫我解決這個問題嗎?請隨時詢問任何缺失的資訊。

感謝 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 
  1. 為每組命令創建 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

希望這對其他人有幫助!

引用自:https://unix.stackexchange.com/questions/538316