Você pode fazer assim:
#!/bin/sh
ls -lh &&
# This is a comment
echo 'Wicked, it works!'
Espero ter entendido o que você perguntou corretamente.
Peço desculpas antecipadamente se esta for uma pergunta duplicada. Eu fiz um esforço para procurar / verificar antes de perguntar aqui.
Estou confortável em escrever frases assim:
foocommand && foocommand2 && foocommand3
A idéia é que eu quero apenas comandos subseqüentes para executar se o anterior foi "bem sucedido".
Eu estou escrevendo um script um pouco longo e este one-liner não é viável porque parece um enorme bloco de código confuso para todos os outros.
Eu quero espaçar os comandos e escrever comentários entre eles no script. Como posso fazer isso e ainda ter o equivalente a & & lá?
Você pode alterar a linha shebang para
#!/bin/bash -e
Após qualquer erro, o script será interrompido.
Se você não gostar da ideia de set -e
, talvez possa inverter a lógica.
foocommand || exit 1
foocommand2 || exit 2
foocommand3 || exit 3
Mais proveitosamente, substitua exit
por algo para imprimir uma mensagem de erro útil e saia. Dentro de uma função, é claro, você quer return
em vez de exit
.
Você pode usar if else fi
blocks.
if foocommand; then
# some comments
if foocommand2; then
# more comments
foocommand3
fi
fi
É um pouco mais legível.
Alternativamente, você pode usar apenas \
para dividir seu grande liner em várias linhas
foocommand && \
# some comment
foocommand2 && \
# more comment
foocommand3
Mas é claro que isso pode ser confuso para o olho destreinado.
Você pode considerar o uso de declarações if
aninhadas. Outra opção é usar os cacheados para agrupar como { true && echo hi; } || echo huh
Atualização 1:
Veja um exemplo sem novas linhas / comentários:
{ { false && echo "inner true"; } && { echo "inner true" && true; } || { echo "inner false" && false; } || echo "outter false"; }
Divida cada sequência de comandos em funções:
big_block_1() {
# ...
}
big_block_2() {
# ...
}
big_block_3() {
# ...
}
big_block_1 && big_block_2 && big_block_3
Sempre gosto de escrever uma função "fail" que me permita especificar o que eu faria quando a falha ocorresse e depois usar o padrão ||
. Como o seguinte:
function fail() {
echo "Failure: ${@}"
exit 1
}
foocommand || fail "couldn't foo"