尝试通过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
我试图以不同的方式逃避但是没有找到正确的方法 - 或者它可能是其他的东西?
提前致谢!
答案 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获得相同的错误。