Unix 指令透過JSch 執行失敗,出現「找不到」錯誤
嘗試透過Java 中的JSch 函式庫執行某些Unix 指令時,使用者可能會遇到無法找到命令的錯誤。
理解問題
與互動式 SSH 客戶端不同,JSch 的「exec」通道不會指派偽預設為終端 (PTY)。與互動式會話相比,環境的這種差異可能會導致啟動腳本執行和路徑設定不同。因此,依賴特定環境變數的命令可能會失敗。
確定根本原因
要確認根本原因,請在 SSH 用戶端中停用 PTY 分配並嘗試手動執行命令。如果您遇到相同的「未找到」錯誤,則表示互動式會話和非互動式會話之間的 PATH 環境變數不同。
解決方案
解決此問題,依優先順序考慮以下解決方案:
1.執行檔案的路徑
2.調整啟動腳本以一致地設定PATH
確保遠端伺服器上的啟動腳本中的互動式和非互動式會話的PATH 設定相同。
3.使用登入shell 執行指令
在指令前面加上「bash --login -c」以透過登入shell 明確地執行它,這通常會設定一致的環境:
4。直接在指令中設定環境變數
對於嚴重依賴特定環境設定的指令,請考慮直接在指令中設定變數:
5.強制PTY分配(不建議)
作為最後的手段,您可以使用.setPty(true) 強制為「exec」通道分配PTY。但是,這種方法可能會帶來不必要的副作用。
有關其他見解和類似問題,請參閱以下資源:
以上是為什麼在 Java 中透過 JSch 執行 Unix 指令時會失敗並出現「Not Found」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!