Bash Sed命令无法通过SSH工作
考虑以下命令:Bash Sed命令无法通过SSH工作,bash,ssh,sed,Bash,Ssh,Sed,考虑以下命令: ssh MACHINE sed -i 's#\[ "\$JBOSS_MODE" = "standalone" \]#\[ "\$JBOSS_MODE" = "sim_standalone" \]#' /tmp/sim-wildfly 从命令行运行此命令时,出现以下错误: sed: -e expression #1, char 3: unterminated `s' command 但是,当我首先SSH到特定的机器上,然后运行命令的sed部分时,它工作正常: > ssh
ssh MACHINE sed -i 's#\[ "\$JBOSS_MODE" = "standalone" \]#\[ "\$JBOSS_MODE" = "sim_standalone" \]#' /tmp/sim-wildfly
从命令行运行此命令时,出现以下错误:
sed: -e expression #1, char 3: unterminated `s' command
但是,当我首先SSH到特定的机器上,然后运行命令的sed
部分时,它工作正常:
> ssh MACHINE
> sed -i 's#\[ "\$JBOSS_MODE" = "standalone" \]#\[ "\$JBOSS_MODE" = "sim_standalone" \]#' /tmp/sim-wildfly
你知道为什么会这样吗
编辑:我相信这与我如何转义字符有关,因为我只是尝试了简单的测试替换,没有转义字符,效果很好。我尝试了双重转义,但也没有成功。尝试
ssh
使用here doc避免疯狂转义:
ssh -t -t MACHINE <<'EOF'
sed -i 's#\[ "\$JBOSS_MODE" = "standalone" \]#\[ "\$JBOSS_MODE" = "sim_standalone" \]#' /tmp/sim-wildfly
exit
EOF
ssh-t-t机器原来是空格,但这是一个很好的建议!我会试试看。它是有效的,但我得到这样一条消息:伪终端将不会被分配,因为stdin不是终端。
有什么办法可以摆脱它吗?啊,你最终需要一个退出
。请参阅更新的答案。