unix-stdin/stdout/stderr
标准输入和输出重定向
外壳和许多UNIX命令采取其输入从标准输入( stdin
),写输出到标准输出 ( stdout
),写错误输出到标准错误 ( stderr
)。 默认情况下,标准输入连接到终端键盘和标准输出和错误到终端屏幕。
的,显示方式结束的终端文件在默认的标准输入,通常是<Ctrl-d>。
本人重定向的输入/输出,例如一个文件,是通过指定的目的地的目的地所需的命令行使用重定向元字符后跟。
C Shell的家庭
为C shell的重定向形式家庭的有:
字符 |
行动 |
---|---|
|
|
|
重定向标准输出和标准错误 |
|
重定向标准输入 |
|
重定向标准输出;覆盖文件,如果它存在 |
|
重定向标准输出和标准错误;覆盖文件,如果它存在 |
|
标准输出重定向到另一个命令(管) |
|
附加标准输出 |
|
附加标准输出和标准错误 |
一个标准的输入和输出重定向命令的形式是:
% 命令 - [ 参数 ] [ 选项 ] < 输入文件 >“ 输出文件
如果你正在使用csh和没有noclobber变量设置,使用>
和>&
重定向输出将覆盖任何现有文件的名称。 设置noclobber可防止这种情况。 用>!
和>&!
总是势力文件被覆盖。 使用>>
和>>&
输出追加到现有文件。
重定向可能失败在某些情况下:1)如果您有变量noclobber设置和您尝试将输出重定向到一个现有的文件,而不强迫一个覆盖,2)如果您重定向输出到一个文件,你没有写访问,并3)如果您将输出重定向到一个目录。
例子:
% who > names
-
标准输出重定向到文件名为
names
% (pwd; ls -l) > out
-
这两个命令的输出重定向到文件名为
out
% pwd; ls -l > out
-
重定向输出
ls
命令只对文件名为一out
输入重定向可以是有用的,例如,如果你写一个Fortran程式,它期望从终端输入,但你希望它从文件中读取。 在下面的例子, myprog
,这是写标准输入读取和写入标准输出重定向到读myin
和写入myout
:
%myprog <myin> myout
您可以取消发送到空设备重定向输出和/或错误导致的, /dev/null
。 这个例子显示了两个输出和错误重定向:
%谁“&/ dev / null的
要重定向标准错误和输出到不同的文件,您可以使用分组:
%(猫myfile的> myout)“&myerror
Bourne Shell的家庭
Bourne shell的重定向使用一个不同的格式,其中包括数字。 这些数字指的是文件描述符数字(0标准输入,1标准输出,2标准错误)。 例如, 2>
重定向文件描述符2,或标准错误。 & n
是文件语法重定向到一个特定的开放。 例如2>&1
重定向2(标准误差)到1(标准输出),如果一已被重定向到一个文件,二去那里了。 其他文件描述符号码顺序分配给其他打开的文件,也可以在shell脚本中明确地引用。 为Bourne shell的家庭重定向形式有:
字符 |
行动 |
---|---|
|
|
|
重定向标准错误 |
|
标准错误重定向到标准输出 |
|
重定向标准输入 |
|
管另一个命令的标准输出 |
|
附加到标准输出 |
|
管标准输出和标准错误到另一个命令 |
请注意, <
和>
假设标准输入和输出,分别为默认,所以关闭数字0和1可离开。 一个标准的输入和输出重定向命令的形式是:
$ 命令 - [ 选项 ] [ 参数 ] < 输入文件 >“ 输出文件
重定向可能失败在某些情况下:1)如果您有变量noclobber设置和您尝试将输出重定向到一个现有的文件,而不强迫一个覆盖,2)如果您重定向输出到一个文件,你没有写访问,并3)如果您将输出重定向到一个目录。
例子:
$ who > names
-
直接输出到文件的标准命名的
names
$ (pwd; ls -l) > out
-
这两个命令直接输出到文件名为
out
$ pwd; ls -l > out
-
直接输出
ls
命令只对文件名为一out
输入重定向可以有用的,如果你写一个程序,它期望从终端输入你想提供的文件中。 在下面的例子, myprog
,这是写标准输入读取和写入标准输出重定向到读myin
和写入myout
。
$ myprog <myin> myout
您可以取消发送到空设备重定向输出和/或错误, /dev/null
。 这个例子显示了错误的唯一标准的重定向:
谁$ 2“/ dev / null的
要重定向标准错误和输出(注意,分组在Bourne shell没有必要)不同的文件:
$猫myfile的> myout 2> myerror