Fungsi kembali, tetapi substitusi perintah blok, karena Anda membuat pekerjaan latar belakang, tetapi Anda masih memiliki stdout Anda dibuka. Tutup saja dengan menambahkan >/dev/null
sebelum &
.
#!/bin/bash
function start {
leafpad >/dev/null &
echo $!
}
PID=$(start)
echo "PID is $PID"
Jika Anda ingin proses Anda juga memiliki stdin, stdout, stderr ditutup, gunakan ini:
leafpad >/dev/null 0>&1 2>&1 &
Ini akan menutup stdin (0), stdout (1), dan stderr (2), lalu latar belakang (&). Juga, ketika menggunakan pengalihan aliran ini jangan lupa mereka "ditipu", itu berarti digandakan dalam urutan eksekusi.
1>/dev/null 2>&1
dan
2>&1 1>/dev/null
tidak sama ! Di yang pertama, Anda menduplikasi aliran ke / dev / null (yang Anda inginkan), di yang terakhir, Anda menduplikasi / dev / stdout ke stderr, dan kemudian, menutup stdout. Jadi setiap pesan yang dikirim ke stderr
akan muncul di konsol Anda.