Saya ingin membuat alias bash untuk grep yang menambahkan nomor baris:
alias grep='grep -n'
Tapi itu, tentu saja, menambahkan nomor baris ke saluran pipa juga. Sebagian besar waktu (dan tidak ada pengecualian muncul dalam pikiran) Saya tidak ingin nomor baris dalam pipa (setidaknya secara internal, mungkin OK jika itu yang terakhir), dan saya tidak benar-benar ingin menambahkan sed / awk / cut ke pipa hanya untuk mengambilnya.
Mungkin persyaratan saya dapat disederhanakan menjadi "hanya menambahkan nomor baris jika grep adalah satu-satunya perintah di telepon." Apakah ada cara untuk melakukan ini tanpa alias jelek?
sumber
[[ -t 0 && -t 1 ]]
jika Anda hanya ingin nomor baris jika input standar dan output standar terhubung ke terminal.(untuk kelengkapan)
Meskipun jawaban @ enzotib kemungkinan besar adalah yang Anda inginkan, itu bukan apa yang Anda minta.
[ -t 1 ]
memeriksa apakah deskriptor file adalah perangkat terminal, bukankah itu selain pipa (seperti file biasa, soket, jenis perangkat lain seperti/dev/null
...)The
[
perintah tidak memiliki setara-t
tetapi untuk pipa. Untuk mendapatkan jenis file yang terkait dengan deskriptor file, Anda perlu melakukanfstat()
panggilan sistem di atasnya. Tidak ada perintah standar untuk melakukan itu, tetapi beberapa sistem atau shell memiliki beberapa.Dengan GNU
stat
:Atau dengan
zsh
danstat
bawaannya sendiri (yang mendahului GNU beberapa tahun kemudian),zstat
hanya dimuat di sini :Sekarang beberapa catatan:
Bukan hanya shell pipelines yang menggunakan pipa.
atau:
atau:
juga berjalan
grep
dengan stdout pergi ke pipa.Jika shell Anda
ksh93
, perhatikan bahwa pada beberapa sistem, ia menggunakan socketpairs bukan pipa di pipelines-nya.sumber