English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La maggior parte dei comandi del sistema UNIX accetta l'input dal terminale e invia i risultati di output al terminale. Un comando di solito legge l'input da un luogo chiamato input standard, per impostazione predefinita, questo è il terminale. Allo stesso modo, un comando di solito scrive l'output sullo standard output, per impostazione predefinita, questo è anche il terminale.
L'elenco dei comandi di ridirezione è il seguente:
Comando | Spiegazione |
---|---|
command > file | Ridireziona l'output a file. |
command < file | Ridireziona l'input a file. |
command >> file | Ridireziona l'output in appendimento a file. |
n > file | Ridireziona il file descrittore n del file a file. |
n >> file | Ridireziona il file descrittore n del file in appendimento a file. |
n >& m | Unisci i file di output m e n. |
n <& m | Unisci i file di input m e n. |
<< tag | Considera il contenuto tra i tag di inizio tag e il tag di fine come input. |
È necessario notare che il descrittore di file 0 è di solito l'input standard (STDIN), 1 è l'output standard (STDOUT), 2 è l'output di errore standard (STDERR).
Il reindirizzamento è generalmente realizzato inserendo simboli specifici tra i comandi. In particolare, la sintassi di questi simboli è come segue:
command1 > file1
Questo comando esegue command1 e memorizza il contenuto dell'output nel file file1.
Attenzione: il contenuto esistente all'interno di file1 sarà sostituito dal nuovo contenuto. Se si desidera aggiungere il nuovo contenuto alla fine del file, utilizzare l'operatore >>.
Esegui il comando who seguente, che reindirizza l'output completo del comando nel file utente (users):
$ who > users
Dopo l'esecuzione, non ci sono state informazioni output nel terminale, perché l'output è stato reindirizzato al dispositivo di output standard predefinito (terminale) al file specificato.
Puoi utilizzare il comando cat per visualizzare il contenuto del file:
$ cat users _mbsetupuser console Ott 31 17:35 tianqixin console Ott 31 17:35 tianqixin ttys000 Dic 1 11:33
Il reindirizzamento dell'output sovrascrive il contenuto del file, vedere l'esempio seguente:
$ echo "Sito web della guida di base: it.oldtoolbag.com" > users $ cat users Sito web della guida di base: it.oldtoolbag.com $
Se non si desidera che il contenuto del file venga sovrascritto, è possibile utilizzare >> per aggiungere al fondo del file, ad esempio:
$ echo "Sito web della guida di base: it.oldtoolbag.com" >> users $ cat users Sito web della guida di base: it.oldtoolbag.com Sito web della guida di base: it.oldtoolbag.com $
Allo stesso modo del reindirizzamento dell'output, i comandi Unix possono anche ottenere l'input da un file, la sintassi è:
command1 < file1
In questo modo, i comandi che avrebbero richiesto l'input da tastiera vengono trasferiti alla lettura di contenuti da un file.
Attenzione: la reindirizzamento dell'output è rappresentato dal simbolo '>', mentre il reindirizzamento dell'input è rappresentato dal simbolo '<'.
Continuando con l'esempio precedente, dobbiamo contare il numero di righe del file users, eseguiamo il seguente comando:
$ wc -l users 2 users
Puoi anche reindirizzare l'input al file users:
$ wc -l < users 2
Attenzione: i risultati dei due esempi precedenti sono diversi: nel primo esempio, viene outputto il nome del file; nel secondo non lo è, perché sa solo leggere il contenuto dall'input standard.
command1 < infile > outfile
Sostituisci contemporaneamente l'input e l'output, esegui command1, leggi il contenuto dal file infile e scrivi l'output nel file outfile.
Di solito, ogni comando Unix/Linux apre tre file durante l'esecuzione:
File di input standard (stdin): Il descrittore di file di stdin è 0, i programmi Unix leggono dati di default dal stdin.
File di output standard (stdout): Il descrittore di file di stdout è 1, i programmi Unix scrivono dati di output di default nel stdout.
File di errore standard (stderr): Il descrittore di file di stderr è 2, i programmi Unix scrivono informazioni di errore nel flusso stderr.
Di default, command > file ridirige stdout a file, command < file ridirige stdin a file.
Se si desidera ridirezionare stderr a un file, si può scrivere così:
$ command 2>file
Se si desidera aggiungere stderr alla fine del file, si può scrivere così:
$ command 2>>file
2 Rappresenta il file di errore standard (stderr).
Se si desidera ridirezionare stdout e stderr in un file combinato, si può scrivere così:
$ command > file 2>&1 o $ command >> file 2>&1
Se si desidera ridirezionare sia stdin che stdout, si può scrivere così:
$ command < file1 >file2
Il comando command ridirige stdin a file1 e stdout a file2.
Here Document è un modo speciale di ridirezionamento degli input nel Shell, utilizzato per ridirezionare gli input a uno script o programma Shell interattivo.
La sua forma di base è la seguente:
command << delimiter document delimiter
Il suo ruolo è trasmettere il contenuto (document) tra i due delimiter come input al comando.
注意:
Il delimiter alla fine deve essere allineato a sinistra, senza alcun carattere prima o dopo, inclusi spazi e tabulazioni.
Gli spazi prima e dopo il delimiter vengono ignorati.
在命令行中通过 wc -l 命令计算 Here Document 的行数:
$ wc -l << EOF 欢迎来到 网站教程基础 it.oldtoolbag.com EOF 3 # 输出结果为 3 行 $
我们也可以将 Here Document 用在脚本中,例如:
#!/bin/bash # author:网站教程基础 # url:it.oldtoolbag.com cat << EOF 欢迎来到 网站教程基础 it.oldtoolbag.com EOF
执行以上脚本,输出结果:
欢迎来到 网站教程基础 it.oldtoolbag.com
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:
$ command > /dev/null
/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。
如果希望屏蔽 stdout 和 stderr,可以这样写:
$ command > /dev/null 2>&1
注意:0 是输入标准(STDIN),1 是输出标准(STDOUT),2 是输出错误标准(STDERR)。
这里 2 和 > 空格不可以之间2> 一体表示错误输出才