it-swarm-eu.dev

Co znamená pomlčka „-“ na konci příkazu?

Následující příkaz:

gzip -dc /cdrom/cdrom0/file.tar.gz | tar xvf –

Co dělá - na konci příkazu znamená? Je to nějaký zástupný symbol?

82
Eugene S

V tomto případě to znamená „standardní vstup“. Používá jej nějaký software (např. tar), když je vyžadován argument souboru a místo toho musíte použít stdin. Nejedná se o konstrukci Shell a záleží na programu, který používáte. Pokud máte pochybnosti, zkontrolujte manpáž!

V tomto případě je standardní vstup argumentem -f možnost. V případech, kdy - není podporováno, můžete se zbavit používání něco jako tar xvf /proc/self/fd/0 nebo tar xvf /dev/stdin (ten je široce podporován v různých odvětvích).

Nespoléhejte na to, aby to znamenalo „standardní vstup“ všeobecně. Protože to Shell nevykládá, každý program se s ním může vypořádat, jak se mu líbí. V některých případech je to standardní výstup nebo něco úplně jiného: na su to znamená „spusťte přihlašovací prostředí“. V jiných případech to není interpretováno vůbec. Svalová paměť mě přiměla vytvořit poměrně málo souborů s názvem - protože nějaká verze nějakého programu jsem byl zvyklý nerozumět pomlčce.

86
Alexios

V tomto případě - je vlastně docela k ničemu, za předpokladu, že používáte Linux:

GNU tar (verze pro Linux) ve výchozím nastavení akceptuje svůj vstup ze standardního vstupu. Pokud toto chování chcete ne a chcete předat název souboru jako argument příkazového řádku, musíte zadat příznak f:

tar xf filename

Takže to je stejné jako

tar x < filename

Nebo, pokud je vstup gzipován jako v příkladu:

gzip -dc filename | tar x

Nemá smysl zde specifikovat příznak f, ale protože byl zadán, musí být název souboru uveden jako - označuje, že chceme číst ze standardního vstupu (viz další odpověď). Takže, opakuji, je to zbytečné a trochu divné.

Kromě toho lze výše uvedený řádek zjednodušit, protože GNU tar) lze říci, aby proud vstupoval přes gzip samotný zadáním příznaku z:

tar xfz filename

- Není třeba explicitně volat gzip.

14
Konrad Rudolph