我想用我的服务器上的一个文件中的另一个字符串替换一个字符串。我试过这样做:
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
。