Conceito e mecanismo
O shell transforma uma linha em argumentos e redireções antes de executar o programa. Em Bash, a ordem importa: comando >saida.log 2>&1 associa primeiro stdout ao ficheiro e depois copia esse destino para stderr. Inverter a ordem pode deixar os erros no terminal. Em loops, "$@" preserva cada argumento recebido; "$*" combina os argumentos numa única expansão entre aspas. Guarda ou avalia o estado do comando imediatamente, porque um echo posterior também altera $?. Para filtrar logs, uma âncora de início e um separador distinguem ERROR seguido de espaço de ocorrências dentro de outra mensagem.
Aplicação guiada
Num batch financeiro, a existência de um ficheiro de saída não prova que o processamento terminou. Se o comando falhar, conserva evidência e reconcilia efeitos antes de repetir. Verifica também links: um hard link é outro nome para o mesmo objeto; remover um nome não elimina o conteúdo enquanto persistem referências relevantes. Um symlink relativo resolve o destino a partir do diretório onde o link reside, não do diretório atual do operador. Quando um glob não encontra ficheiros, Bash pode conservar o padrão literal se nullglob e failglob estiverem desativados. Explicita estas condições no script e no ensaio.
Se /srv/app/current aponta para releases/v2, o destino relativo começa em /srv/app. Ensaiar o script com um path que contém espaços revela falhas de quoting antes da janela.
Armadilhas comuns
Ler $? demasiado tarde; dividir paths; trocar ordem de redireções; resolver symlinks a partir da sessão do operador.
Tópicos relacionados: Software, repositórios RPM e Flatpak · Operação, targets e evidência persistente
Valida os argumentos efetivos, os destinos de saída e o resultado de cada operação.
Referência: bash(1): shell expansion and pipelines · EX200 based on Red Hat Enterprise Linux 10