터미널을 출력하지 않고 명령 실행

터미널을 출력하지 않고 명령 실행

제 질문에 대한 배경 지식을 조금 말씀드리겠습니다. 나는 newsboat매크로를 사용하여 링크를 조작할 수 있는 터미널 RSS 리더를 사용하고 있습니다. 예를 들어 cd ~/videos && youtube-dl %uYouTube 비디오를 ~/videos. 그러나 다운로드가 완료될 때까지 의 출력 youtube-dl이 터미널에 인쇄되며, 그 시점에서는 계속 사용할 수 없습니다 newsboat.

명령이 실행된 터미널을 즉시 계속 사용할 수 있도록 "다른 곳"에서 실행되도록 명령을 표현하는 방법을 알고 싶습니다.

답변1

출력이 전혀 필요하지 않으면 /dev/null로 리디렉션하세요.

yourcommand > /dev/null 2>&1

그렇지 않으면 파일로 리디렉션할 수 있습니다.

yourcommand > /somwhere/file 2>&1

다른 응용 프로그램에서 명령을 실행하고 뉴스 리더를 즉시 사용하려는 경우 백그라운드에서 명령을 실행할 수 있습니다. 이 뉴스 보트에서 어떻게 작동하는지 잘 모르겠지만 쉘에서 &를 사용하여 프로그램을 백그라운드로 보낼 수 있습니다.

yourcommand > /somwhere/file 2>&1 &

답변2

나중에 터미널이 닫혀도 "살아있는" 명령을 백그라운드에서 자동으로 실행하려면 screen분리 모드에서 사용하세요.

screen -dm your_command(-s)

screenrun 명령을 사용하여 다시 연결

screen -r

다시 연결된 화면을 분리하려면 을 누르세요 CTRL+A+D.

그렇지 않은 경우 screen실행 명령을 사용해야 합니다 nohup. 따라서 나중에 터미널이 닫히면 screen유틸리티처럼 프로세스가 실행됩니다.

nohup your_command(-s) &>/dev/null  &

답변3

귀하의 질문은 한 가지를 묻고 또 다른 것을 묻는 것으로 시작됩니다.

가장 먼저 묻는 것은 출력을 폐기하는 것입니다. 이는 리디렉션을 통해 쉽게 수행할 수 있습니다.

$ echo hello 1> /dev/null 2>&1

두 번째 질문은 터미널을 계속 사용할 수 있도록 "다른 곳" 명령을 실행하는 것이었습니다. 이를 "작업 제어"라고 합니다.

셸의 명령 구분 기호를 사용하여 백그라운드에서 모든 명령을 실행할 수 있습니다 &. 다음 두 명령의 동작을 비교하십시오.

$ sleep 5
$ sleep 5 &

작업이 이미 실행 중이고 터미널을 사용하여 다른 작업을 수행해야 하며 작업을 완료하려면 Ctrl-pause Z작업을 사용하고 bg백그라운드에서 계속하도록 지시할 수 있습니다.

$ (sleep 10; echo hello)
^Z
[1]+  Stopped                 ( sleep 10; echo hello )
$ bg
[1]+ ( sleep 10; echo hello ) &
$ echo farewell
farewell
$ fg
( sleep 10; echo hello )
hello

이 링크직업 통제에 관해 꽤 좋은 읽을 거리가 있습니다 bash.

관련 정보