“ bash -D ” příkaz nevypadá, že by ' udělal něco užitečného

Konečně se po všech těch letech konečně dostanu k seznámení se skořápkou. Prozkoumával jsem manuálovou stránku pro bash a při pohledu na možnost -D, která podle příručky:

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

Na mém počítači Mac však nevytváří žádný výstup a vyhodí mě do nového prostředí, které má menší funkčnost než původní prostředí; which v tomto novém prostředí přestal fungovat.

Jen přemýšlím, jestli někdo může nabídnout vhled do toho, k čemu je tato možnost na macu. Pravděpodobně ji používám špatně, jsem si jistý.

Odpověď

Na mém počítači bash -D nevygeneruje žádný výstup

bash -D (a jeho ekvivalentní dlouhá možnost --dump-strings) čte příkazy ze standardního vstupu nebo souboru a extrahuje řetězce označené jako přeložitelné , tj. Řetězce s dvojitou uvozovkou, kterým předchází znak dolaru, například $"Hello, world".

Pokud je bash -D spuštěn bez jakéhokoli vstupu, jako jste to udělali, nevydá nic a spustí nový shell ( speciální shell, viz níže.)

Například pro tento jednoduchý skript /tmp/script:

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

bash -D výstupy:

"Hello, world" 

Jak vidíte, odpovídá to hledání řádků, které odpovídají $"<text>" a odstranění znaku dolaru.

Zajímavější je výstup podobné možnosti --dump-po-strings, která je, jak uvádí stránka Bash man, 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 "" 

Tento vynikající článek Jak přidat podporu lokalizace do vašich bash skriptů poskytuje více informací o tom, jak použít tuto možnost.

bash -D vypíše mě do nového prostředí, které vypadá mají méně funkcí než původní prostředí

Správně, nový shell nereaguje na žádné příkazy. Důvodem je to, že možnost -D implikuje -n , který řídí prostředí číst příkazy, ale neprovádět je .

-n možnost si zaslouží vysvětlení: ačkoli je to na první pohled na první pohled zbytečná možnost, ve skutečnosti je docela užitečná. bash -n nejen čte příkazy, ale také je ověřuje a stěžuje si, pokud syntaxe není platná, takže můžete spustit skript bash -n <script name> a zkontrolovat skript pro chyby syntaxe bez provedení jakéhokoli příkazu.

To znamená, že po provedení bash -D shell, který dostanete, s radostí přijme vaše příkazy, zkontroluje platnost syntaxe (a výstup v případě potřeby chyba) a nedělat nic. Proto which „nefunguje“.

Viz Vyvolání bashe a V části Nastavit vestavěné příručky Bash Reference Manual jsou uvedeny některé základní informace o tomto chování.

Komentáře

  • Velmi informativní. Díky.
  • Skončil jsem tady, když jsem se pokoušel dát smysl souboru .sh s tímto prvním řádkem: #!/bin/bash -D -D možnost vypadá , aby byla v tomto kontextu ignorována. Může někdo komentovat, zda je toto použití skutečně někdy zaručeno nebo ne?
  • @iwolf Zajímavé, mohu o tom uvažovat jen jako o rychlém způsobu " deaktivovat " skript beze změny spustitelných bitů (tj. skript by stále měl režim 755 / rwxr-xr-x, ale nedělá nic). Jinak ' nevidím, jak by to mohlo být vůbec někdy užitečné. V mých testech takový skript nedělá nic (kromě tisku lokalizovatelných řetězců, tj. Řetězců s dvojitou uvozovkou, kterým předchází znak dolaru).

Odpověď

Je zamýšleno extrahovat všechny lokalizovatelné řetězce bez spuštění skriptu, ale není to velmi užitečné ani pro tento omezený účel a věřím, že je již dlouho zastaralé. Chcete-li vidět, jak něco dělá:

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

Komentáře

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *