이 bash 스크립트에서는 .. 그냥 표시됩니다 ..
+cat
실행될 때.
#!/bin/bash
set -x
cat > /test << "EOF"
a
b
c
d
EOF
하지만 나는 그것이 무엇인지 보여주고 싶습니다. 포함하다
a
b
c
d
파일에 추가됩니다.
답변1
set -v
대신 사용해 보세요set -x
답변2
set -x
이는 일반적인 리디렉션의 요소가 아닌 디스플레이 확장의 평가 로 인해 발생합니다 .
LC_ALL=C man set |
sed -n '/^ *-x/,/^$/p'
-x The shell shall write to standard error a
trace for each command after it expands the
command and before it executes it. It is
unspecified whether the command that turns
tracing off is traced.
~에서POSIX 사양
리디렉션 연산자
<<
와<<-
둘 다 다음과 같은 쉘 입력 파일에 포함된 라인 리디렉션을 허용합니다.여기 문서, 명령 입력에.
cat
쉘이 아닌 입력을 받는 것은 바로 그것입니다 . 그래서 없다확장실행 전에 보고하도록 합니다. 그리고 일단 해당 입력이 전달되면 실제로 보고할 데이터가 없습니다.
다른 곳에서 제안한 것처럼 set -v
작동하지만 -x
작동하지 않는 이유는 다음과 같습니다.
LC_ALL=C man set |
sed -n '/^ *-v/,/^$/p'
-v The shell shall write its input to standard
error as it is read.
이 경우 stderr
확장 여부에 관계없이 리디렉션하기 전에 읽은 대로 입력을 복사합니다.
답변3
셸에는 이 작업을 지원하는 기능이 없습니다. 너는 이 목표를 달성할 수 있다특정한결과
tee /test << "EOF"
a
b
c
d
EOF
그러나 이것이 쉘 스크립트에서 수행할 수 있는 모든 작업에 완전히 적용되는 것은 아닙니다.
screen
와 같은 프로그램을 살펴보고 싶을 수도 있습니다 Expect
.