TL; DR: (bash ve zsh)
$ cmd 2> >(stderr-filter >&2)
Misal:
% cat /non-existant 2> >(tr o X >&2)
cat: /nXn-existant: NX such file Xr directXry
%
StackExchange ağındaki birçok yanıt şu biçime sahiptir:
cat /non-existant 3>&1 1>&2 2>&3 3>&- | sed 's/e/E/g'
Bunun yerleşik bir varsayımı vardır: bu dosya tanımlayıcısı 3 başka bir şey için kullanılmıyor.
Bunun yerine, adlandırılmış bir dosya tanımlayıcı kullanın ve bir {ba,z}shsonraki kullanılabilir dosya tanımlayıcısını> = 10 ayırın:
cat /non-existant {tmp}>&1 1>&2 2>&$tmp {tmp}>&- | sed 's/e/E/g'
Adlandırılmış dosya tanımlayıcılarının POSIX tarafından desteklenmediğini unutmayın sh.
Yukarıdakilerle ilgili diğer sorun, komutun STDOUT ve STDERR'ı orijinal değerlerine geri döndürmeden başka komutlara aktarılamamasıdır.
POSIX'te ileriye doğru borulamaya izin vermek için sh(ve yine de FD 3'ün kullanılmadığını varsayarsak) karmaşıklaşır :
(cmd 2>&1 >&3 3>&- | stderr-filter >&2 3>&-) 3>&1
Öyleyse, bunun varsayımı ve karmaşık sözdizimi göz önüne alındığında, yukarıda TL; DR'de gösterilen ve burada açıklanan daha basit bash/ zshsözdizimini kullanmanız daha iyi olacaktır .