環境:mac
運行java exec命令,總是需要完整的絕對路徑給應用程序?
前提條件:我已經配置到我的bash_profile
'adb'
完整路徑。當我在終端上嘗試輸入'adb'
時,它正在工作。
但是,我試圖從java執行'adb'
命令,'adb'
不工作,而是我需要傳遞完整的adb路徑才能使其工作。
我想這可能與bash_profile
設置有關,任何人都知道這個問題的確切原因?
環境:mac
運行java exec命令,總是需要完整的絕對路徑給應用程序?
前提條件:我已經配置到我的bash_profile
'adb'
完整路徑。當我在終端上嘗試輸入'adb'
時,它正在工作。
但是,我試圖從java執行'adb'
命令,'adb'
不工作,而是我需要傳遞完整的adb路徑才能使其工作。
我想這可能與bash_profile
設置有關,任何人都知道這個問題的確切原因?
Runtime.getRuntime().exec()
運行/bin/sh -c <command>
。如果這是或指向系統上的bash shell:除非明確指出(--login
),否則非交互式bash不會讀取.bash_profile
。
當bash被調用以交互登錄殼,或作爲非交互式殼與--login選項,它首先讀取並從文件中執行命令的/ etc /配置文件,如果該文件存在。讀取該文件後,它會按照該順序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,並從第一個存在且可讀的命令讀取和執行命令。當shell開始禁止這種行爲時,可以使用--noprofile選項。
這有點複雜,但非交互式的非登錄bash實例不讀取配置文件。
您的路徑設置不會被子shell獲取(實際上/bin/sh
其中甚至可能根本就不是bash)。
如果需要,可以通過添加appropriate entry to to /etc/paths.d
將系統範圍的路徑添加到adb
。
*「我試圖從java執行'adb'命令」* - 如何? – MadProgrammer
相關代碼在哪裏? – f1sh