답변:
또한이 공정 대체 . 프로세스가 파일을 대체합니다. 다음과 같이 파일을
보낼 수 있습니다 stderr
.
process1 2> file
그러나 다음과 같이 파일 프로세스를 대체 할 수 있습니다.
process1 2> >(process2)
다음은 stderr
화면 모두에 보내고 로그 파일에 추가 하는 구체적인 예입니다.
sh myscript 2> >(tee -a errlog)
weston --help 2> >(less)
) 내 껍질이
weston --help
및 less
키보드 상호 작용을 가지고 있지만 그 중 하나가 수신하는 기대, 당신은 난처한 상황에있을 수 있습니다. grep
대신 비슷한 방법으로 테스트 해보십시오 . 또한 마우스 / 키보드 입력이 모두 웨스턴이 아닌 두 번째 명령으로 이동하는 것을 알 수 있습니다.
당신은에 다음과 같은 트릭을 사용할 수 있습니다 스왑 stdout
및 stderr
. 그런 다음 일반 파이프 기능 만 사용하십시오.
( proc1 3>&1 1>&2- 2>&3- ) | proc2
처음에 동일한 장소를 제공 stdout
하고 제공 stderr
하면 필요한 것을 얻을 수 있습니다.
무엇 x>y
비트가하는 일은 파일 핸들을 변경하는 것입니다 x
지금 어디에 파일 핸들이 해당 정보 전송 있도록 y
현재 포인트. 특정 사례의 경우 :
3>&1
아래의 마지막 글 머리 기호를 위해 어딘가에 저장 하기 위해 현재 핸들 (원래 stdout)에 출력 할 새 핸들 3
을 만듭니다 .1
1>&2
핸들 1
(stdout)을 수정 하여 현재 핸들 2
(original stderr)로 출력합니다.2>&3-
핸들 2
(stderr)을 수정 하여 현재 핸들 3
(원래 stdout )로 출력 한 다음 3
( -
끝을 통해) 핸들을 닫습니다 .효과적으로 정렬 알고리즘에서 볼 수있는 swap 명령입니다.
temp = value1;
value1 = value2;
value2 = temp;
1>&2-
여기서 사용 하는 것보다 여기 에서 사용하는 것의 가치는 무엇입니까 1>&2
? 2
우리가 즉시 다시 열거 나 다시 할당 하려는 경우 fd를 닫고 싶은 이유를 이해할 수 없습니다 .
Bash 4에는이 기능이 있습니다.
`| & '를 사용하면 command1의 표준 오류는 파이프를 통해 command2의 표준 입력에 연결됩니다. 2> & 1 |의 약어입니다. 표준 오류의 암시 적 리디렉션은 명령으로 지정된 리디렉션 후에 수행됩니다.
zsh에도이 기능이 있습니다.
-
다른 / 이전 쉘에서는 다음과 같이 명시 적으로 입력하십시오.
FirstCommand 2> & 1 | 다른 명령
OtherCommand
씁니다 . 따라서 동일한 데이터가 아니며 다른 곳으로 갈 가능성이 있습니다. 그것은 OP의 희망과 반대되는 것입니다.
proc1
표준 출력과 표준 에러로 출력하고 사용자가 표준 에러가의 표준 입력에 가고 싶다 proc2
(PROC1의 표준 출력이가는 곳이다), 그 다음 내 대답은을 수행합니다. 나는 그가 무엇 OP 준 물었다 그는 아마하지 무엇을, 의미 를 요청합니다. 그 안에 잠재적 인 모호성이 있습니다. 영업 이익은 답변을 받아 스왑이 되는 표준 출력 및 표준 오류 없는 그가 요구 무엇을.
rc
다른 쉘인 간단한 리디렉션을 수행 할 수 있습니다 . 예 :proc1 |[2] proc2
. 멋지지 않습니까?bash
하지만 그렇지 않습니다 .