Quiero crear un alias bash para grep que agregue números de línea:
alias grep='grep -n'
Pero eso, por supuesto, agrega números de línea a las tuberías también. La mayoría de las veces (y no se me ocurren excepciones) no quiero números de línea dentro de una tubería (al menos internamente, probablemente esté bien si es el último), y realmente no quiero agregar un sed / awk / cut a la tubería solo para sacarlos.
Quizás mis requisitos podrían simplificarse para "agregar solo números de línea si grep es el único comando en la línea". ¿Hay alguna manera de hacer esto sin un alias particularmente feo?
fuente
[[ -t 0 && -t 1 ]]
si solo desea números de línea si tanto la entrada estándar como la salida estándar están conectadas a un terminal.(por completitud)
Si bien la respuesta de @ enzotib es probablemente lo que quieres, no es lo que pediste.
[ -t 1 ]
comprueba si el descriptor de archivo es un dispositivo terminal, no es otra cosa que una tubería (como un archivo normal, un zócalo, otro tipo de dispositivo como/dev/null
...)El
[
comando no tiene equivalente-t
sino para tuberías. Para obtener el tipo de archivo asociado con un descriptor de archivo, debe realizar lafstat()
llamada del sistema en él. No hay un comando estándar para hacer eso, pero algunos sistemas o shells tienen algunos.Con GNU
stat
:O con
zsh
y su propiostat
incorporado (que precede a GNU por unos años), aquí cargado comozstat
solo:Ahora algunas notas:
No solo las tuberías de concha utilizan tuberías.
o:
o:
También se ejecuta
grep
con su stdout yendo a una tubería.Si su shell es
ksh93
, tenga en cuenta que en algunos sistemas, utiliza pares de enchufes en lugar de tuberías en sus tuberías.fuente