將 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.

相關內容