Почему следующее не работает?
exec 3<|cat $0
Идея состоит в том, чтобы получить дескриптор файла (3) из канала (| кошка 0$).
Вы не можете смешивать exec и конвейеры таким образом. Похоже, вам нужна замена процесса:
$ exec 3< <(cat /etc/hosts)
$ grep ftp <&3
209.85.41.143 ftp.archlinux.org
exec 3<>$0
while read -u 3 line;
do
grep ftp $line;
done
exec 3>&-;