다음과 같은 간단한 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'\'''
...
명령에 작은따옴표와 백슬래시가 추가된 것을 볼 수 있습니다. 이제 어떻게 진행해야 합니까?