O que os argumentos '-v' e '-x' significam bash?


17

Eu vi alguns scripts de shell com o seguinte shebang:

#!/bin/bash -x -v 

No entanto, man bashnão explica o que esses argumentos representam -xe -vse eles pertencem a bashtodos.

Então, o que esses -xe -v(e outros argumentos possíveis) significam?

Respostas:


26

De man bash(sim, é uma grande página de manual, geralmente a pesquisa no Google é mais rápida):

-x Depois de expandir cada comando simples, para comando, comando caso, selecione comando ou aritmética para comando, exiba o valor expandido do PS4, seguido pelo comando e seus argumentos expandidos ou lista de palavras associada.

Efetivamente: quando você executa um script, ele mostra todas as ações realizadas nesse script. Portanto, todos os ifs, loops e comandos são executados. Muito útil para depuração.

-v Imprima as linhas de entrada do shell à medida que forem lidas. Quando um script é executado, ele imprime o script inteiro enquanto lê o arquivo. Quando você usa o shell interativamente, ele mostra cada comando depois que você pressiona enter.

As aspas acima são da explicação do setcomando builtin no arquivo man bash, que também explica que as opções para settambém podem ser passadas como argumentos (na linha shebang):

As opções estão desativadas por padrão, a menos que indicado de outra forma. Usar em + vez de -faz com que essas opções sejam desativadas. As opções também podem ser especificadas como argumentos para uma chamada do shell. O conjunto atual de opções pode ser encontrado em $-. O status de retorno é sempre verdadeiro, a menos que uma opção inválida seja encontrada.


Ok, então é um argumento simples para bash, e eu só posso ter uma versão diferente sem esses argumentos?
Alex

Se você está falando sobre o bash: acho que todos os lançamentos do bash da década passada apoiarão esses argumentos. Se você está falando sobre a página de manual: é enorme e precisa saber o que está procurando, mas está lá (pelo menos no Ubuntu 13.04). Normalmente, uma pesquisa no Google é mais rápida.
mtak

6
+1 "A pesquisa no Google é mais rápida" -> /-xalgumas vezes você chega lá man( na verdade é less). Você pode repetir a última pesquisa com /a seta para cima +, mas é necessário descer na página para obter qualquer pesquisa atual na tela ( /é pesquisa para frente, ?é para trás).
Goldilocks

2
@ TAFKA'goldilocks 'Acho que depende da sua distribuição. Na página de manual do Ubuntu 13.04 bash, o 43º hit é o certo. É mais fácil procurar o próximo hit em menos, usando npara pesquisa direta e Npara trás.
mtak

Opa, na verdade eu estava olhando test -xsob EXPRESSÕES CONDICIONAIS (o terceiro hit), não set -x. -xin man bashé um caso muito ruim, portanto, obter ajuda mais específica: se você usar /^\s+-x\b, (= início de linha + espaço em branco + -x+ limite de palavras), você alcançará o caminho certo em 5 ocorrências ... teria sido 4, mas o fato xcorresponde X... o que me leva a uma pergunta que pretendo fazer . De qualquer forma, na maioria das páginas de manual, o ^\s+-x\bpadrão deve funcionar primeiro, tente os comutadores.
Goldilocks

2

A página man bash faz indício de que estas opções são explicadas mais abaixo, na verdade, mas é facilmente esquecido.

Portanto, seu problema deve realmente ser: A seção OPTIONS da página de manual do bash está incompleta. A resposta seria duplicá-los ou destacar a primeira seção da seção OPÇÕES:

OPTIONS
   All  of  the  single-character shell options documented in the descrip‐
   tion of the set builtin command can be used as options when  the  shell
   is invoked.  [ ... ]

Por fim, para completar: são opções padrão para qualquer shell POSIX, para mostrar o código do script quando read ( -v) e quando run ( -x). A saída aparecerá no stderr.

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.