Que signifient les arguments «-v» et «-x» pour bash?

17

J'ai vu quelques scripts shell avec le shebang suivant:

#!/bin/bash -x -v 

Cependant, man bashn'explique pas ce que ces arguments -xet -vreprésentent, s'ils appartiennent bashà tous.

Alors , qu'est-ce que ceux -xet -v(et d' autres arguments possibles) signifie?

Alex
la source

Réponses:

26

De man bash(oui, c'est une grande page de manuel, généralement la recherche Google est plus rapide):

-x Après avoir développé chaque commande simple, pour une commande, une commande de casse, une commande de sélection ou une arithmétique pour une commande, affichez la valeur développée de PS4, suivie de la commande et de ses arguments développés ou de la liste de mots associée.

Effectivement: lorsque vous exécutez un script, il affichera toutes les actions effectuées dans ce script. Ainsi, tous les ifs, boucles et commandes s'exécutent. Très utile pour le débogage.

-v Imprimer les lignes d'entrée du shell au fur et à mesure de leur lecture. Lorsqu'un script est exécuté, il imprime l'intégralité du script lors de la lecture du fichier. Lorsque vous utilisez le shell de manière interactive, il affichera chaque commande après avoir appuyé sur Entrée.

Les citations ci-dessus sont tirées de l'explication de la setcommande intégrée dans le man bash, qui explique également que les options de setpeuvent également être passées comme arguments (sur la ligne shebang):

Les options sont désactivées par défaut, sauf indication contraire. L'utilisation + plutôt que -provoque la désactivation de ces options. Les options peuvent également être spécifiées comme arguments pour une invocation du shell. L'ensemble d'options actuel se trouve dans $-. Le statut de retour est toujours vrai, sauf si une option non valide est rencontrée.

mtak
la source
Ok, donc c'est un argument simple à bash, et je pourrais juste avoir une version différente sans ces arguments?
Alex
Si vous parlez de bash: je pense que toutes les versions bash de la dernière décennie soutiendront ces arguments. Si vous parlez de la page de manuel: elle est énorme et vous devez savoir ce que vous cherchez, mais elle est là (au moins sur Ubuntu 13.04). Habituellement, une recherche Google est plus rapide.
mtak
6
+1 "La recherche Google est plus rapide" -> /-xquelques fois vous y arriverez man(en fait, c'est less). Vous pouvez répéter la dernière recherche avec /+ flèche vers le haut, mais vous devez faire défiler la page vers le bas pour que toute recherche actuelle soit supprimée de l'écran ( /c'est la recherche vers l'avant, ?vers l'arrière).
goldilocks
2
@ TAFKA'goldilocks 'Je suppose que cela dépend de votre distribution. Dans la page de manuel d'Ubuntu 13.04 bash, le 43e hit est le bon. Il est plus facile de rechercher le prochain hit en moins en utilisant la nrecherche avant et la Nrecherche arrière.
mtak
Oups, en fait, je regardais test -xsous EXPRESSIONS CONDITIONNELLES (le troisième coup), non set -x. -xdans man bashest un assez mauvais cas, donc obtenir des aides plus spécifiques: Si vous utilisez /^\s+-x\b, (= début de ligne + espace + -x+ limite de mot) vous obtenez la bonne en 5 hits ... il aurait été de 4 mais pour le fait xcorrespond X... ce qui m'amène à une question que je voulais poser . Quoi qu'il en soit, avec la plupart des pages de manuel, le ^\s+-x\bmodèle doit d'abord fonctionner pour les commutateurs.
goldilocks
2

La page de manuel bash laisse entendre que ces options sont expliquées plus bas, en fait, mais elles sont facilement ignorées.

Par conséquent, votre problème devrait en fait se lire: La section OPTIONS de la page de manuel bash est incomplète. La réponse serait soit de les dupliquer, soit de mettre en surbrillance la première section de la section OPTIONS:

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.  [ ... ]

Enfin, pour faire ceci: ce sont des options standard pour tout shell POSIX pour afficher le code du script lors de la lecture ( -v) et lors de l' exécution ( -x). La sortie apparaîtra sur stderr.

Henk Langeveld
la source