bash를 사용하면 표준 오류를 다른 프로세스에 파이프로 연결하려면 어떻게 해야 합니까?
공정의 표준 출력을 다른 공정 표준 입력으로 연결하는 방법은 잘 알려져 있습니다.
proc1 | proc2
하지만 proc1의 표준 오류를 proc2에 보내고 표준 출력을 현재 위치로 유지하려면 어떻게 해야 합니까?당신은 생각할 것입니다.bash
다음과 같은 명령을 사용할 수 있습니다.
proc1 2| proc2
하지만, 아아, 아닙니다.이것을 할 수 있는 방법이 있습니까?
또한 프로세스 대체도 있습니다.즉, 프로세스가 파일을 대체합니다.
보낼 수 있습니다.stderr
다음과 같이 파일에 저장합니다.
process1 2> file
그러나 다음과 같이 파일에 대한 프로세스를 대체할 수 있습니다.
process1 2> >(process2)
여기에 다음과 같은 구체적인 예가 있습니다.stderr
화면과 로그 파일에 모두 추가됩니다.
sh myscript 2> >(tee -a errlog)
다음 트릭을 사용하여 스왑할 수 있습니다. stdout
그리고.stderr
그런 다음 일반 파이프 기능을 사용합니다.
( proc1 3>&1 1>&2- 2>&3- ) | proc2
제공됨stdout
그리고.stderr
둘 다 처음에 같은 장소를 가리켰습니다. 이것은 당신이 필요로 하는 것을 제공할 수 있습니다.
음, 그건…x>&y
비트는 파일 핸들을 변경합니다.x
이제 파일이 처리되는 모든 곳으로 데이터를 전송합니다.y
시사점구체적인 경우:
3>&1
새 핸들을 만듭니다.3
현재 핸들로 출력됩니다.1
(원래 stdout), 아래의 최종 글머리 기호 포인트를 위해 어딘가에 저장하기 위해서입니다.1>&2
핸들 수정1
(stdout) - 현재 핸들로 출력합니다.2
(원래 stderr).2>&3-
핸들 수정2
(stderr) - 현재 핸들로 출력합니다.3
(원래 stdout) 그런 다음 핸들을 닫습니다.3
(를 통해)-
마지막에).
이것은 정렬 알고리즘에서 볼 수 있는 스왑 명령입니다.
temp = value1;
value1 = value2;
value2 = temp;
Bash 4에는 다음과 같은 기능이 있습니다.
'|&'을 사용하는 경우, command1의 표준 오차는 파이프를 통해 command2의 표준 입력에 연결됩니다. 이것은 2>&1 |의 줄임말입니다.표준 오류에 대한 이 암묵적인 리디렉션은 명령에 의해 지정된 리디렉션 후에 수행됩니다.
zsh에도 이 기능이 있습니다.
--
다른/이전 셸의 경우 다음과 같이 명시적으로 입력합니다.
첫 번째 명령 2>&1 | 기타 명령
스와핑은 문제를 해결하기 때문에 좋습니다.원본 stdout이 필요 없는 경우를 대비하여 다음과 같이 수행할 수 있습니다.
proc1 2>&1 1>/dev/null | proc2
이 순서는 매우 중요합니다. 다음을 원하지 않을 것입니다.
proc1 >/dev/null 2>&1 | proc1
이렇게 하면 모든 것이 다음으로 리디렉션됩니다./dev/null
!
이 중 어느 것도 제대로 작동하지 않았습니다.내가 찾은 가장 좋은 방법은 당신이 원하는 것을 하는 것입니다.
(command < input > output) 2>&1 | less
이 기능은 다음과 같은 경우에만 작동합니다.command
키보드 입력이 필요하지 않습니다.예:
(gzip -d < file.gz > file) 2>&1 | less
gzip 오류를 더 적게 넣을 것입니다.
언급URL : https://stackoverflow.com/questions/1507816/with-bash-how-can-i-pipe-standard-error-into-another-process
'code' 카테고리의 다른 글
Java용 Eclipse에서 체인된 메서드 호출을 별도의 줄로 래핑 (0) | 2023.04.28 |
---|---|
가치가 있다는 것을 알고 있다는 것을 의미하기 때문에 "암시적으로 포장되지 않은 옵션"을 만들어야 하는 이유는 무엇입니까? (0) | 2023.04.28 |
열 이름으로 피벗 해제 (0) | 2023.04.28 |
매트 테이블 정렬 데모가 작동하지 않음 (0) | 2023.04.28 |
Swift에서 메일 앱을 여는 방법 (0) | 2023.04.23 |