在PATH中找到运行命令?

时间:2014-06-15 22:03:57

标签: path environment-variables qt5 qprocess

我正在尝试通过QProcess运行命令,但它无效。我的命令类似于utility -someflag /path/to/fileutility位于PATH中,但似乎QProcess未使用此环境变量。

命令失败了,我需要指定实用程序的完整路径(我想避免)。

这有什么办法吗?基本上某些方法使QProcess使用PATH变量?

1 个答案:

答案 0 :(得分:0)

所以问题在于它取决于应用程序的启动方式。这是在OSX上,但在其他平台上可能类似:

  • 如果它是一个命令行应用程序并从终端启动,那么它将可以访问env变量。

  • 如果它是从Qt Creator启动的,它将无法访问任何env变量。

  • 如果是GUI应用程序(.app),它将无法访问env变量。

我的案例中的解决方案,因为它是一个GUI应用程序,是手动更新.app包。首先需要更改 Info.plist 文件:

<key>CFBundleExecutable</key>
<string>MyApplication</string>

到此:

<key>CFBundleExecutable</key>
<string>MyApplication.sh</string>

然后,仍然在应用包中,在目录/ MacOS 中,创建一个与应用程序同名的新文件,但扩展名为.sh,例如。 “MyApplication.sh”。然后创建启动器:

#!/bin/sh
SCRIPT_DIR=$(dirname "$0")
source ~/.bash_profile
logger "$SCRIPT_DIR/MyApplication"
exec "$SCRIPT_DIR/MyApplication" $@

source ~/.bash_profile行特别确保所有环境(包括PATH变量)都能正确设置。