Como faço para verificar sintaxe um script Bash sem executá-lo?
Pergunta
É possível verificar uma sintaxe script bash sem executá-lo?
Usando Perl, eu posso correr perl -c 'script name'
. Existe algum comando equivalente para bash scripts?
Solução
bash -n scriptname
Talvez uma ressalva óbvia: esta sintaxe valida, mas não irá verificar se sua festança tentativas de script para executar um comando que não está em seu caminho, como ech hello
vez de echo hello
Outras dicas
O tempo muda tudo. Aqui está uma web site que fornece verificação de sintaxe on-line para shell script.
Eu encontrei é muito poderosa detecção de erros comuns.
Sobre ShellCheck
ShellCheck é uma análise estática e linting ferramenta para scripts sh / bash. É focado principalmente na manipulação iniciante típica e erros de sintaxe de nível intermediário e armadilhas, onde o shell só dá uma mensagem de erro enigmática ou comportamento estranho, mas também relatórios sobre algumas questões mais avançadas, onde casos de canto podem causar falhas em atraso.
código fonte Haskell está disponível no GitHub!
Eu também ativar a opção 'u' em cada festa roteiro de gravação I, a fim de fazer alguma verificação adicional:
set -u
Isto irá relatar o uso de variáveis ??não inicializadas, como na seguinte script 'check_init.sh'
#!/bin/sh
set -u
message=hello
echo $mesage
A execução do script:
$ check_init.sh
comunicará o seguinte:
./ check_init.sh [4]: ??mesage:. Parâmetro não definido
Muito útil para erros de captura
sh -n script-name
Executar este. Se houver algum erro de sintaxe no script, em seguida, ele retorna a mesma mensagem de erro.
Se não houver erros, então ele sai sem dar qualquer mensagem. Você pode verificar imediatamente usando echo $?
, que retornará 0
confirmando bem sucedido sem qualquer erro.
Ela trabalhou para mim também. Corri em Linux OS, Bash Shell.
Eu realmente verificar todos os scripts bash em dir atual para erros de sintaxe, sem correr-los usando a ferramenta find
:
find . -name '*.sh' -exec bash -n {} \;
Se você quiser usá-lo para um único arquivo, basta editar o curinga com o nome do arquivo.
comando nulo [cólon] também útil durante a depuração para ver o valor da variável
set -x
for i in {1..10}; do
let i=i+1
: i=$i
done
set -
Há BashSupport plug-in para IntelliJ IDEA que verifica a sintaxe.