Java 経由で実行すると JSch ユーザー コマンドが「... 見つかりません」で失敗する
問題:
SSH クライアント経由で直接実行するとコマンドが正しく機能するにもかかわらず、JSch ライブラリを使用して Java 経由で特定の Unix コマンドを実行しようとすると、「... 見つかりません」エラーが発生します。
考えられる理由:
-
擬似端末の割り当て: JSch の「exec」チャネルはデフォルトで擬似端末 (PTY) を割り当てないため、別の環境セットアップとシェル スクリプトが不足している可能性があります。
-
PATH の変更: PATH 環境変数は、対話型セッションと非対話型セッションで異なるように設定される可能性があり、実行可能ファイルが使用できなくなることがあります。
解決策:
推奨:
-
フルパス コマンド: フルパスを使用して、コマンド内の実行可能ファイル (例: /bin/air Sandbox run )。
-
起動スクリプトの調整: 起動スクリプトを変更して、対話型と非対話型の両方で一貫した PATH 設定を確保します。 -interactive session.
代替アプローチ:
-
ログイン シェル呼び出し: 次を使用して、ログイン シェルを介してコマンドを明示的に実行します。 --login スイッチ。
-
環境の変更: コマンド自体内で必要な環境変数を設定します。例: PATH="$PATH;/path/to/air" && air Sandbox run .
-
PTY の有効化 (非推奨): 可能ですが、「exec」チャネルに PTY を強制的に割り当てると、サイドエラーが発生する可能性があります。エフェクト。
関連問題:
- [setPty が有効であっても、特定の Unix コマンドが「... 見つかりません」で失敗する](https ://stackoverflow.com/questions/34846613/certain-unix-commands-fail-with-not-found-when-executed-through-java-using-jsch-ev)
- [SSH で実行されたコマンド.NET SshClient.RunCommand が「そのようなファイルまたはディレクトリはありません」で失敗する]https://stackoverflow.com/questions/19774736/command-4gl-executed-with-ssh-net-sshclient-runcommand-fails-with-no- such -file-o)
以上がJava 経由で JSch ユーザー コマンドを実行すると、「見つかりません」というメッセージが表示されて失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。