stdout 및 stderr을 로그 파일에 로그해야하지만 화면에 오류 메시지 만 표시합니다. 나는 이것을 할 수있다 :
cp -rpv a/* b 1> copyLog.txt 2> >(tee copyError.txt >&2)
웹 어딘가에서 찾았습니다.
이걸 어떻게 >(tee copyError.txt >&2)
부르는지 알고 싶 습니까? Google은 꺾쇠 괄호 및 괄호와 같은 문자를 무시하기 때문에 Google에서 사용할 수 없습니다.
답변
보낸 사람 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 맨 페이지에서 관련 섹션을 찾으려면을 입력하십시오 />\(
.
답변
>(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
, 서브 쉘에 정의 된 것은 상위 쉘에 정의 된 것과 다릅니다.