サーバー上のファイル内の文字列を別の文字列に置き換えたいのですが、次のようにしてみました。
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
。