exec는 작은따옴표로 묶인 공백으로 명령을 종료합니다.

exec는 작은따옴표로 묶인 공백으로 명령을 종료합니다.

다음과 같은 간단한 bash 스크립트가 있습니다.

#!/bin/bash
set -e
SPARK_CONF="--master ... \
...
--conf spark.driver.extraJavaOptions='-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps' \
--conf ...."
SPARK_CMD="spark-submit $SPARK_CONF"
echo $SPARK_CMD
exec $SPARK_CMD

오류가 발생하겠습니다.

Error: Unrecognized option: -XX:+PrintGCDetails

그 전에 전체 명령을 인쇄한 것을 볼 수 있었기 exec때문에 인쇄된 명령을 복사하여 쉘에 붙여넣은 다음 성공적으로 실행될 수 있음을 발견했습니다.

작은따옴표로 바꾸려고 시도했지만 \"여전히 같은 오류가 발생했습니다.

exec또한 으로 바꾸면 eval작동합니다. 나는 그들 사이의 차이점을 검색했지만 exec가 따옴표로 끝나는 이유를 찾지 못했습니다 ...

exec이 경우 왜 실패했는지 이해하고 싶습니다 .

업데이트:에 따르면https://unix.stackexchange.com/a/444949/524235, 관련 부분을 다음으로 변경했습니다.

set -e -x

SPARK_CONF="--master ... \
...
--conf spark.driver.extraJavaOptions='-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps' \
--conf ...."
SPARK_CMD=($SPARK_HOME/bin/spark-submit $SPARK_CONF)
"${SPARK_CMD[@]}"

위와 동일한 오류 메시지로 인해 여전히 실패하지만 실행된 명령은 다음과 같습니다.

.../bin/spark-submit ...
--conf 'spark.driver.extraJavaOptions='\''-verbose:gc' -XX:+PrintGCDetails '-XX:+PrintGCDateStamps'\'''
...

명령에 작은따옴표와 백슬래시가 추가된 것을 볼 수 있습니다. 이제 어떻게 진행해야 합니까?

관련 정보