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
- Citace pro ukončení podpory? Nemyslím si ' že je to zastaralé.