7 votos

El comando "bash -D" no parece hacer nada útil

Por fin me estoy familiarizando con el caparazón después de todos estos años. Estaba explorando la página man de bash y mirando el -D que, según el manual:

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

Sin embargo, en mi mac no genera ninguna salida y me vuelca en un nuevo shell que parece tener menos funcionalidad que el shell original; el which dejó de funcionar en este nuevo shell.

Sólo me preguntaba si alguien puede ofrecer una idea de lo que esta opción es para en el mac. Probablemente estoy usando mal, estoy seguro.

6voto

psp Puntos 161

Está pensado para extraer todas las cadenas localizables sin ejecutar el script, pero no es muy útil incluso para ese propósito limitado y creo que hace tiempo que está obsoleto. Si quieres verlo haciendo algo:

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

1 votos

¿Citación por depreciación? No creo que esté obsoleto.

3voto

Phill Puntos 126

En mi mac, bash -D no genera ningún resultado

bash -D (y su opción larga equivalente --dump-strings ) lee comandos de la entrada estándar o de un archivo y extrae cadenas marcado como traducible es decir, cadenas entre comillas dobles precedidas de un signo de dólar, como por ejemplo $"Hello, world" .

Si bash -D se ejecuta sin ninguna entrada, como usted hizo, no muestra nada e inicia un nuevo intérprete de comandos (a especial shell, véase más abajo).

Por ejemplo, para este sencillo script /tmp/script :

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

bash -D salidas:

"Hello, world"

Como ves, esto equivale a buscar líneas que coincidan con $"<text>" y quitando el signo del dólar.

Más interesante es la salida de la opción similar --dump-po-strings que es, como dice la página man 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 ""

Este excelente artículo Cómo añadir soporte de localización a tus bash scripts. encontrará más información sobre cómo utilizar esta opción.

bash -D me deja en un nuevo shell que parece tener menos funcionalidad que el shell original

Así es, el nuevo shell no reacciona a ningún comando. La razón de esto es que el -D implica -n que dirige el proyectil para leer comandos pero no ejecutarlos .

En -n merece una explicación: aunque es una opción aparentemente inútil a primera vista, en realidad es bastante útil. bash -n no sólo lee los comandos, sino que también los valida y se queja si la sintaxis no es válida, por lo que puede ejecutar bash -n <script name> para comprobar un script en busca de errores de sintaxis sin ejecutar ningún comando.

Esto significa que después de ejecutar bash -D el intérprete de comandos que obtendrá aceptará sus comandos, comprobará la validez de la sintaxis (y mostrará un error si es necesario) y no hará nada. Por eso which "no funciona".

Véase Invocación de Bash y El Set Builtin del Manual de referencia de Bash para obtener más información sobre este comportamiento.

1 votos

Muy informativo. Gracias.

0 votos

Terminé aquí mientras trataba de darle sentido a un archivo .sh con esta primera línea: #!/bin/bash -D En -D opción parece ser ignorado en este contexto. ¿Alguien puede comentar si este uso está realmente justificado o no?

1 votos

@iwolf Interesante, sólo se me ocurre como una forma rápida de "desactivar" un script sin cambiar los bits de ejecutable (es decir, el script seguiría teniendo modo 755/rwxr-xr-x pero no hace nada). De lo contrario, no veo cómo esto podría ser útil en absoluto. En mis pruebas, tal script no hace nada (excepto imprimir cadenas localizables, es decir, cadenas entre comillas dobles que van precedidas por un signo de dólar).

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X