제 질문에 대한 배경 지식을 조금 말씀드리겠습니다. 나는 newsboat
매크로를 사용하여 링크를 조작할 수 있는 터미널 RSS 리더를 사용하고 있습니다. 예를 들어 cd ~/videos && youtube-dl %u
YouTube 비디오를 ~/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)
screen
run 명령을 사용하여 다시 연결
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
.