Melihat "Pipa rusak" dalam situasi ini jarang terjadi, tetapi normal.
Saat Anda menjalankan type rvm | head -1, bash dieksekusi type rvmdalam satu proses, head -1dalam proses lainnya. 1 Stdout of typeterhubung ke ujung "tulis" pipa , stdin dari headke ujung "baca". Kedua proses berjalan pada saat bersamaan.
The head -1proses membaca data dari stdin (biasanya dalam potongan 8 kB), print satu baris (menurut -1pilihan), dan keluar, menyebabkan "membaca" ujung pipa harus ditutup. Karena rvmfungsinya cukup panjang (sekitar 11 kB setelah diuraikan dan direkonstruksi oleh bash), ini berarti headkeluar sementara typemasih memiliki beberapa kB data untuk ditulis.
Pada titik ini, karena typesedang 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, typedapatkan 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 typemerupakan perintah built-in dari bash itu sendiri.)
Ini tampaknya lebih umum pada sistem multi-CPU, karena typeproses dan kode pengiriman sinyal kernel dapat berjalan pada core yang berbeda, secara harfiah pada saat yang sama.
Mungkin untuk menghapus pesan ini dengan menambal typebuiltin (dalam kode sumber bash) untuk segera keluar ketika menerima EPIPE dari fungsi write ().
Namun, tidak ada yang perlu dikhawatirkan, dan itu tidak terkait dengan rvminstalasi Anda dengan cara apa pun.