Risposte:
In questo caso, significa "input standard". Viene utilizzato da alcuni software (ad es. tar) Quando è richiesto un argomento per i file e invece è necessario utilizzare stdin. Non è un costrutto shell e dipende dal programma che stai usando. Controlla la manpage in caso di dubbi!
In questo caso, l'input standard è l'argomento -fdell'opzione. Nei casi in cui -non è supportato, puoi cavartela usando qualcosa di simile tar xvf /proc/self/fd/0o tar xvf /dev/stdin(quest'ultimo è ampiamente supportato in vari unices).
Non fare affidamento su questo per indicare "input standard" universalmente. Poiché non è interpretato dalla shell, ogni programma è libero di gestirlo a proprio piacimento. In alcuni casi, è un output standard o qualcosa di completamente diverso: su di suesso significa "avvia una shell di accesso". In altri casi, non viene affatto interpretato. La memoria muscolare mi ha fatto creare alcuni file chiamati -perché una versione di qualche programma a cui ero abituato non capiva il trattino.
STDOUT, a seconda del contesto.
/dev/stdino /dev/stdoutpuò essere utilizzato se si desidera davvero un flusso di input / output. Si noti che si tratta di uno stream, i programmi che desiderano cercare in un file potrebbero non funzionare correttamente con esso, come nel caso di -(ad esempio ffmpeg)
bash, il trattino viene interpretato dalla shell. Vedere la Guida avanzata agli script di Bash - Capitolo 3. Caratteri speciali , quindi cercare il testo [trattino] o "reindirizzamento da / a stdin o stdout". Usando bashpuoi usare il trattino nella maggior parte dei luoghi in attesa di un nome file. È un ovvio complemento di <| > IMHO
catmaniglie -(controlla la manpage). Una versione di shell integrata catpotrebbe o meno, ma non è strettamente l'intera shell. Inoltre, se la shell fosse gestita -, potresti dire echo -e si espanderebbe a qualcos'altro. Invece, fa solo eco a un trattino (no /dev/stdino /proc/self/fd/0). E echo test > -crea semplicemente un file chiamato -, quindi chiaramente non lo gestisce nemmeno lì. Oh, e la pagina che hai elencato non dice che è gestita dalla shell , dice che puoi usarla con cate diff, entrambi i quali comprendono i trattini in modo esplicito.
In questo caso, in -realtà è abbastanza inutile, supponendo che tu stia eseguendo Linux:
Tar GNU (la versione su Linux) accetta il suo input dallo standard input di default. Se non si desidera questo comportamento e si desidera passare il nome del file come argomento della riga di comando, è necessario specificare il flag f:
tar xf filename
Quindi questo è lo stesso di
tar x < filename
Oppure, se l'input è compresso come nel tuo esempio:
gzip -dc filename | tar x
Non è significativo specificare fqui il flag, ma poiché è stato specificato, il nome del file deve essere indicato in modo -da indicare che vogliamo leggere dallo standard input (vedi altra risposta). Quindi, per ripetere, questo è ridondante e leggermente strano.
Inoltre, la riga sopra può essere semplificata perché si può dire a GNU tar di trasmettere l'input attraverso gzipse stesso specificando il zflag:
tar xfz filename
- Non è necessario chiamare gzipesplicitamente.
tarhanno zun'opzione.
tarimpostazione predefinita la prima unità nastro, per motivi storici.
/dev/sa0su FreeBSD 9.0, /dev/rst0su NetBSD 6.0 e OpenBSD 5.1). Per impostazione predefinita, AIX 7.1 è /dev/rmt0. L'impostazione predefinita di MINIX3 è /dev/sa0. (Ho controllato la versione del sistema operativo più recente in ogni caso, questi non sono "vecchi mainframe".) Solaris è configurabile tramite un file /etc, che ritengo predefinito su un'unità nastro. Tar GNU, Schilling tar, OSX e BusyBox sono impostati su stdin / stdout.
tarper impostazione predefinita la seconda unità nastro, per ovvi motivi. :)
-non deve essere alla fine del comando. Ad esempio:ls -l | diff - /old_ls_output.txt.