【问题标题】:How to execute "export" command in linux via Qt如何通过 Qt 在 linux 中执行“导出”命令
【发布时间】:2013-10-30 07:01:35
【问题描述】:

根据我的问题,我无法通过 Qt 在 linux 中执行“导出”命令。

我尝试了 QProcess,但没有成功。

其实我需要在 Linux 操作系统中设置代理地址。 设置代理地址的命令是:

$ export http_proxy=http://proxy-server.mycorp.com:3128/

我想通过 Qt 执行这个命令。我尝试使用 QProcess,但没有成功。

我还尝试了here 中提到的 QProcessEnvironment。

任何人都可以建议我执行此命令的更好方法吗??

还有其他方法可以通过 Qt 在 Linux 上设置代理服务器吗??

任何想法/建议都将受到高度赞赏。

我使用的是 Qt 4.7.4(根据公司政策无法切换到更高版本)

【问题讨论】:

    标签: linux qt ubuntu qprocess


    【解决方案1】:

    export 不是 eucutable 文件,Qt 进程使用 exec C 函数,所以你不能这样做,你可以运行 ls -l,但是 export , set,你不能运行 bash built-in 命令。您应该直接将 C 函数用于environ-variable。如果您阅读man getenv,您可以解决您的问题。

    对于您的情况,您可以通过setenv C function 进行操作。

    【讨论】:

    • 感谢您的回答。我尝试使用 setenv("http_proxy", "proxy-server.mycorp.com:3128", 1)。它返回“0”。我还使用了 getenv(),它显示了相同的代理服务器。但是当我尝试使用命令“printenv”或“echo $http_proxy”在终端上检查它时,终端上没有显示任何内容。你能帮我了解更多相关信息吗?
    • 可以肯定,这很正常,如果你 cat /proc/[PID]/envorin 文件,你会发现每个程序都有自己的环境变量,所以当你退出一个程序时,你无法访问这些。顺便说一句,别忘了接受我的回答。
    • 我在Qt中再次测试了这个函数。它正在设置应用程序范围和系统范围的代理地址。意味着当应用程序关闭时,代理地址消失了。而当应用程序启动时,我们需要重新设置代理服务器。你能帮我设置系统范围的代理服务器吗?
    • 哦,您的解决方案是错误的,您应该通过套接字连接到您的代理服务器。
    • 你能提供更多关于套接字连接的信息吗?链接会更好。感谢您的建议。
    【解决方案2】:

    如上所述; export 不是可执行文件,它是内置 bash 命令。 exec 变体的功能本质上是用新的过程映像替换当前过程映像。因此,您只能在可执行程序或进程上使用exec 变体。在 Unix/Linux 操作系统中,每个进程都有自己的环境变量。您可以通过读取environ 变量来获取这些键值对,该变量在unistd.h 头文件中声明为externchar** 指针到指针变量。

    环境变量由父进程创建的子进程继承。如果您使用setenv/putenv 函数在您的程序中创建一个新的环境变量,这个新变量只会在您的中被授予并嵌套子进程 直到它们退出或终止。如果您想让这些变量永久化,您需要在启动 shell 脚本中设置它们。

    在 Linux 系统中,bash 在出现之前会运行以下脚本文件:

    • /etc/profile
    • /etc/bashrc
    • ~/.bash_profile

    如果您将环境变量作为 export key=value 命令嵌入到 shell 脚本中,该脚本将由 bash 启动,您的主程序将在上面运行,您可以从您的程序或终端本身。

    【讨论】:

      猜你喜欢
      • 2018-11-21
      • 1970-01-01
      • 2017-12-13
      • 2014-06-12
      • 2019-11-06
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多