BASH & CSH linux 重定向(ZZ)
(2016-05-15 12:16:34)bash:
FROM:
应该允许输入来自以下两种方式:
-
在命令行上指定的文件名。例如:
$ command input_file
在这个例子中,command 应该读取文件 input_file。
-
标准输入(stdin),缺省情况下为终端(也就是用户的键盘)。例如:
$ command
这里,用户输入 Control-D(文件结束指示符)前输入的所有内容都成为 command 的输入。
但是,使用 shell 操作符“<”(重定向标准输入),也可将标准输入重定向为来自文件,如下所示:
$ command < input_file |
这里,command 会读它的标准输入,不过 shell/内核已将其重定向,所以标准输入来自 input_file。
使用 shell 操作符“|”(pipe)也可以使标准输入来自另一个程序的标准输出,如下所示:
$ other_command | command |
这里,other_command 的标准输出(stdout)被 shell/内核透明地传递至 command 的标准输入。
输出应该被写至标准输出,缺省情况下标准输出同样也是终端(也就是用户的屏幕):
$ command |
在这个例子中,command 的输出出现在屏幕上。
同样,使用 shell 操作符“>”(重定向标准输出)可以将标准输出重定向至文件。
$ command > output_file |
这里,command 仍然写至它的标准输出,不过 shell/内核将其重定向,所以输出写至 output_file。
或者,还是使用“|”操作符,command 的输出可以成为另一个程序的标准输入,如下所示:
$ command | other_command |
在这个例子中,shell/内核安排 command 的输出成为 other_command 的输入。
错误输出应该被写至标准错误(stderr),缺省情况下标准错误同样也是终端(也就是用户的屏幕):
$ command |
这里,运行 command 时出现的任何错误消息都将被写至屏幕。
但是使用标准错误重定向,也可以将错误重定向至文件。例如:
$ command 2>error_file |
在这个例子中,command 的正常输出在屏幕显示,而任何错误消息都被写至 error_file。
可以将标准输出和标准错误都重定向至不同的文件,如下所示:
$ command >output_file 2>error_file |
这里,将标准输出写至 output_file,而将所有写至标准错误的内容都写至 error_file。
如果已将标准输出重定向至某一位置,也可以将标准错误重定向至同一位置。例如:
$ command 2>&1 |
在这个例子中,符号“2>&1”表示“将标准错误发送至标准输出被重定向的任何位置”,因此错误和正常的消息都将在屏幕上显示。当然,这是多余的,因为下面简单的调用
$ command |
将做同样的事。在标准输出已被重定向至其它源,而您希望在同一命令行上将标准错误也写至同一目的地时,该特性就非常有用。例如:
$ command >output_file 2>&1 |
在这个例子中,已首先将标准输出重定向至 output_file;因此“2>&1”将使标准错误也被重定向至 output_file。
in UNIX
0 = stdin
1 = stdout
2 = stderr
预先的知识一:
引用: noclobber
变量设定语法set noclobber
取消变量设定语法 unset noclobber
仅用两个例子让读者明白,设定后的实际使用状况。
例子一:
%ps axu > testfile
% set noclobber
% echo "test set noclobber" > testfile
testfile: File exists.
% echo "test set noclobber" >! testfile
%
%set noclobber
% cat /etc/passwd >> nopass
nopass: No such file or directory
% cat /etc/passwd >>! nopass
%
预先的知识二:
引用: 输入输出位置文件句柄:
STDIN(标准输入/Standard
STDOUT(标准输出/Standard
STDERR(标准错误/Standard
引用:
>file
将
>>file
command
将文件重定向到
command
<<word
读取在线输入直到word(结束输入时,结束行输入word),
command
<<\word
读取在线输入直到word(结束输入时,结束行输入word),
command
<<-word
读取在线输入直到word(结束输入时,结束行输入word),
command
>>!file
将
command
>!file
将
command
>&file
将
command
>>& csh
将
command
<&digit
切换
command
<&-
关闭
command
>&digit
切换
command
>&-
关闭
command
>&! csh
将
command
>>&! csh
将
command
预先的知识二:
引用: 输入输出位置文件句柄:
STDIN(标准输入/Standard Input) 0
STDOUT(标准输出/Standard output) 1
STDERR(标准错误/Standard error) 2
引用:
>file
将 STDOUT(标准输出/Standard output) 重定向到文件
(command > file)
>>file
将 STDOUT(标准输出/Standard output) 字符串加到文件内容之后
(command >> file
>>!file
将 STDOUT(标准输出/Standard output) 字符串追加到文件内容之后,当设定 $noclobber 时,可重写文件。
(command >>! file)
>!file
将 STDOUT(标准输出/Standard output) 重定向到新文件,当设定 $noclobber 时,可重写文件。
(command >! file)
>&file
将 STDOUT(标准输出/Standard output) 及 STDERR(标准错误/Standard error) 重定向到文件
(command >& file)
>>&file csh
将 STDOUT(标准输出/Standard output) 及 STDERR(标准错误/Standard error) 字符串追加到文件内容之后
(command >>& file)
cmd.log 2
>&digit
切换 STDOUT(标准输出/Standard output) 到文件句柄
(command >cmd.log 2>&1)
>&-
关闭 STDOUT(标准输出/Standard output)
(command >&-)
>&! csh
将 STDOUT(标准输出/Standard output) 及 STDERR(标准错误/Standard error) 重定向到文件,当设定 $noclobber 时,可重写文件。
(command >&! file)
>>&! csh
将 STDOUT(标准输出/Standard output) 及 STDERR(标准错误/Standard error) 字符串加到文件内容之后,当设定 $noclobber 时,可重写文件。
(command >>&! file)