Comentários legíveis em linhas separadas em um comando bash de várias linhas com pipelines?

14

Ao criar scripts de shell usando pipelines e usar a barra invertida para continuar as linhas, quero inserir comentários em linhas separadas , de maneira robusta, legível e portátil.

Por exemplo, dado este comando multi-linha descomentado (roubado da @DigitalRoss pela sua clareza):

echo abc |
     tr a-z A-Z |
     sort |
     uniq

... o abaixo é esteticamente mais próximo do que eu quero realizar, mas por razões óbvias, não funciona ... e sim, estou bem ciente de que isso não é algo que normalmente vale a pena comentar:

# Perform critical system task.
# NOTE - An example of what does *not* work.
echo abc |
    # Convert lowercase to uppercase.
     tr a-z A-Z |

     # Sort the results.
     sort |

     # Only show unique lines.
     uniq

As respostas relacionadas existentes parecem insatisfatórias para mim , como segue:

Primeiro, a resposta de glenn jackman (adicionar argumentos a um array e depois executar o array) trabalha para um único comandos, mas não funciona para pipelining (e mesmo se o fizesse, adiciona complexidade que eu gostaria de evitar).

Em segundo lugar, a resposta do @Gilles aqui (que usa : ) também não parece funcionar com pipelining, porque altera o fluxo do pipeline:

$ echo "abc" | :
$

( OBSERVAÇÃO : Se houver um equivalente a : que passe a saída sem modificação, isso seria esteticamente aceitável, mas eu não consegui encontrar um. Eu poderia escrever um personalizado , mas reduziria a portabilidade.)

Por fim, a última parte da resposta DigitalRoss 'no StackOverflow funciona bem para adicionar comentários na mesma linha, mas eu preferem strongmente comentários em linhas separadas. Caso contrário, quando as linhas tiverem comprimentos muito variados, a legibilidade será reduzida:

echo abc |         # normal comment OK here'
     /usr/local/bin/really/long/path/ridiculously-long-filename.sh |  # another normal comment OK here
     sort |        # the pipelines are automatically continued
     uniq          # final comment

Estou à procura de respostas que preservem a legibilidade e minimizem a complexidade, ou então alguma informação sobre o motivo pelo qual o que procuro é inviável.

    
por Royce Williams 13.12.2011 / 16:53

1 resposta

14

Que tal isso?

echo abc | \
# Convert lowercase to uppercase.
tr a-z A-Z | \

# Sort the results.
sort | \

# Only show unique lines.
uniq

(A barra invertida precisa ser usada como o último caractere nessas linhas.) Não tenho certeza sobre a portabilidade dessa abordagem, mas com certeza funciona com bash atual.

    
por 13.12.2011 / 19:01

Tags