On my mac, bash -D
generates no output
bash -D
(e la sua equivalente opzione lunga --dump-strings
) legge i comandi dallo standard input o da un file ed estrae stringhe contrassegnato come traducibile , cioè stringhe con virgolette precedute da un segno di dollaro, come $"Hello, world"
.
Se bash -D
viene eseguito senza alcun input, come hai fatto, non genera nulla e avvia una nuova shell (una shell speciale , vedi sotto).
Ad esempio, per questo semplice script /tmp/script
:
#!/bin/bash
echo $"Hello, world"
% output dibash -D
:
"Hello, world"
Come vedi, è equivalente alla ricerca di linee che corrispondono a $"<text>"
e rimuovendo il simbolo del dollaro.
Più interessante è l'output dell'opzione simile --dump-po-strings
, che è, come dice la pagina man di 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 ""
Questo eccellente articolo Come aggiungere il supporto per la localizzazione agli script di bash fornisce ulteriori informazioni su come utilizzare questa opzione.
bash -D
dumps me into a new shell that seems to have less functionality than the original shell
Esatto, la nuova shell non reagisce a nessun comando. La ragione di ciò è che l'opzione -D
implica -n
, che indirizza la shell a leggere i comandi ma non li esegue .
L'opzione -n
merita una spiegazione: sebbene un'opzione apparentemente inutile a prima vista, è in realtà abbastanza utile. bash -n
non solo legge i comandi ma li convalida e si lamenta se la sintassi non è valida, quindi puoi eseguire bash -n <script name>
per controllare uno script per gli errori di sintassi senza eseguire alcun comando.
Ciò significa che dopo aver eseguito bash -D
, la shell ottenuta accetta felicemente i tuoi comandi, verifica la validità della sintassi (e genera un errore se necessario) e non fa nulla. Ecco perché which
"non funziona".
Vedi Invocazione di Bash e The Set Builtin sezioni del Manuale di riferimento di Bash per alcune informazioni di base su questo comportamento.