다음 쉘 스크립트를 고려하십시오.
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