Чтобы объяснить вашу проблему с трубой:
Давайте разобьем его на более мелкие части:
$ cat <<< "abc"--> Эта команда передает строку "abc" на стандартный ввод команды слева, то естьcat.
| tee > (> /dev/null)--> Командаteeполучает ввод от командыcatпутем чтения стандартного ввода, передает файл -вывода в /dev/null, а затем записывает строку «abc» в стандартный вывод.
| пока читал я; сделать эхо "$i"; done--> Команда read считывает строку «abc» из стандартного ввода и сохраняет строку «abc» в переменнойi , а затем ваш цикл печатает содержимоеiэто строка "abc" -и только один раз.
Командаteeничего не выводит на терминал, потому что ее вывод передается командеread .
Вы можете попробовать вместо этого записать стандартный вывод в файл.
user@host:~$ cat <<< "abc"| tee file_name.txt | while read i; do echo $i >> file_name.txt; done; cat file_name.txt