预计阅读本页时间:-
I/O Redirectors
In Chapter 1, you learned about the shell's basic I/O redirectors: >, <, and |. Although these are enough to get you through 95% of your UNIX life, you should know that bash supports many other redirectors. Table 7-1 lists them, including the three we've already seen. Although some of the rest are broadly useful, others are mainly for systems programmers.
Table 7-1. I/O redirectors
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
Redirector
Function
cmd1 | cmd2
Pipe; take standard output of cmd1 as standard input to cmd2.
> file
Direct standard output to file.
< file
Take standard input from file.
>> file
Direct standard output to file; append to file if it already exists.
>| file
Force standard output to file even if noclobber is set.
n>| file
Force output to file from file descriptor n even if noclobber is set.
<> file
Use file as both standard input and standard output.
n<> file
Use file as both input and output for file descriptor n.
<< label
Here-document; see text.
n > file
Direct file descriptor n to file.
n < file
Take file descriptor n from file.
n >> file
Direct file descriptor n to file; append to file if it already exists.
n>&
Duplicate standard output to file descriptor n.
n<&
Duplicate standard input from file descriptor n.
n>&m
File descriptor n is made to be a copy of the output file descriptor.
n<&m
File descriptor n is made to be a copy of the input file descriptor.
&>file
Directs standard output and standard error to file.
<&-
Close the standard input.
>&-
Close the standard output.
n>&-
Close the output from file descriptor n.
n<&-
Close the input from file descriptor n.
n>&word
If n is not specified, the standard output (file descriptor 1) is used. If the digits in word do not specify a file descriptor open for output, a redirection error occurs. As a special case, if n is omitted, and word does not expand to one or more digits, the standard output and standard error are redirected as described previously.
n<&word
If word expands to one or more digits, the file descriptor denoted by n is made to be a copy of that file descriptor. If the digits in word do not specify a file descriptor open for input, a redirection error occurs. If word evaluates to -, file descriptor n is closed. If n is not specified, the standard input (file descriptor 0) is used.
n>&digit-
Moves the file descriptor digit to file descriptor n, or the standard output (file descriptor 1) if n is not specified.
n<&digit-
Moves the file descriptor digit to file descriptor n, or the standard input (file descriptor 0) if n is not specified. digit is closed after being duplicated to n.
Notice that some of the redirectors in Table 7-1 contain a digit n, and that their descriptions contain the term file descriptor; we'll cover that in a little while.
The first two new redirectors, >> and >|, are simple variations on the standard output redirector >. The >> appends to the output file (instead of overwriting it) if it already exists; otherwise it acts exactly like >. A common use of >> is for adding a line to an initialization file (such as .bashrc or .mailrc) when you don't want to bother with a text editor. For example:
$ cat >> .bashrc
alias cdmnt='mount -t iso9660 /dev/sbpcd /cdrom'
^D
As we saw in Chapter 1, cat without an argument uses standard input as its input. This allows you to type the input and end it with CTRL-D on its own line. The alias line will be appended to the file .bashrc if it already exists; if it doesn't, the file is created with that one line.
Recall from Chapter 3, that you can prevent the shell from overwriting a file with > file by typing set -o noclobber. >| overrides noclobber—it's the "Do it anyway, dammit!" redirector.
The redirector <> is mainly meant for use with device files (in the /dev directory), i.e., files that correspond to hardware devices such as terminals and communication lines. Low-level systems programmers can use it to test device drivers; otherwise, it's not very useful.
The rest of the redirectors will only be useful in special situations and you are unlikely to need them most of the time.