새 gnome 터미널 창을 열고 출력을 기록해 보세요.

새 gnome 터미널 창을 열고 출력을 기록해 보세요.

새 터미널 창을 열고, 게임 서버를 시작하는 변수를 실행하고, 새 창의 출력을 기록하는 짧은 스크립트를 작성하려고 합니다.

서버가 전혀 쓸모없는 메시지를 많이 콘솔에 스팸으로 보내고 있으므로 창을 숨기기 위해 -q도 추가하고 싶습니다.

나의 궁극적인 목표는 grep을 사용하여 "Steam 서버에 연결됨" 로그를 보고 이를 메인 콘솔에 보고하는 것입니다. 현재 나는 다음을 가지고 있습니다 :

$server="$game_path/server_executable"
gnome-terminal -- $server

gnome-terminal에 추가하면 코드가 손상됩니다. gnome-terminal -- "$server 2>&1 | tee server.log" 그놈 터미널 라인을 사용해 보았지만 끊어졌습니다. 저도 그렇게 해봤는데 gnome-terminal -- "@server >> server.log"실패했어요. 서버 명령을 실행하기 위해 새 셸을 얻는 방법에 대한 답을 알 수 없습니다.그리고출력을 로그 파일로 내보냅니다.

데비안 12에서 실행 중입니다.

답변1

더 나은 접근 방식 은 터미널 창이 닫혀도 서비스가 계속 실행되도록 screen또는 같은 것을 사용하는 것입니다 . tmux그런데, 그건 당신이 물어본 게 아니군요...

gnome-terminal -- "$server 2>&1 | tee server.log"

이것은 거의 정확합니다. 문서를 살펴 보겠습니다 ( man gnome-terminal)

gnome-terminal [OPTION…] [-- PROGRAM [ARG…]]

그리고 다소 혼란스럽게도,

--command, -e=COMMAND이 옵션에 대한 인수를 쉘과 같은 방식으로 프로그램과 인수로 분할하고 결과 명령줄을 터미널 내에서 실행합니다. 이 옵션은 더 이상 사용되지 않습니다. 대신 --옵션을 종료하고 그 뒤에 실행되는 프로그램과 인수를 넣으십시오. 예를 들어 를 사용하는 대신 gnome-terminal -e "python3 -q"을 사용하는 것을 선호합니다 gnome-terminal -- python3 -q.

여태까지는 그런대로 잘됐다. 하지만,

쉘을 통해 실행되지 않는다는 점에 유의하십시오 COMMAND. 단어로 분할되어 프로그램으로 실행됩니다. 쉘 구문이 필요한 경우 다음 형식을 사용하십시오.gnome-terminal -- sh -c '...'

마지막 단락이 핵심입니다. |이를 해석하려면 쉘을 직접 호출해야 하며 사용할 수 없습니다.>gnome-terminal

$server="$game_path/server_executable"
gnome-terminal -- sh -c "$server 2>&1 | tee server.log"

screen개인적으로 나는 다음과 같이 또는 없이 를 사용하는 것을 선호합니다 gnome-terminal.

gnome-terminal -- screen sh -c 'game_path/server_executable 2>&1 | tee server.log'

아니면 그 부분을 정말 원하지 않고 gnome-terminal단지 게임 서버를 시작하는 방법일 뿐이라면,

screen -md sh -c 'game_path/server_executable 2>&1 | tee server.log'

많은 도움U&L에서세션을 조작하는 데 사용됩니다 screen.내 대답도착하다프로세스를 일시 중지하고 Ubuntu의 별도 화면에서 다시 전경으로 가져옵니다.

관련 정보