C popen 호출(calls)을 사용하여 sh -c '<command>'
작은 쉘 스크립트를 실행 해야 합니다. 스크립트를 실행할 수 없습니다. 나는 이 조각으로 문제를 분리했습니다.
#!/bin/bash
sh -c 'bash -xev -s << EOF
a=1
echo "a=$a"
EOF'
어느 출력
a=1
+ a=1
echo "a="
+ echo a=
a=
내가 무엇을 놓치고 있나요? 왜 stdin의 변수를 사용할 수 없나요?
(버전: GNU bash 5.1.4, 대시 0.5.11+git20200708+dd9ef66-5)
답변1
EOF
다음 섹션을 인용하거나 이스케이프 처리하지 않는 한 여기에 있는 문서의 본문에는 매개변수 확장, 명령 대체 및 산술 확장이 적용됩니다.
$ sh -c 'bash -xev -s << \EOF
a=1
echo "a=$a"
EOF'
a=1
+ a=1
echo "a=$a"
+ echo a=1
a=1
"EOF"
일반 따옴표 또는 를 사용할 수도 있습니다 'EOF'
.
쉘이 전체 변수가 아닌 일부 변수를 확장하려는 경우와 같이 더 복잡한 경우에는 해당 변수를 EOF
따옴표로 묶지 않고 특정 변수를 이스케이프할 수 있습니다. 예를 들어 \$a
- 참조