전체 파이프의 STDOUT 및 STDERR을 /dev/null
.
이것이 내 명령이라고 생각하십시오.
sudo lsof -i:22000 -t | xargs kill -9
나는 이것이 잘못된 접근 방식이라는 것을 알고 있습니다.
sudo lsof -i:22000 -t | xargs kill -9 >/dev/null 2>&1
>/dev/null 2>&1
간단한 추가는 STDIN의 일부로 해석되므로 파이프에 아무런 영향을 미치지 않으므로 이를 어떻게 달성할 수 있습니까 xargs kill -9
?
답변1
파이프의 출력
sudo lsof -i:22000 -t | xargs kill -9 >/dev/null 2>&1
/dev/null
지적한 대로 마지막 리디렉션은 명령에만 영향을 미치고 xargs
표준 오류 스트림은 터미널에 연결된 상태 로 유지되므로 완전히 리디렉션되지는 않습니다 . sudo
그러나 기술적으로 말하면 리디렉션은 "표준 입력의 일부"가 아닙니다 xargs
. 표준 입력은 파이프 왼쪽의 명령 xargs
에서 나옵니다 .sudo
전체 파이프라인을 리디렉션해야 합니다.
{ your pipeline; } >/dev/null 2>&1
즉,
{ sudo lsof -i:22000 -t | xargs kill -9; } >/dev/null 2>&1
또는 각 개별 섹션을 개별적으로 리디렉션할 수도 있습니다.
이것이 다시는 사용하지 않을 "일회성" 일회성 명령인지, 아니면 시스템에 중요한 유지 관리 스크립트에 들어가는 코드 라인인지에 따라 파이프라인의 왼쪽을 다음과 같이 만들 수 있습니다. 정상적인 작동 조건에서 작동하는 방식으로 진단 메시지가 전혀 생성되지 않습니다(따라서 오류 메시지를 숨길 필요가 없습니다). 또는 systemd 또는 일부 동등한 서비스 프레임워크를 통해 포트 22000에서 실행되는 서비스를 관리할 수도 있습니다.
접선적으로 관련됨: