새 터미널 창을 열고, 게임 서버를 시작하는 변수를 실행하고, 새 창의 출력을 기록하는 짧은 스크립트를 작성하려고 합니다.
서버가 전혀 쓸모없는 메시지를 많이 콘솔에 스팸으로 보내고 있으므로 창을 숨기기 위해 -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의 별도 화면에서 다시 전경으로 가져옵니다.