일회성 SSH 명령으로 sed 실행

일회성 SSH 명령으로 sed 실행

내 서버에 있는 파일의 문자열을 다른 문자열로 대체하고 싶습니다. 나는 이것을 시도했습니다 :

ssh $REMOTE_HOST sed 's|export ${KEY}=${VAL}|export ${KEY}=${NEW_VAL}|' "$ENV_FILE"

그리고 다양한 유형의 인용을 사용한 여러 가지 변형이 있지만 제대로 작동하지 않습니다. sed 명령은 수동으로 변수를 값으로 대체하고 서버에서 실행할 때 작동합니다.

위의 명령은 다음과 같은 오류를 발생시킵니다:

bash: {env_file_redacted}: Permission denied
bash: line 0: export: `=': not a valid identifier
bash: line 0: export: `=': not a valid identifier
sed: -e expression #1, char 1: unterminated `s' command

내가 말했듯이 명령은 서버에서 실행할 때 작동하므로 권한 문제는 아닙니다.

여기서 문제는 무엇입니까?

답변1

원격 서버의 환경에서 모든 변수($REMOTE_HOST 제외)를 사용할 수 있는 경우 다음을 시도해 볼 수 있습니다.

ssh $REMOTE_HOST 'echo sed "s|export ${KEY}=${VAL}|export ${KEY}=${NEW_VAL}|" "$ENV_FILE"'

모든 것이 괜찮아 보이면 echo.

업데이트

지역 변수 사용:

ssh $REMOTE_HOST "echo sed \"s|export ${KEY}=${VAL}|export ${KEY}=${NEW_VAL}|\" \"$ENV_FILE\""

모든 것이 괜찮아 보이면 echo.

관련 정보