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.
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.
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
help -m set | less
help -m set
dica. Isso funciona. Eu tenteiman set
antes de pedir, no entanto no ubuntu existeNo manual entry for set
set
está embutido no bash, portanto, seman bash
você 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 \[
.Respostas:
set -x
ativa 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 paraset -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.fonte
set +x
desativa.set -e
na 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 BasicOn Error Resume Next
).set -e
tem 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 -e
está desativada para essa invocação e tudo o que por sua vez chama). Veja os exercícios no BashFAQ # 105 .set -x
[ fonte ]
Exemplo
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.expr
foi avaliado.echo
foi avaliado.Para saber mais sobre o conjunto → visite este link
quando se trata do seu script de shell,
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
fonte
Compare as seguintes diferenças:
fonte