![실행 시 화면에 쉘 스크립트 명령의 텍스트 출력을 가져옵니다.](https://linux55.com/image/115016/%EC%8B%A4%ED%96%89%20%EC%8B%9C%20%ED%99%94%EB%A9%B4%EC%97%90%20%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20%EB%AA%85%EB%A0%B9%EC%9D%98%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EA%B0%80%EC%A0%B8%EC%98%B5%EB%8B%88%EB%8B%A4..png)
다음 쉘 스크립트를 고려하십시오.
val=($ls)
ls는 쉘 텍스트 출력을 제공하지 않습니다. 이제 명령을 실행하는 동안 화면에 출력 텍스트를 어떻게 얻을 수 있습니까?
출력을 얻기 위해 val 값을 인쇄할 수 있지만 echo를 사용하는 것은 중요하지 않습니다. 따라서 다음 줄을 사용하는 것은 사실이 아닙니다.
echo $val
즉, 마치 명령을 직접 실행한 것처럼 현재 명령의 출력을 셸에서 동시에 실행하려면 어떻게 해야 할까요?
답변1
다음 명령을 실행하면 쉘이 수행 중인 모든 내용을 에코하도록 할 수 있습니다.
sh -x yourscript
또는 스크립트의 첫 번째 명령으로 추가할 수 있습니다.
set -x
그러나 내용이 좀 너무 길 수도 있습니다. 디버깅에는 괜찮지만 선택적인 출력을 원한다면 echo 명령을 직접 신중하게 배치하는 것이 좋습니다.
답변2
tee
표준 출력의 복사본을 파일로 보내도록 명령 할 수 있으며 현재 터미널을 해당 출력 파일로 사용할 수 있습니다. 아래에서 볼 수 있듯이, 출력에 아무 작업도 수행하지 않으면 두 번 인쇄되고, 표준 출력에 작업을 수행하여 삼켜지면 한 번만 인쇄됩니다.
$ echo foo | tee -a "$(tty)"
foo
foo
$ echo foo | tee -a "$(tty)" | grep bar
foo