Você está executando sort duas vezes (uma vez para verificar se o parâmetro é suportado e, em seguida, para executá-lo). Mas o que você esqueceu é que seu primeiro sort também lê stdin e, portanto, bloqueia até que sua entrada real atinja EOF (no ponto em que não há mais dados para ler para sua segunda sort instance). / p>
Portanto, redirecione seu primeiro sort stdin (adicionei suporte a parâmetro (usando $@ ), se você não quiser, basta removê-lo):
function sort_by_version {
if $(sort -u -V < /dev/null &>/dev/null); then
sort -u -V "$@"
else
sort -u "$@"
fi
}
Editar: suporte ao parâmetro adicionado (por exemplo, você pode usar sort_by_version -r para reverter os resultados, etc.)