JSch を使用して Java 経由で Unix コマンドを実行するときの「コマンドが見つかりません」エラーのトラブルシューティング
問題:
使用している Java コードJSch は、「コマンドが見つかりません」エラーで特定の Unix コマンドの実行に失敗します。他の単純なコマンドを正常に実行できること。具体的には、「air Sandbox run」コマンドを使用して Java 経由で Ab-initio グラフを実行すると、エラーが発生します。
考えられる原因:
JSch "exec" チャネルはデフォルトでは擬似端末 (PTY) が割り当てられないため、異なる起動スクリプトのセットが取得されるか、スクリプトの異なる分岐が、 TERM 環境変数。その結果、環境が対話型 SSH セッションとは異なる可能性があり、PATH の問題が発生する可能性があります。
解決策:
-
コマンドを修正します: PATH 環境への依存を回避するには、コマンド文字列で「air」実行可能ファイルへのフルパスを使用します。変数。
-
起動スクリプトを修正します: 起動スクリプトが対話型セッションと非対話型セッションの両方で同じ PATH を設定していることを確認します。
-
ログイン シェルを使用します: ログイン シェル (「--login」スイッチを使用) でコマンドを実行し、現在のユーザーの情報を継承します。環境。
-
環境を変更します。 コマンド文字列内の PATH 環境変数を変更して、「air」実行可能ファイルへのパスを含めます。
-
PTY 割り当てを強制する(推奨されません): setPty(true) メソッドを使用して、「exec」チャネルの疑似端末割り当てを有効にします。ただし、これにより、予期しない結果や副作用が生じる可能性があります。
追加メモ:
- SSH クライアントで擬似端末割り当てを無効にすると、再現される可能性があります。エラー。
- 他の同様の問題には、JSch と SSH 端末でコマンドの動作が異なることや、ユーザー環境変数を「exec」チャネルに公開するのが困難です。
以上がUnix コマンドの実行時に JSch が「コマンドが見つかりません」エラーをスローするのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。