Видеть «Сломанную трубу» в этой ситуации редко, но нормально.
Когда вы запускаете type rvm | head -1, bash выполняется type rvmв одном процессе, head -1в другом. 1 стандартный вывод из typeподключен к «записи» конец трубы , то из стандартного ввода headк «читать» конец. Оба процесса выполняются одновременно.
head -1Процесс считывает данные из стандартного ввода (обычно в куски 8 КБ), вывести в одной строке ( в соответствии с -1параметром), и выходы, в результате чего «читать» конец трубы должен быть закрыт. Поскольку rvmфункция довольно длинная (около 11 кБ после анализа и восстановления bash), это означает, что headпри выходе typeвсе еще остается несколько кБ данных для записи.
На этом этапе, поскольку typeон пытается выполнить запись в канал, чей другой конец был закрыт - сломанный канал, - функция write (), которую он вызвал, вернет ошибку EPIPE, переведенную как «Broken pipe». В дополнение к этой ошибке ядро также отправляет сигнал SIGPIPE type, который по умолчанию немедленно завершает процесс.
(Сигнал очень полезен в интерактивных оболочках, так как большинство пользователей не хотят, чтобы первый процесс продолжал выполняться и пытался писать в никуда. Между тем, неинтерактивные службы игнорируют SIGPIPE - это не будет хорошо для долго работающего демона, чтобы умереть от такой простой ошибки - поэтому они находят код ошибки очень полезным.)
Однако доставка сигнала не происходит на 100% немедленно, и могут быть случаи, когда write () возвращает EPIPE, и процесс продолжает работать некоторое время до получения сигнала. В этом случае у вас typeбудет достаточно времени, чтобы заметить неудачную запись, перевести код ошибки и даже напечатать сообщение об ошибке в stderr, прежде чем SIGPIPE прекратит его. (В сообщении об ошибке указано «-bash: type:», поскольку typeэто встроенная команда самого bash.)
Похоже, что это чаще встречается в многопроцессорных системах, поскольку typeпроцесс и код доставки сигнала ядра могут работать на разных ядрах, буквально одновременно.
Можно было бы удалить это сообщение, исправив typeвстроенную функцию (в исходном коде bash) для немедленного выхода при получении EPIPE от функции write ().
Тем не менее, это не о чем беспокоиться, и это никак не связано с вашей rvmустановкой.