将 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

相关内容