將標準輸出重定向到程式參數

將標準輸出重定向到程式參數

我在 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也可以使用,但我喜歡將其保留用於多參數的內容。我覺得反引號對於你想完成的事情來說比較乾淨。

相關內容