我想通过使用sh -c执行以下命令(因为我想稍后再添加类似的命令):
impala-shell -q "CREATE TABLE test LIKE PARQUET 'hdfs://.../foo.parquet' STORED AS PARQUET"
此命令正常工作。但是,如果我尝试
sh -c 'impala-shell -q "CREATE TABLE test LIKE PARQUET 'hdfs://../foo.parquet' STORED AS PARQUET"'
我收到语法错误:
LIKE PARQUET hdfs://.../...
^
hdfs路径中的单引号一定存在问题,但我无法弄清楚。 hdfs路径必须用引号引起来。我还尝试用/'反斜杠,该斜杠实际上应该根据文档工作。我希望有人可以帮助我。
答案 0 :(得分:2)
您可以使用Python告诉您如何引用shell命令。对真的。 :)
python -c '
import sys
try:
from pipes import quote
except ImportError:
from shlex import quote
print(quote(sys.stdin.read().rstrip("\n")))
' <<'EOF'
impala-shell -q "CREATE TABLE test LIKE PARQUET 'hdfs://.../foo.parquet' STORED AS PARQUET"
EOF
...作为输出发出:
'impala-shell -q "CREATE TABLE test LIKE PARQUET '"'"'hdfs://.../foo.parquet'"'"' STORED AS PARQUET"'
...事实上,您可以成功运行:
sh -c 'impala-shell -q "CREATE TABLE test LIKE PARQUET '"'"'hdfs://.../foo.parquet'"'"' STORED AS PARQUET"'
由于单引号中的所有内容都是文字,包括反斜杠,因此您需要更改为其他引号上下文,以便在单引号字符串中包含单引号文字。
这就是'"'"'
的作用:首先,它结束单引号上下文。然后进入双引号上下文;然后插入文字'
;然后结束双引号上下文;然后返回单引号上下文。