Cukup sederhana untuk menjalankan perintah Unix dari Java.
Runtime.getRuntime().exec(myCommand);
Tetapi apakah mungkin untuk menjalankan skrip shell Unix dari kode Java? Jika ya, apakah itu praktik yang baik untuk menjalankan skrip shell dari dalam kode Java?
Jawaban:
Anda harus benar-benar melihat Process Builder . Itu benar-benar dibangun untuk hal semacam ini.
sumber
Anda dapat menggunakan pustaka Apache Commons exec juga.
Contoh:
Untuk referensi lebih lanjut, Contoh diberikan pada Apache Doc juga.
sumber
OutputStream
untukDefaultExecuter
menggunakanDefaultExecuter.setStreamHandler
metode untuk menangkap keluaranOutputStream
. Silakan merujuk utas ini untuk info lebih lanjut: Bagaimana saya bisa menangkap output dari perintah ...Saya akan mengatakan bahwa itu tidak benar semangat Jawa untuk menjalankan skrip shell dari Jawa. Java dimaksudkan untuk lintas platform, dan menjalankan skrip shell akan membatasi penggunaannya hanya untuk UNIX.
Dengan itu, sangat mungkin untuk menjalankan skrip shell dari dalam Java. Anda akan menggunakan sintaks yang persis sama dengan yang Anda daftarkan (saya belum mencobanya sendiri, tetapi coba jalankan skrip shell secara langsung, dan jika itu tidak berhasil, jalankan shell itu sendiri, berikan skrip sebagai parameter baris perintah) .
sumber
switches
danif
pernyataan untuk mengatasi semua nuansa yang tidak bekerja persis sama pada platform yang berbeda meskipun upaya terbaik dari orang-orang yang datang dengan perpustakaan inti java.Saya pikir Anda telah menjawab pertanyaan Anda sendiri
Seperti apakah itu praktik yang baik ... apa yang Anda coba lakukan dengan skrip shell yang tidak dapat Anda lakukan dengan Java?
sumber
Ya itu mungkin untuk dilakukan. Ini berhasil bagi saya.
sumber
Ini contoh saya. Semoga ini masuk akal.
sumber
Ya, itu mungkin dan Anda telah menjawabnya! Tentang praktik yang baik, saya pikir lebih baik untuk meluncurkan perintah dari file dan tidak langsung dari kode Anda. Jadi, Anda harus membuat Java mengeksekusi daftar perintah (atau satu perintah) dalam yang ada
.bat
,.sh
,.ksh
... file. Berikut adalah contoh mengeksekusi daftar perintah dalam fileMyFile.sh
:sumber
Untuk menghindari hardcode jalur absolut, Anda dapat menggunakan metode berikut yang akan menemukan dan mengeksekusi skrip Anda jika ada di direktori root Anda.
sumber
Bagi saya semua hal harus sederhana. Untuk menjalankan skrip hanya perlu dijalankan
sumber
The Proses ZT Pelaksana perpustakaan adalah sebuah alternatif untuk Apache Commons Exec. Ini memiliki fungsionalitas untuk menjalankan perintah, menangkap outputnya, mengatur batas waktu, dll.
Saya belum menggunakannya, tetapi terlihat cukup terdokumentasi dengan baik.
Contoh dari dokumentasi: Menjalankan perintah, memompa stderr ke logger, mengembalikan output sebagai string UTF8.
Dokumentasinya mencantumkan keunggulan berikut di atas Commons Exec:
sumber
Berikut adalah contoh cara menjalankan skrip Unix bash atau Windows bat / cmd dari Java. Argumen dapat disampaikan pada skrip dan output yang diterima dari skrip. Metode ini menerima sejumlah argumen yang berubah-ubah.
Saat berjalan di Unix / Linux, lintasan harus seperti Unix (dengan '/' sebagai pemisah), saat dijalankan di Windows - gunakan '\'. Hier adalah contoh skrip bash (test.sh) yang menerima jumlah argumen sembarang dan menggandakan setiap argumen:
Saat menelepon
pada Unix / Linux, hasilnya adalah:
Hier adalah cmd Windows script test.cmd sederhana yang menghitung jumlah argumen input:
Saat memanggil skrip di Windows
Outputnya adalah
sumber
Mungkin saja, jalankan saja seperti program lainnya. Pastikan skrip Anda memiliki # yang tepat! (she-bang) baris sebagai baris pertama skrip, dan pastikan ada hak akses pada file tersebut.
Misalnya, jika skrip bash meletakkan #! / Bin / bash di bagian atas skrip, juga chmod + x.
Juga jika itu adalah praktik yang baik, tidak itu tidak, terutama untuk Jawa, tetapi jika itu menghemat banyak waktu Anda porting skrip besar, dan Anda tidak dibayar ekstra untuk melakukannya;) menghemat waktu Anda, eksekutif skrip, dan letakkan porting ke Jawa pada daftar todo jangka panjang Anda.
sumber
sumber
Ini jawaban yang terlambat. Namun, saya berpikir untuk menempatkan perjuangan yang harus saya tanggung untuk mendapatkan skrip shell yang akan dieksekusi dari aplikasi Spring-Boot untuk pengembang masa depan.
Saya bekerja di Spring-Boot dan saya tidak dapat menemukan file yang akan dieksekusi dari aplikasi Java saya dan itu melempar
FileNotFoundFoundException
. Saya harus menyimpan file diresources
direktori dan harus mengatur file yang akan dipindaipom.xml
ketika aplikasi sedang dijalankan seperti berikut.error code = 13, Permission Denied
. Kemudian saya harus membuat file dapat dieksekusi dengan menjalankan perintah ini -chmod u+x myShellScript.sh
Akhirnya, saya bisa menjalankan file menggunakan potongan kode berikut.
Semoga itu bisa menyelesaikan masalah seseorang.
sumber
Sama seperti Solaris 5.10 berfungsi seperti ini,
./batchstart.sh
ada trik yang saya tidak tahu apakah OS Anda menerimanya sebagai\\. batchstart.sh
gantinya. Slash ganda ini dapat membantu.sumber
Saya pikir dengan
Memeriksa sistem operasi aktif dapat mengelola skrip shell / bash jika didukung. jika perlu untuk membuat kode portabel.
sumber
untuk penggunaan linux
dan untuk penggunaan;
ATAU
sumber