쉘 기능`> (tee copyError.txt> & 2)`의 이름은 무엇입니까?


11

stdout 및 stderr을 로그 파일에 로그해야하지만 화면에 오류 메시지 만 표시합니다. 나는 이것을 할 수있다 :

cp -rpv a/* b 1> copyLog.txt 2> >(tee copyError.txt >&2) 

웹 어딘가에서 찾았습니다.

이걸 어떻게 >(tee copyError.txt >&2)부르는지 알고 싶 습니까? Google은 꺾쇠 괄호 및 괄호와 같은 문자를 무시하기 때문에 Google에서 사용할 수 없습니다.



나는 영업 이익은 그가 파일을 표준 출력과 표준 에러를 기록하고 싶었지만 있다고 주장했다 생각 @terdon도 여전히 화면에 표준 오류 표시
드미트리 Avtonomov

답변:


11

보낸 사람 man bash:

   Process Substitution
       Process substitution is supported  on  systems  that  support
       named  pipes  (FIFOs)  or  the  /dev/fd method of naming open
       files.  It takes the form of <(list) or >(list).  The process
       list  is  run with its input or output connected to a FIFO or
       some file in /dev/fd.  The name of this file is passed as  an
       argument  to  the current command as the result of the expan
       sion.  If the >(list) form is used, writing to the file  will
       provide  input  for  list.   If the <(list) form is used, the
       file passed as an argument should be read to obtain the  out
       put of list.

/검색 문자열 을 눌렀다 입력하여 맨 페이지를 검색 할 수 있습니다 . 이와 같은 정보를 찾는 것이 좋습니다. 물론 어떤 맨 페이지를 검색해야하는지 알아야합니다. :)

(검색 할 때 특별한 의미가 있기 때문에 인용을해야합니다 . bash 맨 페이지에서 관련 섹션을 찾으려면을 입력하십시오 />\(.


나는 많은 bash를 수행하므로 man bash> bashman.txt를 수행하고 읽기 전용으로 만들었습니다. 이제 bashman.txt를 텍스트 편집기 (읽기 전용)의 다른 창에로드하고 모든 편집기 기능을 사용하여 검색 및 복사 및 붙여 넣기를 수행 할 수 있습니다.
Joe

8

>(tee copyError.txt >&2) 실제로 몇 가지 다른 기능입니다.

  • >(...)'프로세스 대체'라고합니다. 이것은 생성 명명 된 파이프 의 파일 /dev/fd과 그 파일에 기록하는 괄호의 처리에 대한 입력을 제공한다.

  • >: 일반적으로이를 '출력 리디렉션'이라고하며 표준 출력 ( >또는 1>) 또는 표준 오류 ( 2>)를 파일이나 프로세스 로 보낼 수 있습니다 . >&2출력 리디렉션이지만이 경우 출력은 tee표준 오류로 전송됩니다 (즉 &2, &1표준 출력입니다)

  • 이 없으면 >괄호 ( ())는 서브 쉘을 시작합니다. 괄호 안에 명령을 실행하면 명령이 실행되는 동안에 만 존재하는 다른 쉘이 생성됩니다. 서브 쉘에서 변수를 선언하면 이것이 어떻게 작동하는지 볼 수 있습니다 :

    $ foo='Tom';(foo='Dick'; echo "Sub: $foo"); echo "Orig: $foo"
    Sub: Dick
    Orig: Tom

    보시다시피 $foo, 서브 쉘에 정의 된 것은 상위 쉘에 정의 된 것과 다릅니다.


4
아니요 >(...)는 리디렉션이 아닙니다. >(...)파일 이름으로 확장됩니다. 당신이 할 경우 리디렉션 그 출력을, 당신은 필요 > >(...)하지만, >(...)리디렉션을 사용할 수없는 경우 더 일반적으로 사용된다. OP의 명령은 기존 파이프를 사용하여 수행 할 수 있으며 프로세스 대체가 필요하지 않습니다.
Stéphane Chazelas

@StephaneChazelas 당신이 염두에 둔 솔루션을
만나게되어 기쁩니다.

3
@chhh,cmd 2>&1 > output | tee err >&2
Stéphane Chazelas

트윗 담아 가기
Dmitry Avtonomov

이 답변의 전반부는 잘못되었거나 적어도 오도의 소지가 있습니다. 그것은 그 사실 >출력 리디렉션을 나타낼 수와 그 ()서브 쉘을 표시 할 수 있지만, >(...)실제로는 구성하지 않는 한, 단일 기능으로 >().
ruakh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.