Melihat "Pipa rusak" dalam situasi ini jarang terjadi, tetapi normal.
Saat Anda menjalankan type rvm | head -1
, bash dieksekusi type rvm
dalam satu proses, head -1
dalam proses lainnya. 1 Stdout of type
terhubung ke ujung "tulis" pipa , stdin dari head
ke ujung "baca". Kedua proses berjalan pada saat bersamaan.
The head -1
proses membaca data dari stdin (biasanya dalam potongan 8 kB), print satu baris (menurut -1
pilihan), dan keluar, menyebabkan "membaca" ujung pipa harus ditutup. Karena rvm
fungsinya cukup panjang (sekitar 11 kB setelah diuraikan dan direkonstruksi oleh bash), ini berarti head
keluar sementara type
masih memiliki beberapa kB data untuk ditulis.
Pada titik ini, karena type
sedang mencoba untuk menulis ke pipa yang ujungnya telah ditutup - pipa yang rusak - fungsi write () yang akan mengembalikan kesalahan EPIPE, diterjemahkan sebagai "Pipa rusak". Selain kesalahan ini, kernel juga mengirimkan sinyal SIGPIPE ke type
, yang secara default membunuh proses segera.
(Sinyal ini sangat berguna dalam shell interaktif, karena sebagian besar pengguna tidak ingin proses pertama tetap berjalan dan mencoba menulis ke mana-mana. Sementara itu, layanan non-interaktif mengabaikan SIGPIPE - itu tidak akan baik untuk daemon yang sudah berjalan lama untuk mati karena kesalahan sederhana - sehingga mereka menemukan kode kesalahan sangat berguna.)
Namun, pengiriman sinyal tidak 100% langsung, dan mungkin ada kasus di mana write () mengembalikan EPIPE dan proses terus berjalan untuk sementara waktu sebelum menerima sinyal. Dalam hal ini, type
dapatkan waktu yang cukup untuk memperhatikan penulisan yang gagal, menerjemahkan kode kesalahan dan bahkan mencetak pesan kesalahan ke stderr sebelum dibunuh oleh SIGPIPE. (Pesan kesalahan mengatakan "-bash: type:" karena type
merupakan perintah built-in dari bash itu sendiri.)
Ini tampaknya lebih umum pada sistem multi-CPU, karena type
proses dan kode pengiriman sinyal kernel dapat berjalan pada core yang berbeda, secara harfiah pada saat yang sama.
Mungkin untuk menghapus pesan ini dengan menambal type
builtin (dalam kode sumber bash) untuk segera keluar ketika menerima EPIPE dari fungsi write ().
Namun, tidak ada yang perlu dikhawatirkan, dan itu tidak terkait dengan rvm
instalasi Anda dengan cara apa pun.