2012-02-22 41 views
1

我使用bash腳本在「分離」模式下產生屏幕會話(使用-d -m選項) 並命名它們(通過-S),然後附加給他們以提供一些命令 (通過-r):如何附加到循環內的屏幕會話?

#!/bin/bash 
screen -d -m -S session_name_1 
screen -d -m -S session_name_2 
screen -d -m -S session_name_3 
... 
screen -r session_name_1 
screen -r session_name_2 
screen -r session_name_3 

當我這樣做,整個過程在一個循環的方式我無法連接到屏幕 (文件session_names.txt是它的每一行包含會話名稱的文件):

#!/bin/bash 
while read line; do 
    echo $line 
    screen -d -m -S $line 
done < session_names.txt 

while read line; do 
    echo $line 
    screen -r $line 
done < session_names.txt 

我無法附加到屏幕上nd發生此錯誤:

「必須連接到終端」。

我怎樣才能解決這個問題,爲什麼會出現這個問題?

+0

是否有一個原因,你沒有使用'.screenrc'啓動1個屏幕副本,有N個終端可用,只需將名稱等放在該cfg文件中?祝你好運。 – shellter 2012-02-22 20:47:05

回答

2

在整個循環中,標準輸入來自txt文件,因此屏幕沒有看到終端。

這應該做到這一點,但請注意'line'在這裏的意思是'word'。

for line in `cat session_names.txt`; do 
    echo $line 
    screen -r $line 
done 
+0

woooow !!!謝謝!現在我明白了原因.. :) – 2012-02-22 21:00:12

+0

'for $(cat file)'中的var效率低下,因爲它會生成並保留整個列表,並且容易受到您提及的單詞分割的影響。 http://mywiki.wooledge.org/BashFAQ/001中介紹了更好的方法(參見最後一節標題爲「如何避免其他命令」吃「輸入」)。 – musiphil 2012-10-10 20:27:55

相關問題