首頁  >  文章  >  Java  >  為什麼在 Java 中透過 JSch 執行 Unix 指令時會失敗並出現「Not Found」錯誤?

為什麼在 Java 中透過 JSch 執行 Unix 指令時會失敗並出現「Not Found」錯誤?

Patricia Arquette
Patricia Arquette原創
2024-11-12 00:33:02944瀏覽

Why do Unix commands fail with

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。但是,這種方法可能會帶來不必要的副作用。

有關其他見解和類似問題,請參閱以下資源:

  • 某些Unix 指令失敗並顯示「...未找到」 ,當使用JSch 透過Java 執行時,即使啟用了setPty
  • 使用JSch 執行的命令的行為與SSH 終端中不同(繞過“是/”否”的確認提示訊息)
  • JSch:是否存在向“exec”通道公開使用者環境變數的方法?

以上是為什麼在 Java 中透過 JSch 執行 Unix 指令時會失敗並出現「Not Found」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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