7 votes

La commande "bash -D" ne semble rien faire d'utile

Après toutes ces années, je commence enfin à me familiariser avec le shell. J'ai exploré la page de manuel de bash et en regardant le -D qui, selon le manuel :

   -D        A list of all double-quoted strings preceded by $ is  printed
             on  the standard output.  These are the strings that are sub-
             ject to language translation when the current locale is not C
             or  POSIX.   This  implies the -n option; no commands will be
             executed.

Cependant, sur mon Mac, il ne génère aucune sortie et m'envoie dans un nouveau shell qui semble avoir moins de fonctionnalités que le shell d'origine ; l'option which a cessé de fonctionner dans ce nouveau shell.

Je me demande si quelqu'un peut m'expliquer à quoi sert cette option sur le mac. Je l'utilise probablement mal, j'en suis sûr.

6voto

Hahagaga12 Points 93

Il est destiné à extraire toutes les chaînes localisables sans exécuter le script, mais il n'est pas très utile même pour cet objectif limité et je crois qu'il est déprécié depuis longtemps. Si vous voulez le voir faire quelque chose :

% printf "foo\n\$\"bar\"\n" | bash -D
"bar"

3voto

jaume Points 13186

Sur mon Mac, bash -D ne génère aucune sortie

bash -D (et son option longue équivalente --dump-strings ) lit les commandes à partir de l'entrée standard ou d'un fichier et extrait les chaînes de caractères marquées comme traduisibles c'est-à-dire les chaînes de caractères entre guillemets qui sont précédées d'un signe de dollar, comme $"Hello, world" .

Si bash -D est exécuté sans aucune entrée, comme vous l'avez fait, il ne produit rien et démarre un nouveau shell (a spécial (voir ci-dessous).

Par exemple, pour ce simple script /tmp/script :

#!/bin/bash
echo $"Hello, world"

bash -D des sorties :

"Hello, world"

Comme vous le voyez, cela équivaut à rechercher les lignes qui correspondent à $"<text>" et en supprimant le symbole du dollar.

Le résultat de l'option similaire est plus intéressant --dump-po-strings qui est, comme le dit la page de manuel de Bash, equivalent to -D, but the output is in the GNU gettext po (portable object) file format. :

bash --dump-po-strings /tmp/script
#: /tmp/script:2
msgid "Hello, world"
msgstr ""

Cet excellent article Comment ajouter le support de la localisation à vos scripts ? fournit de plus amples informations sur l'utilisation de cette option.

bash -D me jette dans un nouveau shell qui semble avoir moins de fonctionnalités que le shell d'origine

En effet, le nouveau shell ne réagit à aucune commande. La raison en est que les -D L'option implique -n qui dirige la coquille pour lire les commandes mais ne pas les exécuter .

En -n mérite une explication : bien qu'elle semble inutile à première vue, cette option est en fait très utile. bash -n ne se contente pas de lire les commandes, mais les valide et se plaint si la syntaxe n'est pas valide. bash -n <script name> pour vérifier si un script contient des erreurs de syntaxe sans exécuter de commande.

Cela signifie qu'après avoir exécuté bash -D l'interpréteur de commandes que vous obtiendrez acceptera volontiers vos commandes, vérifiera la validité de la syntaxe (et affichera une erreur si nécessaire) et ne fera rien. C'est pourquoi which "ne fonctionne pas".

Voir Invoquer Bash y L'ensemble intégré du manuel de référence de Bash pour obtenir des informations de fond sur ce comportement.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X