Arahan Unix tertentu Gagal dengan Ralat "Command Not Found" Apabila Dilaksanakan melalui Java Menggunakan JSch
Isu ini timbul apabila melaksanakan arahan Unix melalui Java menggunakan perpustakaan JSch. Apabila arahan seperti "air not found" gagal, walaupun berfungsi dalam klien SSH, siasatan lanjut adalah wajar.
Punca Punca:
Tidak seperti sesi SSH interaktif, saluran "exec" dalam JSch tidak memperuntukkan pseudo-terminal. Ini boleh menyebabkan set skrip permulaan yang berbeza dilaksanakan, yang membawa kepada persekitaran yang berbeza. Dalam kes ini, pembolehubah persekitaran PATH mungkin ditetapkan secara berbeza, menyebabkan boleh laku "udara" tidak tersedia.
Penyelesaian:
Terdapat beberapa kaedah untuk menangani perkara ini isu, mengikut keutamaan:
-
Laluan Penuh Pelaksanaan:
Gunakan laluan penuh kepada boleh laku dalam arahan, menghapuskan pergantungan pada persekitaran.
-
Pengubahsuaian Skrip Permulaan:
Laraskan skrip permulaan untuk menetapkan PATH secara konsisten untuk kedua-dua interaktif dan tidak interaktif sesi.
-
Pelaksanaan Shell Log Masuk:
Jalankan arahan secara eksplisit melalui cangkerang log masuk, menggunakan suis --log masuk.
-
Pengubahsuaian Persekitaran:
Tukar persekitaran dalam arahan itu sendiri untuk menetapkan PATH yang diperlukan dan/atau lain-lain pembolehubah.
-
Peruntukan Pseudo-Terminal Paksa:
(Tidak disyorkan) Paksa peruntukan pseudo-terminal untuk saluran "exec" menggunakan setPty(true), tetapi ketahui tentang sisi yang berpotensi kesan.
Berkaitan Isu:
Isu lain yang serupa telah ditemui dan dibincangkan dalam sumber berikut:
- Arahan Unix tertentu gagal dengan "... tidak dijumpai", apabila dilaksanakan melalui Java menggunakan JSch walaupun dengan setPty didayakan
- Perintah yang dilaksanakan menggunakan JSch berkelakuan berbeza daripada di terminal SSH (pintasan mengesahkan mesej gesaan "ya/"tidak")
- JSch: Adakah terdapat cara untuk mendedahkan pembolehubah persekitaran pengguna kepada saluran "exec"?
- Arahan (.4gl) dilaksanakan dengan SSH .NET SshClient.RunCommand gagal dengan "Tiada fail atau direktori sedemikian"
Atas ialah kandungan terperinci Mengapa Perintah Unix Tertentu Gagal dengan 'Perintah Tidak Ditemui' Apabila Dilaksanakan melalui Java Menggunakan JSch?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!