오류가없는 한 출력이없는 백그라운드에서 명령을 실행하는 방법은 무엇입니까?
당신이 바쁜 사람이라면, 당신이 필요로하는 마지막 것은 엄청난 양의 '쓸데없는'알림으로 귀찮게 될 것입니다. 그래서 당신은 어떻게 일들을 조용히합니까? 오늘의 수퍼 유저 Q & A 게시물에는 독자가 출력 양을 줄이는 데 도움이되는 훌륭한 답변이 있습니다..
오늘의 질문 및 답변 세션은 Q & A 웹 사이트의 커뮤니티 중심 그룹 인 Stack Exchange의 하위 부문 인 수퍼 유저의 도움으로 이루어졌습니다..
질문
수퍼 유저 Xster는 오류가없는 한 출력없이 백그라운드에서 명령을 실행하는 방법을 알고 싶어합니다.
명령의 출력을 억제하는 방법은 무엇입니까?하지만 명령의 종료 코드가 오류 일 경우 표시하십시오.?
오류가 발생하지 않는 한 출력이없는 백그라운드에서 명령을 실행하려면 어떻게해야합니까??
대답
수퍼 유저 기고가 인 Bob과 Maximillian Laumeister가 우리에게 답을줍니다. 우선, Bob :
불행하게도, 표준어 오류 출력에 대해서만 사용됩니다 항상 올바르지 않습니다. 차라리, 표준어 는 모든 대화식 출력 및 진단 (즉, 사용자가 대화식 프롬프트에서 읽는 것을 목표로 한 출력)에 자주 사용됩니다..(1) wget 과 DD 잘 알려진 예입니다..
일부 명령은 플래그를 제공합니다 (예 :. -조용한 또는 -조용한)를 사용하여 오류가없는 출력을 억제합니다. 그들의 man 페이지를 읽어서 존재하는지 확인하십시오..
더 자주 개최되는 또 다른 컨벤션은 이탈 코드, 프로그램이 종료 될 때 종료 코드를 반환합니다. 일반적으로(2), 의 종료 코드 0 성공을 나타내고 다른 종료 코드는 오류를 나타냅니다..
와 세게 때리다, 마지막 명령의 종료 코드를 $? 변하기 쉬운. 에서 물고기, 사용 $ status 변하기 쉬운. 너는 배관 할 수있어. 표준어 임시 파일에 저장하고 오류가 발생할 경우에만 인쇄하십시오. 예를 들어 (물고기) :
명령을 연결하지 않은 경우 다음과 같은 단축키를 사용할 수도 있습니다.
또는:
또한 배관 작업을 할 수 있습니다. 표준 출력 를 사용하여 동일한 버퍼에 저장 2> 1 / tmp / outputbuffer.
(노트 : 나는 실제로 모른다. 물고기, 그래서 나는 그 개념을 그 문서에서 찾을 수있는 것에 적응시키고있다. 구문이 약간 잘못되었을 수 있습니다. 또한 다음을 사용할 수 있습니다. mktemp 고유 한 임시 파일을 생성합니다. 실행하고 변수에 파일 이름을 기록하십시오.)
대화식으로 동시에 사용하는 셸의 배경에서 모든 것을 실행해야하는 경우 표준 숨김 기술을 사용하여 백그라운드에서 출력 숨기기 및 스크립트 실행을 처리하는 스크립트를 작성하는 것이 좋습니다. (물고기). 지옥, 다음과 같은 것을 넣을 수 있습니다. ~ / .config / fish / config.fish:
전화 걸기 실행 - 침묵의 somecommand & (여기서 후행 & 백그라운드에서 실행되도록 함)
이 명령은 원래의 종료 코드를 삼키고 두 종료 명령을 덤프합니다. 표준 출력 과 표준어 실패시. 필요에 따라 사용자 정의 할 수 있습니다..
(1) 오류 출력이 나타나지 않는다고 보장 할 수는 없습니다. 표준 출력, 일부 프로그램은 거기에 모든 출력을 덤프합니다!
(2) 불행히도, 이것은 항상 그런 경우는 아닙니다. 종료 코드는 프로그램에 의해 완전히 제어되며 일부는 0이 아닌 이탈이있는 일부 성공 조건을 나타냅니다. 다시 한 번 매뉴얼을 확인하십시오..
Maximillian Laumeister의 답변이 뒤따 랐습니다.
유닉스 유틸리티는 다음에 일반 메시지를 보냅니다. 표준 출력, 및에 대한 오류 메시지 표준어, 그래서 우리가 단지 오류 메시지를보고 싶다면 그것을 억제하는 것으로 충분할 것입니다 표준 출력 그래서 표준어 콘솔에 출력된다..
이 작업을 수행하는 방법 (둘 다 세게 때리다 과 물고기) 추가하는 것입니다. > / dev / null 명령에. 이 파이프들 표준 출력 무가치하다. 표준어 (오류 메시지와 함께) 여전히 콘솔에 전달됩니다..
그래서 예를 들면 :
명령 echo 1> / dev / null 아무 것도 인쇄하지 않습니다. 왜냐하면 정상 표준 출력 출력이 억제되고 아무것도 기록되지 않았습니다. 표준어.
명령 남자 doesnotexist> / dev / null 오류 메시지를 인쇄합니다. 남자 오류 메시지를 다음에 기록합니다. 표준어.
설명에 추가 할 것이 있습니까? 의견에서 소리가 나지. 다른 기술에 정통한 Stack Exchange 사용자의 답변을 더 읽고 싶습니까? 전체 토론 스레드를 여기에서 확인하십시오..