Arahan Unix Gagal Melaksanakan dengan Ralat "Tidak Ditemui" melalui JSch
Apabila cuba melaksanakan arahan Unix tertentu melalui perpustakaan JSch di Java, pengguna mungkin menghadapi ralat yang menyatakan bahawa arahan itu tidak boleh dijumpai.
Memahami Masalah
Tidak seperti klien SSH interaktif, saluran "exec" JSch tidak memperuntukkan terminal pseudo (PTY) secara lalai. Perbezaan dalam persekitaran ini boleh membawa kepada pelaksanaan skrip permulaan yang berbeza-beza dan persediaan PATH berbanding sesi interaktif. Akibatnya, arahan yang bergantung pada pembolehubah persekitaran tertentu mungkin gagal.
Mengenalpasti Punca Punca
Untuk mengesahkan punca, lumpuhkan peruntukan PTY dalam klien SSH anda dan cuba untuk laksanakan arahan secara manual. Jika anda menghadapi ralat "tidak ditemui" yang sama, ini menunjukkan bahawa pembolehubah persekitaran PATH berbeza antara sesi interaktif dan tidak interaktif.
Penyelesaian
Untuk menangani isu ini , pertimbangkan penyelesaian berikut mengikut keutamaan:
1. Ubah suai Perintah untuk Menentukan Laluan ke Boleh Laksana dengan Eksplisit
String command = "/bin/air sandbox run <graph-path>";
2. Laraskan Skrip Permulaan untuk Menetapkan PATH Secara Konsisten
Pastikan PATH ditetapkan secara sama untuk kedua-dua sesi interaktif dan tidak interaktif dalam skrip permulaan pada pelayan jauh.
3. Gunakan Shell Log Masuk untuk Menjalankan Perintah
Sediakan arahan dengan "bash --login -c" untuk menjalankannya secara eksplisit melalui shell log masuk, yang biasanya menetapkan persekitaran yang konsisten:
String command = "bash --login -c \"air sandbox run <graph-path>\"";
4. Tetapkan Pembolehubah Persekitaran Secara Terus dalam Perintah
Untuk arahan yang sangat bergantung pada persediaan persekitaran tertentu, pertimbangkan untuk menetapkan pembolehubah terus dalam arahan:
String command = "PATH=\"$PATH;/path/to/air\" && air sandbox run <graph-path>";
5. Peruntukan PTY Paksa (Tidak Disyorkan)
Sebagai langkah terakhir, anda boleh memaksa peruntukan PTY untuk saluran "exec" menggunakan .setPty(true). Walau bagaimanapun, pendekatan ini boleh memperkenalkan kesan sampingan yang tidak diingini.
Untuk mendapatkan cerapan tambahan dan isu serupa, rujuk sumber berikut:
Atas ialah kandungan terperinci Mengapa arahan Unix gagal dengan ralat 'Tidak Ditemui' semasa melaksanakannya melalui JSch di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!