Arahan Unix Gagal dengan Ralat "Tidak Ditemui" Apabila Dilaksanakan Melalui JSch dalam Java
Apabila menjalankan perintah Unix melalui Java menggunakan JSch, arahan tertentu mungkin gagal dengan ralat "tidak dijumpai". Ini boleh berlaku disebabkan oleh pelbagai faktor yang berkaitan dengan pembolehubah persekitaran dan skrip permulaan shell.
Memahami Isu:
Saluran "exec" dalam JSch biasanya tidak memperuntukkan pseudo terminal (PTY), yang boleh membawa kepada perbezaan dalam tetapan persekitaran berbanding sesi SSH interaktif. Akibatnya, pembolehubah persekitaran penting, seperti pembolehubah PATH, mungkin tidak ditetapkan dengan sewajarnya untuk perintah itu dilaksanakan dengan jayanya.
Punca Kemungkinan:
- Pembolehubah persekitaran PATH ditetapkan secara berbeza untuk sesi interaktif dan bukan interaktif, menyebabkan udara boleh laku tidak berada.
- Skrip permulaan mungkin mengandungi logik yang berbeza berdasarkan ketersediaan pembolehubah persekitaran TERM, yang tidak ditetapkan dalam sesi bukan interaktif.
Pilihan Penyelesaian:
-
Nyatakan Laluan Penuh:
Gunakan laluan penuh ke udara boleh laku dalam arahan untuk mengelakkan bergantung pada pembolehubah persekitaran PATH.
-
Betulkan Skrip Permulaan:
Ubah suai skrip permulaan untuk memastikan PATH ditetapkan sama untuk kedua-dua interaktif dan sesi bukan interaktif.
-
Jalankan dengan Log Masuk Shell:
Laksanakan arahan menggunakan shell log masuk, seperti bash --login, yang memastikan persediaan persekitaran yang betul.
-
Tetapkan Pembolehubah Persekitaran dalam Perintah:
Ubah suai perintah untuk menetapkan pembolehubah persekitaran PATH secara eksplisit sebelum melaksanakan arahan udara.
-
Dayakan Peruntukan PTY:
Paksa peruntukan terminal pseudo menggunakan kaedah .setPty dalam saluran "exec". Walau bagaimanapun, pendekatan ini tidak disyorkan kerana kemungkinan kesan sampingan.
Isu Penyelesaian Masalah Serupa:
- Arahan Unix tertentu gagal dengan "tidak ditemui" ralat walaupun dengan peruntukan PTY didayakan
- Perintah yang dilaksanakan menggunakan JSch berbeza dalam tingkah laku berbanding terminal SSH
- Mendedahkan pembolehubah persekitaran pengguna kepada saluran "exec"
- Kegagalan pelaksanaan perintah dengan " Tiada fail atau direktori sedemikian" menggunakan SSH.NET
Atas ialah kandungan terperinci Mengapa Perintah Unix Gagal dengan Ralat 'Tidak Ditemui' Apabila Dilaksanakan Melalui JSch di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!