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