首頁 > 後端開發 > Golang > 主體

exec.Command + PATH 的可執行解析

PHPz
發布: 2024-02-09 08:03:27
轉載
707 人瀏覽過

exec.Command + PATH 的可执行解析

php小編魚仔今天為大家介紹一個關於exec.Command和PATH的關鍵問題—可執行解析。在PHP中,exec.Command函數是用來執行外部指令的常用函數之一,而PATH則是系統環境變量,用於指定係統尋找執行檔的目錄。在使用exec.Command函數執行外部指令時,有時會遇到無法找到執行檔的問題,這時就需要正確設定PATH,以確保系統能夠正確解析執行檔的路徑。以下我們將詳細討論如何正確設定PATH,以及常見的解析問題和解決方法。

問題內容

具有非常相似的指令呼叫

#
cmddirect := exec.command("theexecutable")
cmdshell := exec.command(os.getenv("shell"),  "-c",  "theexecutable")
登入後複製

兩者俱有相同的環境設定

envwithpath := append(os.environ(), fmt.sprintf("path=/real/existing/path/to/theexecutable/holder:%s", os.getenv("path")))

cmddirect.env = envwithpath
cmdshell.env = envwithpath
登入後複製

儘管 cmdshell 按預期工作良好,但 cmddirect 失敗了

exec: "theexecutable": executable file not found in $path
登入後複製

對於所提到的完全相同的環境設置,呼叫也成功

cmdwhich := exec.command("which", "theexecutable")
登入後複製

正確回傳 /real/existing/path/to/theexecutable/holder/theexecutable

那麼造成這種差異的原因是什麼?

附註這兩種方法肯定有相同的 $path 設定。例如

exec.Command("env")
exec.Command(os.GetEnv("SHELL"),  "-c",  "env")
登入後複製

兩者輸出相同的 path=.... 序列

謝謝

解決方法

exec.Command 使用exec.LookPath 尋找可執行檔的路徑,該路徑使用您的PATH ,而不是在cmd 上設定的路徑。

如果您希望更可靠地查找特定可執行檔(或產生一個子 shell),我建議將 Cmd.Path 設定為可執行檔的路徑。

以上是exec.Command + PATH 的可執行解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板