O que `set -x` faz?


261

Eu tenho um script de shell com a seguinte linha:

[ "$DEBUG" == 'true' ] && set -x

15
Dê uma olhada:help -m set | less
Cyrus

4
Obrigado pela help -m setdica. Isso funciona. Eu tentei man setantes de pedir, no entanto no ubuntu existeNo manual entry for set
Ole

2
@Ole, setestá embutido no bash, portanto, se man bashvocê puder encontrá-lo na seção COMANDOS DE CONSTRUÇÃO DO SHELL. Ao exibir a página homem provavelmente você pode saltar para ele, procurando por esta expressão regular: \bset \[.
usar o seguinte comando

Respostas:


365

set -xativa um modo do shell em que todos os comandos executados são impressos no terminal. No seu caso, é claramente usado para depuração, que é um caso de uso típico para set -x: imprimir todos os comandos conforme são executados pode ajudá-lo a visualizar o fluxo de controle do script se ele não estiver funcionando conforme o esperado.

set +x desativa.


5
Como desativar esse recurso novamente?
feedc0de

85
@DanielBrunner: set +xdesativa.
John Zwinck

2
Isso é MUITO útil! Eu gostaria que alguém tivesse me dito isso antes. Existem outros truques interessantes como esse que podem aumentar nossa meta-habilidade em scripts?
Student

7
@ Estudante: set -ena parte superior do seu script, o script será encerrado com um erro sempre que ocorrer um erro (e não for explicitamente tratado). Acho isso imensamente preferível ao padrão, que é continuar indo à vontade (como o infame do Visual Basic On Error Resume Next).
John Zwinck

1
Infelizmente, o @JohnZwinck set -etem efeitos colaterais muito indesejáveis, a ponto de tornar quase impossível a revisão de código (porque o comportamento de uma determinada linha depende do que está na pilha de chamadas - se uma função é chamada em um contexto "verificado", set -eestá desativada para essa invocação e tudo o que por sua vez chama). Veja os exercícios no BashFAQ # 105 .
Charles Duffy

78

set -x

Imprime um rastreio de comandos simples, para comandos, comandos de maiúsculas e minúsculas, comandos de seleção e aritmética para comandos e seus argumentos ou listas de palavras associadas depois que eles são expandidos e antes de serem executados. O valor da variável PS4 é expandido e o valor resultante é impresso antes do comando e de seus argumentos expandidos.

[ fonte ]

Exemplo

set -x
echo `expr 10 + 20 `
+ expr 10 + 20
+ echo 30
30

set +x
echo `expr 10 + 20 `
30

O exemplo acima ilustra o uso de set -x. Quando usado, a expressão aritmética acima foi expandida. Pudemos ver como uma linha simples foi avaliada passo a passo.

  • O primeiro passo exprfoi avaliado.
  • O segundo passo echofoi avaliado.

Para saber mais sobre o conjunto → visite este link

quando se trata do seu script de shell,

[ "$DEBUG" == 'true' ] && set -x

Seu script pode estar imprimindo algumas linhas adicionais de informações quando o modo de execução foi selecionado como DEBUG. Tradicionalmente, as pessoas costumavam ativar o modo de depuração quando um script chamado com argumento opcional, como-d



6

-u: desativado por padrão. Quando ativada, uma mensagem de erro é exibida ao usar uma variável não configurada.

-v: inativo por padrão. Após a ativação, o conteúdo original da informação será exibido (sem resolução variável) antes da saída da informação.

-x: inativo por padrão. Se ativado, o conteúdo do comando será exibido antes da execução do comando (após a resolução variável, existe um símbolo ++).

Compare as seguintes diferenças:

/ # set -v && echo $HOME
/root
/ # set +v && echo $HOME
set +v && echo $HOME
/root

/ # set -x && echo $HOME
+ echo /root
/root
/ # set +x && echo $HOME
+ set +x
/root

/ # set -u && echo $NOSET
/bin/sh: NOSET: parameter not set
/ # set +u && echo $NOSET
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.