Bash:“无法解析参数”是由“在找到匹配的引号之前文本已结束”引起的

时间:2019-02-02 10:06:14

标签: bash shell

目标:

运行gnome-terminal -e "npm run start --prefix /home/cc/Desktop/Programming/Software/Elastic/elasticsearch-head"

代码:

HEAD="gnome-terminal -e \"npm run start --prefix /home/cc/Desktop/Programming/Software/Elastic/elasticsearch-head\""
${HEAD}

错误:

无法解析参数:“ --command / -e”的参数无效:在找到匹配的引号之前,文本结束。(文本为'“ npm”)

其他信息:

当我尝试使用时

ES="gnome-terminal -e \"/home/cc/Desktop/Programming/Software/Elastic/pna/bin/elasticsearch\""
${ES}

然后它可以正常工作。区别在于[...]/bin/elasticsearch本身就是一个shell脚本,而npm run start应该运行带有参数npm的程序run start。但是,由于我不了解Bash,我无法解决这个问题。

谢谢您的建议!

1 个答案:

答案 0 :(得分:2)

shell解释器总是使用报价来检测和保护单词。它们永远不会被包含在结果中

因此使用数组:

HEAD=( gnome-terminal -e "npm run start --prefix \
    /home/cc/Desktop/Programming/Software/Elastic/elasticsearch-head" )
"${HEAD[@]}"