在ssh上运行bash命令时出错

时间:2016-11-22 03:48:40

标签: bash awk ssh pid ps

尝试通过ssh运行以下命令时:

awk: cmd. line:1: {print awk: cmd. line:1: ^ unexpected newline or end of string

我收到以下错误:

export SPARK_CLASSPATH=$SPARK_CLASSPATH:/local/spark-1.6.3-bin-hadoop2.6/lib/mysql-connector-java-5.1.40-bin.jar

我试图以不同的方式逃避但是没有找到正确的方法 - 或者它可能是其他的东西?

提前致谢!

1 个答案:

答案 0 :(得分:3)

您不能将单引号包含在单引号字符串中,因为除了关闭字符串的单引号外,不会在内部解释任何内容。您可以将单引号字符串与"'"

连接起来
ssh host 'for pid in $(ps -ef | grep "some process" | awk '"'"'{print $2}'"'"'); do kill -9 $pid; done'

或者,连接转义的单引号(\'):

ssh host 'for pid in $(ps -ef | grep "some process" | awk '\''{print $2}'\''); do kill -9 $pid; done'

请参阅Strong Quoting

错误原因

您的命令被解释为几个$IFS - 分隔的参数:

  • for pid in $(ps -ef | grep "some process" | awk {print
  • }); do kill -9 $pid; done

字符串中没有$2,因为$2被解释为shell变量,而普通shell上下文中此变量的值为空。

因此,您已将以下命令发送到服务器:

for pid in $(ps -ef | grep "some process" | awk {print }); do kill -9 $pid; done

如果在终端中运行此命令,您将从AWK获得相同的错误。