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