Je veux créer un alias bash pour grep qui ajoute des numéros de ligne:
alias grep='grep -n'
Mais cela, bien sûr, ajoute également des numéros de ligne aux pipelines. La plupart du temps (et aucune exception ne me vient à l'esprit), je ne veux pas de numéros de ligne dans un pipeline (au moins en interne, probablement OK si c'est le dernier), et je ne veux pas vraiment ajouter un sed / awk / cut à le pipeline juste pour les retirer.
Peut-être que mes exigences pourraient être simplifiées pour «ajouter des numéros de ligne uniquement si grep est la seule commande sur la ligne». Existe-t-il un moyen de le faire sans un alias particulièrement laid?
la source
[[ -t 0 && -t 1 ]]
si vous ne voulez des numéros de ligne que si l'entrée standard et la sortie standard sont connectées à un terminal.(pour être complet)
Bien que la réponse de @ enzotib soit probablement ce que vous voulez, ce n'est pas ce que vous avez demandé.
[ -t 1 ]
vérifie si le descripteur de fichier est un périphérique terminal, et non pas autre chose qu'un tube (comme un fichier normal, une socket, un autre type de périphérique comme/dev/null
...)La
[
commande n'a pas d'équivalent-t
mais pour les tuyaux. Pour obtenir le type du fichier associé à un descripteur de fichier, vous devez effectuer l'fstat()
appel système sur celui-ci. Il n'y a pas de commande standard pour le faire, mais certains systèmes ou shells en ont.Avec GNU
stat
:Ou avec
zsh
et son proprestat
intégré (qui est antérieur à celui de GNU de quelques années), ici chargézstat
uniquement:Maintenant quelques notes:
Ce ne sont pas seulement les pipelines shell qui utilisent des tuyaux.
ou:
ou:
aussi courir
grep
avec sa sortie standard vers un tuyau.Si votre shell l'est
ksh93
, notez que sur certains systèmes, il utilise des paires de sockets au lieu de tuyaux dans ses pipelines.la source