tee를 사용할 때 이 변수 ​​할당이 작동하지 않는 이유는 무엇입니까?

tee를 사용할 때 이 변수 ​​할당이 작동하지 않는 이유는 무엇입니까?

고려하다:

$ FILE_NAME=`(cat somefile | head -1)` | tee -a dump.txt
$ echo $FILE_NAME

$ 
  1. (cat somefile | head -1)이제 tee..의 출력이 stdin에 도달하지 못하는 이유는 무엇입니까 ?
  2. 출력이 tee에 도달하면 이를 dump.txt 파일 및 표준 출력에 복사할 수 있습니다.
  3. 변수 $FILE_NAME도 값을 받지 않습니다.

답변1

당신은 글을 쓰고 싶을 수도 있습니다

FILE_NAME=`(cat somefile | head -1) | tee -a dump.txt`
echo $FILE_NAME

(아니면 head -1 somefile고양이를 없애세요)

` 이외의 파이프는 논리 오류에 가깝습니다. 이것이 구문 오류라고 생각할 수도 있지만 Bash의 작동 방식은 아니며 예상한 결과를 제공하지 않습니다.

또한 변수 할당 없이 비교:

$ echo hello > somefile
$ `(cat somefile | head -1)` | tee -a dump.txt
bash: hello: command not found

somefile의 첫 번째 줄은 stdout에 반영되지 않지만 명령으로 해석됩니다. 명령을 실행할 수 없으므로 tee는 출력을 얻지 못하고 생성할 파이프가 없기 때문에 실제로 실행되지 않습니다.

관련 정보