2013-10-30 54 views
2

根據我的問題,我無法通過Qt在Linux中執行「導出」命令。如何在Linux中通過Qt執行「導出」命令

我試過QProcess,但沒有奏效。

其實我需要在Linux操作系統中設置代理地址。 設置代理服務器地址的命令是:

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

我想通過Qt來執行此命令。我嘗試使用QProcess,但它沒有奏效。

我也試過QProcessEnvironment提到here

任何人都可以建議我更好的方式來執行此命令?

也有其他的方式來設置Linux上的代理服務器通過Qt ??

任何想法/建議將不勝感激。

我使用Qt 4.7.4(不能切換到更高版本按照公司政策)

回答

4

出口不eucutable文件,Qt的過程中使用EXEC C函數,所以你不能做到這一點,你可以運行ls -l,但導出,設置,則不能運行bash built-in命令。您應該直接使用C函數environ-variable。如果你讀man getenv你可以解決你的問題。

對於您的情況,您可以通過setenv C function來完成。

+0

感謝您的回答。我嘗試使用setenv(「http_proxy」,「http://proxy-server.mycorp.com:3128/」,1)。它返回'0'。我也使用getenv(),它顯示了相同的代理服務器。但是當我試圖使用命令「printenv」或「echo $ http_proxy」在終端上檢查它時,終端上未顯示任何內容。你能幫助我獲得更多有關這方面的信息嗎? – skg

+0

可以肯定,這是正常的,如果你的貓'的/ proc/[PID]/envorin'文件,你會發現每一個節目都有自己的環境變量,所以當你從你不訪問thsose程序退出。順便說一下,別忘了接受我的口水。 – PersianGulf

+0

我在Qt中再次測試了這個函數。它是在整個系統範圍內設置代理地址。意味着當應用程序關閉時,代理地址不見了。當應用程序啓動時,我們需要重新設置代理服務器。你能幫我設置系統範圍的代理服務器嗎? – skg

0

如上所述; export不是一個可執行文件,它是一個內置的bash命令。 exec變體的性質決定了它們的性質,用新的過程映像替換當前的過程映像。因此,您只能在可執行程序或進程上使用exec變體。在Unix/Linux操作系統中,每個進程都有自己的環境變量。您可以通過讀取environ變量獲得這些鍵值對,該變量在unistd.h頭文件中聲明爲externchar**指針指針變量。

環境變量繼承子進程父進程創建。如果您使用setenv/putenv函數來創建一個新的環境變量在程序中,這個新變量將只在您的授予和嵌套孩子,直到他們退出或終止進程。如果您想使這些變量永久化,您需要將它們設置爲啓動外殼腳本

在Linux系統中,慶典運行下面的腳本文件,它顯示了前:

  • /etc/profile文件
  • 的/ etc/.bashrc中
  • 〜/ .bash_profile中

如果將shell腳本中的環境變量嵌入export key=value命令中,該命令將由bash您的主程序將運行在頂部,您可以從您的程序或終端本身訪問它們。