Bash: heredoc 스크립트에 매개변수를 전달하는 방법

Bash: heredoc 스크립트에 매개변수를 전달하는 방법

멍청한 스크립트 test.sh가 있고 거기에 전달하는 매개변수가 다음과 같다고 상상해 보세요.

bash test.sh arg1 arg2 arg3

test.sh는 명령줄을 표시하는 어리석은 스크립트입니다.

#!/bin/bash
echo "$0 $*"

나는 bash heredoc <<를 사용하여 동일한 작업을 수행하기 위해 bash에 스크립트를 제공하고 싶습니다. 그래서 나는 이것을 시도했습니다 :

bash <<'EOF' -- arg1 arg2 arg3
echo "$0 $*"
EOF

하지만 오류로 인해 실패합니다

bash: arg1: No such file or directory

어떤 아이디어가 있나요?

답변1

여기에 있는 문서는 표준 입력을 통해 내부적으로 bash에 전달됩니다. 표준 입력에서 읽도록 bash에 지시해야 합니다. 이는 명령줄 인수 없이 자동으로 발생합니다. 옵션이 아닌 인수가 하나 이상 있고 또는 옵션이 없는 경우 -s-c번째 비옵션 인수는 실행할 스크립트 파일의 이름입니다. -sbash에게 표준 입력에서 읽도록 지시하는 옵션을 전달할 수 있습니다 .

bash <<'EOF' -s -- arg1 arg2 arg3
echo "$0 $*"
EOF

답변2

또는 대부분의 시스템에서 다음을 수행할 수 있습니다.

bash /dev/fd/3 3<< 'EOF' arg1 arg2 arg3
echo "$0 $*"
IFS= read -rp "Enter something: "
printf 'You entered: "%s"\n' "$REPLY"
EOF

이렇게 하면 여기의 스크립트가 여전히 표준 입력에 액세스할 수 있습니다.

관련 정보