Bash 通过ssh运行多个命令

Bash 通过ssh运行多个命令,bash,Bash,我试图使用SSH运行多个命令,但语法不正确。有人能帮我一下吗 ssh "$USER"@"$IP" " \ CURRENT_HOSTNAME=$(hostname); \ sed -c -i 's/\($TARGET_KEY *= *\).*/\1$REPLACEMENT_VALUE/' $DISTRO_FILE; \ sed -c -i 's/$CURRENT_HOSTNAME/$REPLACEMENT_VALUE/' $CONFIG_FILE; \ hostna

我试图使用SSH运行多个命令,但语法不正确。有人能帮我一下吗

ssh "$USER"@"$IP" " \
    CURRENT_HOSTNAME=$(hostname); \
    sed -c -i 's/\($TARGET_KEY *= *\).*/\1$REPLACEMENT_VALUE/' $DISTRO_FILE; \
    sed -c -i 's/$CURRENT_HOSTNAME/$REPLACEMENT_VALUE/' $CONFIG_FILE; \
    hostname $REPLACEMENT_VALUE"
如果这些命令在本地运行,它们可以正常工作,但在尝试通过SSH运行它们时,我遇到以下错误:

sed: -e expression #1, char 0: no previous regular expression
似乎错误来自于

sed -c -i 's/$CURRENT_HOSTNAME/$REPLACEMENT_VALUE/' $CONFIG_FILE; \
因为它试图读取SSH本身之前设置的$CURRENT_主机名。我不知道如何读回那个变量。有什么线索吗

编辑代码:

ssh "$USER"@"$IP" "CURRENT_HOSTNAME=\$(hostname);
    sed -c -i \"s/\($TARGET_KEY *= *\).*/\1$REPLACEMENT_VALUE/\" $DISTRO_FILE;
    sed -c -i \"s/\$CURRENT_HOSTNAME/$REPLACEMENT_VALUE/\" $CONFIG_FILE;
    hostname $REPLACEMENT_VALUE"
这管用!非常感谢


谢谢。

在将参数发送到远程计算机之前,Bash将评估所有带双引号的变量

如果要保留
$变量
,则需要改为使用单引号(在命令中转义单引号),或转义所有要在服务器端计算的美元符号


您也不需要转义换行符和使用分号。所有换行符都将包含在参数中。

谢谢Jonathan,我已经取得了进展。我现在明白了。不过,我现在有一个问题,因为我有一个局部变量(在本地bash脚本中)、一个远程变量(当前的_主机名)和sed,它们抱怨使用双引号。我正在更新上面的代码。我让代码正常工作(解决方案在编辑中)。非常感谢乔纳森!可能重复的