AIX 6.1에서 "FULL_RUN_SCRIPT_DIR" 문자열을 모두 "/etc/rc.d/.."와 같은 경로로 바꾸려고 합니다.
이것은 코드입니다
SEE_FILE_PATH="$INIT_DIR$SERVICE_NAME"
FULL_RUN_SCRIPT_DIR="FULL_RUN_SCRIPT_DIR"
SERVICE_FILE="$INIT_DIR$SERVICE_NAME"
echo "String1:$FULL_RUN_SCRIPT_DIR"
echo "String2:$SEE_FILE_PATH"
echo "String3:$SERVICE_FILE"
perl -p -i -e "s/$FULL_RUN_SCRIPT_DIR/$SEE_FILE_PATH/g" "$SERVICE_FILE"
하지만 오류가 발생합니다.
String1:FULL_RUN_SCRIPT_DIR
String2:/etc/rc.d/init.d/seelinkdeployer
String3:/etc/rc.d/init.d/seelinkdeployer
Bareword found where operator expected at -e line 1, near "s/FULL_RUN_SCRIPT_DIR//etc"
syntax error at -e line 1, near "s/FULL_RUN_SCRIPT_DIR//etc"
Execution of -e aborted due to compilation errors.
어떤 아이디어가 있나요?
답변1
뭔가 잘못되었다는 첫 번째 힌트는 다음과 같은 경우입니다.
...
near "s/FULL_RUN_SCRIPT_DIR//etc"
...다음과 유사한 표현이 필요할 때
...
near "s/FULL_RUN_SCRIPT_DIR//etc/rc.d/init.d/seelinkdeployer/g"
...전체 가치가 있습니다 $SEE_FILE_PATH
.
문제는 Perl 연산자에서 /
검색 텍스트와 s//
대체 텍스트를 구분하기 위해 슬래시를 사용하고 있으며 적어도 대체 텍스트에 슬래시가 있다는 것입니다.
여러 가지 옵션이 있습니다:
에서 슬래시를 구분 기호로 사용하지 마십시오
s//
. 검색 텍스트를 사용하거나 텍스트에 없는 내용을 바꾸십시오. 예를 들어,~
:perl -p -i -e "s~$FULL_RUN_SCRIPT_DIR~$SEE_FILE_PATH~g" "$SERVICE_FILE"
검색 및/또는 대체 텍스트에서 이스케이프된 슬래시를 슬래시로 바꿉니다(
//
매개변수 확장이 bash와 유사한 쉘을 사용한다고 가정).SEE_FILE_PATH=/etc/rc.d/init.d/seelinkdeployer SEE_FILE_PATH=${SEE_FILE_PATH//\//\\/}
추가 자료: