首頁 >Java >java教程 >為什麼使用 JSch 透過 Java 執行某些 Unix 命令時會失敗並顯示「未找到命令」?

為什麼使用 JSch 透過 Java 執行某些 Unix 命令時會失敗並顯示「未找到命令」?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-28 02:42:11201瀏覽

Why Do Certain Unix Commands Fail with

使用JSch 透過Java 執行時,某些Unix 指令失敗並出現「找不到指令」錯誤

透過Java 執行Unix 指令時會出現此問題使用JSch 庫。當「air not find」之類的命令失敗時,儘管在 SSH 用戶端中工作,仍需要進一步調查。

根本原因:

與互動式 SSH 會話不同, JSch 中的「exec」通道不分配偽終端。這可能會導致執行一組不同的啟動腳本,從而導致不同的環境。在這種情況下,PATH環境變數可能設定不同,導致「air」可執行檔不可用。

解決方案:

有多種方法可以解決此問題問題,按優先順序排列:

  1. 完整路徑執行:
    在指令中使用執行檔的完整路徑,消除對環境的依賴。
  2. 啟動腳本修改:
    調整啟動腳本設定互動式和非互動式會話的 PATH 一致。
  3. 登入 Shell執行:
    使用 --login 開關透過登入 shell 明確執行指令。
  4. 環境修改:
    將指令本身的環境改為設定必要的 PATH 和/或其他變數。
  5. 強制偽終端分配:
    (不建議)使用 setPty(true) 強制為「exec」通道進行偽終端分配,但要注意潛在的副作用。

相關問題:

其他類似問題已經遇到並在下面討論資源:

  • 當使用JSch 透過Java執行時,即使啟用了setPty,某些Unix命令也會失敗,並顯示「...未找到」
  • 使用JSch 執行的命令的行為與SSH 終端中的行為不同(繞過「是/」否」的確認提示訊息)
  • JSch:有沒有辦法將使用者環境變數揭露給「exec」頻道? (.4gl) 失敗,並顯示「沒有此類檔案或目錄」

以上是為什麼使用 JSch 透過 Java 執行某些 Unix 命令時會失敗並顯示「未找到命令」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn