1. 输入和输出

    改变输入或输出的默认路径就叫重定向。

0:标准输入

1:标准输出

2:标准错误


标准输入特点:

它是默认的输入方法,它被所有命令使用来读取输入。

它用数字0表示

它也被称作stdin

默认的标准输入设备是键盘

操作符"<"是输入重定向操作符。

command < input_filename


标准输出:

它被命令用来写入或显示命令自身的输出

它用数字1表示

它也被称作stdout

默认的标准输出设备是屏幕。

操作符">"是输出重定向操作符。

command > output_filename


标准错误:

它是默认的错误输出方法,它被用于写入所有系统错误信息。

它用数字2表示

它也被成为stderr

默认的标准输出设备是屏幕或显示器。

操作符"2>"是标准错误重定向操作符。

command 2> errors_filename


2.重定向

在linux系统中,总有3个默认的设备文件是打开的,即标准输入、标准输出、标准错误。这三个文件和其他地方被打开的文件,都可以被重定向。重定向简单地说就是从文件、命令、程序、脚本、甚至是脚本中代码块获取输出并把它作为输入发送到另一文件、命令、程序或脚本。

每个打开的文件被指定一个描述。0、1、2分别为标准输入 输出 错误。对于打开的另外的文件,这里余留了文件描述符3-9.


文件重定向:

输出到文件

command > file

从文件输入

command < file

{

read line1

read line2

}<file


while read LINE

do

 commands

done < file

if true; then

 read LINE

fi < file


从文本或字符串输入

here-documents

command <<[-]MARKER

 here document

MARKER

- 标识忽略行首的制表符

command <<< WORD

tr a-z A-Z <<<"one two three"

例:

空文件创建

>file

>logfile

丢弃不需要的输出

command > /dev/null

标准错误重定向

command 2> /tmp/error.log

command 2>> /tmp/error.log

标准输出重定向

command > outfile

标准错误和标准输出同时重定向

command &> file

command >& file

command > file 2>&1

command 2>&1 >file

追加重定向

符号">>" 用于追加重定向输出

command >> filename

单个命令行进行标准输入输出重定向

command < input-file > output-file

3.文件描述符

Shell有时会引用使用文件描述符(fd)的文件。一般fd 0-9 大于9的文件描述符要谨慎使用,因为它们可能与Shell内部使用的文件描述符冲突。


有些文件描述符是在Shell启动时被建立的,这就是我们前面介绍的标准输入、标准输出和标准错误(0,1,2)文件描述符。


使用exec命令

exec 2>errfile 

之后的所有命令,标准错误输出都会到errfile里


exec 3<$1


while read -u 3 line

do

 echo $line

read -p "Press any key:" -n 1

done

#关闭文件描述符3

exec 3&-


指定用于输入的文件描述符

exec [n]<file

其中,[n]即文件描述符,如果不指定n,则标识标准输入(即文件描述符0)

指定后,就可以从文件描述符n上读取此文件的内容。

例:

exec 3< /etc/passwd

grep root <& 3

操作符"&<",它也是一种重定向操作符,用于复制输入文件描述符。

[n]<&word

如果word是数字,则用n表示文件描述符作为文件描述符word的副本。


指定用于输出的文件描述符

给一个输出文件指定一个文件描述符

exec [n]>file

exec 4> /tmp/out.file

[n]>&word

操作符">&",复制输出描述符

如果n没指定,则表示标准输出。


关闭文件描述符

[n]<&-

或[n]>&-


打开用于读写的文件描述符

exec [n]<>file