1
我正在尝试使用SSH运行多个命令,但我没有得到我的语法。有人能给我一些帮助吗?通过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_HOSTNAME。我不知道如何读回变量。有任何线索吗?
编辑代码:
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脚本中),一个远程变量(CURRENT_HOSTNAME)和sed抱怨双引号。我正在更新上面的代码。 – user1777907 2013-04-05 18:14:27
我得到了工作代码(编辑中的解决方案)。非常感谢乔纳森! – user1777907 2013-04-05 18:44:45