Bash:由“文本在找到匹配引用之前结束”引起的“无法解析参数”[重复]

Posted

技术标签:

【中文标题】Bash:由“文本在找到匹配引用之前结束”引起的“无法解析参数”[重复]【英文标题】:Bash: "Failed to parse arguments" caused by "Text ended before matching quote was found" [duplicate] 【发布时间】:2019-06-26 18:24:10 【问题描述】:

目标:

运行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 应该使用参数run start 运行程序npm。但由于我不了解 Bash,我无法解决这个问题。

感谢您的任何建议!

【问题讨论】:

这是mywiki.wooledge.org/BashFAQ/050的必填链接 【参考方案1】:

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

因此使用数组:

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

【讨论】:

有效,谢谢。数组末尾缺少括号。无法编辑您的回复,因为编辑因太短而被阻止。 添加了右括号!

以上是关于Bash:由“文本在找到匹配引用之前结束”引起的“无法解析参数”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

AppCertDlls:由病毒引起的 Win32 上的进程创建速度减慢

如何区分两个“onpause”事件 - 由单击“暂停”按钮引起,以及由到达媒体片段末尾引起?

查找由智能指针引起的内存泄漏

由 org.xmlpull.v1.XmlPullParserException 引起的错误

如何避免计算由 SUM() 内部的连接引起的行?

由 android.database.CursorWindowAllocationException 引起