stdout을 프로그램 인수로 리디렉션

stdout을 프로그램 인수로 리디렉션

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

두 줄을 넘을 필요 없이

기본적으로 awk의 stdout을 다음으로 리디렉션하고 싶습니다.논쟁화면의 표준 입력 대신 화면의.

비교적 쉽게 찾아서 수행할 수 있을 것 같지만 Google에서 관련 내용을 찾는 데 많은 어려움을 겪고 있습니다.

도움을 주시면 감사하겠습니다! 감사합니다

답변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를 실행합니다. $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도 사용할 수 있지만 다중 인수 항목을 위해 예약하고 싶습니다. 나는 당신이 성취하고자 하는 것에 대해 백틱이 더 깨끗하다고 ​​생각합니다.

관련 정보