Perintah bash non-blocking

11

Katakanlah saya memiliki skrip bash dengan yang berikut ini:

#!/bin/sh
gedit
rm *.temp

Ketika saya menjalankannya menggunakan sh ./test.sh, geditmuncul tetapi rmbagian tidak berjalan sampai setelah saya menutup gedit.

Saya ingin skrip terus berjalan walaupun gedittidak ditutup; seperti gedittidak memblokir eksekusi bash.

Contoh yang saya berikan hanyalah contoh (menempatkan yang rmpertama tidak akan berfungsi dalam situasi nyata).

Plante
sumber

Jawaban:

25

Istilah yang Anda cari disebut "latar belakang" pekerjaan. Saat Anda menjalankan perintah di shell atau skrip, Anda dapat menambahkan bendera di bagian akhir untuk mengirimnya ke latar belakang dan melanjutkan menjalankan perintah baru atau skrip lainnya. Dalam kebanyakan shell termasuk sh, ini adalah &karakternya.

#!/bin/sh
gedit &
rm ./*.temp

Dengan begitu, shell tidak menunggu penghentian geditdan keduanya rmdan geditakan berjalan bersamaan.

Istilah "pemblokiran" biasanya berkaitan dengan aliran input / output, seringkali ke file atau perangkat. Ini juga digunakan dalam bahasa yang dikompilasi dalam sesuatu yang mirip dengan pengertian yang Anda gunakan, tetapi dalam bash dan skrip shell yang serupa, terminologi (dan fungsi!) Agak berbeda.

Caleb
sumber
Terima kasih! itu menjelaskan mengapa saya hanya mendapatkan hasil fifo dan input di google: D
Plante
Kesan saya adalah, bahwa Plante ingin memengaruhi skrip dari luar, untuk melakukan setiap operasi di latar belakang, bukan untuk menulis ulang skrip.
pengguna tidak diketahui
@ Pengguna: Butuh beberapa pasangan membaca untuk menebak apa yang dia inginkan. Mungkin Anda bisa mengomentari pertanyaan untuk klarifikasi.
Caleb
Itulah yang saya butuhkan, terima kasih lagi. bekerja sangat baik sejauh ini!
Plante