Java で JSch 経由で実行すると Unix コマンドが「見つかりません」エラーで失敗する
JSch を使用して Java 経由で Unix コマンドを実行すると、特定のコマンド「見つからない」エラーで失敗する可能性があります。これは、環境変数やシェル初期化スクリプトに関連するさまざまな要因が原因で発生する可能性があります。
問題の理解:
JSch の「exec」チャネルは通常、擬似端末 (PTY)。これにより、対話型 SSH セッションと比較して環境設定に違いが生じる可能性があります。その結果、PATH 変数などの必須の環境変数が、コマンドを正常に実行するために適切に設定されない可能性があります。
考えられる原因:
- PATH 環境変数の設定が対話型セッションと非対話型セッションで異なるため、air 実行可能ファイルが見つからなくなります。
- 起動スクリプトには、TERM 環境変数の可用性に基づいて異なるロジックが含まれる場合がありますが、これは TERM 環境変数が設定されていないためです。非対話型セッション。
ソリューション オプション:
-
フル パスの指定:
フル パスを使用するPATH 環境変数への依存を避けるために、コマンド内の air 実行可能ファイルに追加します。
-
起動スクリプトの修正:
起動スクリプトを変更して、両方の対話型で PATH が同じに設定されるようにします。
-
ログイン シェルで実行:
bash --login などのログイン シェルを使用してコマンドを実行します。これにより、環境が適切にセットアップされます。
-
コマンドで環境変数を設定します:
air コマンドを実行する前に PATH 環境変数を明示的に設定するようにコマンドを変更します。
-
PTY 割り当てを有効にする:
「exec」チャネルの .setPty メソッドを使用して、擬似端末の割り当てを強制します。ただし、この方法は潜在的な副作用があるため推奨されません。
同様のトラブルシューティングの問題:
- 特定の Unix コマンドが「見つかりません」で失敗するPTY 割り当てが有効でもエラー
- JSch を使用して実行されるコマンドは、SSH 端末と比較して動作が異なります
- ユーザー環境変数を「exec」チャネルに公開します
- 「」でコマンド実行が失敗するそのようなファイルまたはディレクトリはありません」 SSH.NET
を使用
以上がJava の JSch 経由で Unix コマンドを実行すると「見つかりません」エラーが発生して失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。