bash 2>>(명령)>>(명령)이 그것을 얻지 못합니다

bash 2>>(명령)>>(명령)이 그것을 얻지 못합니다

이것을 팔로우하고 있습니다(https://stackoverflow.com/a/16283739/15603477) 훌륭한 답변입니다. 다음 부분이 이해가 안 되네요.

$ ls -ld /tmp /tnt 2> >(sed 's/^/E: /') > >(sed 's/^/O: /')
O: drwxrwxrwt 17 root root 28672 Nov  5 23:00 /tmp
E: ls: cannot access /tnt: No such file or directory

이것은 또한 사실이다.

$ ((ls -ld /tmp /tnt |sed 's/^/O: /' >&9 ) 2>&1 |sed 's/^/E: /') 9>&1| cat -n
     1  O: drwxrwxrwt 118 root root 196608 Jan  7 12:29 /tmp
     2  E: ls: cannot access /tnt: No such file or directory

https://www.gnu.org/software/sed/manual/sed.html#소개 E:그리고 O:일부는 아직도 그것을 얻지 못했습니다.


다음은 내 해석이다

$ ls -ld /tmp /tnt 2> >(sed 's/^/E: /') > >(sed 's/^/O: /')

ls -ld /tmp /tnt2는 명령의 오류가 평가되는 stderr을 나타내며 다음으로 대체될 줄의 시작 부분을 나타냅니다 (sed 's/^/E: /').^두번째:
>(sed 's/^/O: /')== 1은 stdout을 참조하며, 일반 출력은 처음 1>(sed 's/^/O: /')
에 평가되고 다음 으로 대체됩니다.(sed 's/^/O: /')오:

답변1

>(...)~라고 불리는프로세스 교체. 이는 "외부" 프로그램이 마치 파일인 것처럼 "내부" 프로그램에 쓸 수 있게 해줍니다.

페이지도 참조하세요Bash의 리디렉터.

E:및 명령이 파이프되는 Error( ) 및 Standard Output( ) O:의 출력을 나타내기 위해 주석 작성자가 사용하는 명령입니다 .stderrstdoutsed

sed 's/^/E: /'^줄의 시작 부분( )을 찾아 명령의 두 번째 부분에 표시된 대로 E:또는 로 대체(추가)합니다.O:

관련 정보