
我在 Arch Linux 筆記型電腦上運行 Minecraft 伺服器。 Minecraft 的伺服器軟體在命令列上作為互動式程式運行,因此我在獨立的螢幕會話中啟動它,這樣我就可以在每次需要訪問它時重新連接。
為此,我使用了一個腳本(我其他時候不使用 screen,所以不用擔心“grep SCREEN”)
#!/bin/bash
PID=ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }'
sudo screen -r $PID
這將獲取伺服器正在運行的螢幕會話的 PID,然後重新附加到該螢幕。
現在我想知道,因為我在任何地方都找不到這個,是否可以使用單行來重定向輸出
ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }'
直接到 $argument 中
sudo screen -r $argument
無需跨越 2 條線
基本上我想將 awk 的標準輸出重定向到爭論螢幕的,而不是螢幕的標準輸入。
這似乎應該相對容易找到和執行,但我在谷歌上找到有關它的任何內容時遇到了很多麻煩。
任何幫助表示讚賞!謝謝
答案1
相反ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }'
,你可以這樣做
ps aux | awk '/SCREEN/{print $2;exit}'
或者,更建議的是,如果您安裝procps
:
pgrep SCREEN
(按照說明將這些命令用反引號括起來,或使用$()
更易於閱讀和嵌套的結構,並執行相同的操作。)
甚至更多的建議:如果您只執行一個 Screen 會話,只需:
screen -r
預設將附加到唯一現有的會話。
正如評論中所述:如果您將來可能想要執行多個 Screen 會話,請使用會話命名功能。啟動命名會話
screen -S minecraft
然後重新連接
screen -r minecraft
答案2
xargs 會做到這一點
$echo abc | xargs prog
在上面,xargs 將使用 arg abc 執行 prog ie $prog abc
另一個例子
$ echo abc | xargs echo w x
w x abc
答案3
假設您使用的是 bash,另一種方法是使用反引號。 AFAIK,先計算反引號,然後將結果用於表達式的其餘部分。
sudo screen -r `ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }'`
我認為這應該要做你想做的事。
正如另一位評論者指出的那樣,您xargs
也可以使用,但我喜歡將其保留用於多參數的內容。我覺得反引號對於你想完成的事情來說比較乾淨。