penggunaan </ dev / null & di baris perintah

12

Saya mencoba menjalankan contoh program java menggunakan baris perintah berikut. Namun, saya tidak tahu untuk apa trailing part < /dev/null &digunakan?

java   -cp  /home/weka.jar weka.classifiers.trees.J48 t train_file  >& log < /dev/null &
pengguna297850
sumber

Jawaban:

21

< /dev/nulldigunakan untuk langsung mengirim EOF ke program, sehingga tidak menunggu input ( /dev/null, perangkat nol, adalah file khusus yang membuang semua data yang ditulis padanya, tetapi melaporkan bahwa operasi penulisan berhasil, dan tidak menyediakan data untuk setiap proses yang membacanya, menghasilkan EOF segera). &adalah jenis khusus pemisah perintah yang digunakan untuk latar belakang proses sebelumnya.

Tanpa mengetahui program yang dipanggil, saya tidak langsung tahu mengapa harus menjalankannya dengan cara ini.

Chris Down
sumber
6

</dev/nullmemutus input program dari terminal. Beberapa program bereaksi berbeda tergantung pada apa input standar mereka terhubung. Dengan pengalihan </dev/null, program dapat mengetahui bahwa inputnya tidak berasal dari terminal, dan akan segera menerima indikasi akhir file jika mencoba membaca dari input standarnya.

Satu-satunya &di akhir menyebabkan program dieksekusi di latar belakang. Ini berarti Anda mendapatkan prompt shell segera kembali. Tanpa &, Anda akan mendapatkan shell prompt kembali hanya ketika program selesai dijalankan.

Perhatikan bahwa standalone &tidak terkait dengan >&. >&adalah operator pengalihan (dalam tcsh, bash dan zsh) yang mengarahkan ulang output standar program dan kesalahan standar program ke nama file yang ditentukan setelah operator (di sini log).

Dengan kata lain, apa yang dilakukan shell ketika ia melihat baris perintah ini adalah:

  • Mulai proses di latar belakang. Dalam proses latar belakang:
    • Hubungkan input standar ke /dev/null( perangkat nol ).
    • Hubungkan output standar dan kesalahan standar ke file yang dipanggil log(membuat file jika belum ada, dan memotongnya jika ada).
    • Cari file yang dapat dieksekusi yang disebut javadi $PATH.
    • Jalankan file yang dengan 5 argumen -cp, /home/weka.jar, weka.classifiers.trees.J48, –t, train_file`.
Gilles 'SANGAT berhenti menjadi jahat'
sumber