Pergunta
Qual é a semântica :
em relação ao seu uso em pipes?
A documentação do Bash afirma:
: [arguments]
Sem efeito; o comando não faz nada além de expandir os argumentos e executar quaisquer redirecionamentos especificados. O status de retorno é zero.
No entanto, não é óbvio qual comportamento devo esperar ao :
ser usado em um cachimbo. Ele simplesmente passa std{in,out,err}
?
No que diz respeito aos argumentos, :
pode ser um substituto para qualquer outro comando, ao que parece. Mas preciso de um esclarecimento quanto ao uso em cachimbo; um esclarecimento não meramente baseado na observação, mas citando fontes autorizadas .
Fundo
Eu tenho uma situação em que - dependendo do ambiente em que o script é executado -, preciso executar a saída tr -d '\r'
para remover os caracteres de retorno de carro da saída.
Infelizmente, atualmente isso significa um if/else/fi
bloco, ao longo das linhas de ( dentro de uma função ):
if [[ "$OSTYPE" == "cygwin" ]]; then
my_commands | tr -d '\r' || return $?
else
my_commands || return $?
fi
Onde o | tr -d '\r'
é a única diferença entre o if
e o else
ramo. O conteúdo de cada ramificação é obviamente um pouco mais complexo do que o mostrado aqui.
Agora, entendo que tr -d '\r'
é benigno nos casos em que não há retorno de carro. Mas é uma invocação e (no Windows) uma sobrecarga que pode ser evitada (a função é um caminho de código "quente"). E então pensei em substituir tr
pela função interna do shell :
.