Eu quero criar um alias do bash para grep que adicione números de linha:
alias grep='grep -n'
Mas isso, é claro, adiciona números de linhas aos pipelines também. Na maioria das vezes (e não há exceções), não quero números de linhas dentro de um pipeline (pelo menos internamente, provavelmente está bom se for o último) e não quero adicionar realmente um sed / awk / cut para o gasoduto apenas para retirá-los.
Talvez meus requisitos possam ser simplificados para "apenas adicionar números de linha se grep for o único comando na linha". Existe alguma maneira de fazer isso sem um pseudônimo particularmente feio?
fonte
[[ -t 0 && -t 1 ]]
se você quiser apenas números de linha se a entrada e a saída padrão estiverem conectadas a um terminal.(para completar)
Embora a resposta do @ enzotib seja provavelmente o que você deseja, não é o que você pediu.
[ -t 1 ]
verifica se o descritor de arquivo é um dispositivo terminal, não se trata de algo que não seja um pipe (como um arquivo comum, um soquete, outro tipo de dispositivo como/dev/null
...)O
[
comando não tem equivalente a não-t
ser para pipes. Para obter o tipo de arquivo associado a um descritor de arquivo, você precisa executar afstat()
chamada do sistema. Não existe um comando padrão para fazer isso, mas alguns sistemas ou shells possuem.Com o GNU
stat
:Ou com
zsh
e seu própriostat
builtin (que antecede o GNU um por alguns anos), aqui carregado comozstat
apenas:Agora, algumas notas:
Não são apenas os oleodutos que usam tubos.
ou:
ou:
também corra
grep
com seu stdout indo para um cano.Se o seu shell for
ksh93
, observe que em alguns sistemas, ele usa pares de soquetes em vez de tubos em seus pipelines.fonte