sedを一回限りのsshコマンドとして実行する

sedを一回限りのsshコマンドとして実行する

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

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

関連情報