我正在尝试在 QT 应用程序中运行一个小型 bash 脚本,其中包含 if-test-then 块以及测试中必要的引号。由于脚本应该由 QT 编译并由 bash 运行,因此引号必须转义两次,因此引号的转义反斜杠也必须转义,正如我所见。不幸的是它没有按预期工作。
这是代码:
#include <stdio.h>
QObject *parent;
int main(int argc, const char* argv[])
{
QProcess *myProcess = new QProcess(parent);
myProcess->execute("/bin/bash -c \"x=1 ; echo $x ; if [ \\\"$x\\\" = \\\"1\\\" ] ; then echo itsOne ; fi\"");
}
当我运行编译后的程序时,我得到输出:
root@debian:~# ./proggy
1
/bin/bash: line 0: [: missing `]'
在 bash 终端中尝试相同的脚本时,而不是此处看到的输出:
root@debian:~# x=1 ; echo $x ; if [ "$x" = "1" ] ; then echo itsOne ; fi
1
itsOne
我已经在 QT 程序中尝试了各种转义和引号的组合,但到目前为止没有任何帮助。
有谁知道这里出了什么问题或者如何解决这个谜题?不知何故,测试命令中的转义引号似乎破坏了 bash 看到的脚本。如果测试命令中有两个必要的引号,为什么 bash 看不到右括号?
有几点。
Firstly execute是 QProcess 的静态成员,因此无需创建 QProcess 的实例。
其次,通常更容易使用execute超载 http://doc.qt.io/qt-5/qprocess.html#execute将程序名称与参数列表分开。
考虑到这一点,你想要的可能是......
QProcess::execute("/bin/bash", QStringList() << "-c" << "x=1 ; echo $x ; if [ \\\"$x\\\" = \\\"1\\\" ] ; then echo itsOne ; fi");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)