示例:
$ cat food 2>&1 >file
cat: can't open food
$ cat food >file 2>&1
为什么只有第二个命令才能把标准输出(stdout)和标准错误(stderr)重定向到文件file中?
在第一个命令中,shell里首先是2>&1,意味着标准错误重定向到与标准输出同样的地方。这无任何效果,因为两部分都重定向到屏幕上(省缺)。然后>file重定向标准输出到file,但标准错误仍然定向到终端。
在第二个命令中,shell里首先是>file,意味着标准输出重定向到file。然后 2>&1将标准错误重定向到与标准输出同样的地方,即file。这也是我们想要的。
其它常用重定向的命令
command > filename 把标准输出重定向到一个新文件中
command >> filename 把标准输出重定向到一个文件中(追加)
command 1 > fielname 把标准输出重定向到一个文件中
command 1 >> fielname 把标准输出重定向到一个文件中(追加)
command 2 > filename 把标准错误重定向到一个文件中
command 2 >> filename 把标准错误重定向到一个文件中(追加)
command < filename 把filename文件作为标准输入
command << delimiter 从标准输入中读入,直至遇到delimiter分界符
command <&m 把把文件描述符m作为标准输入
command >&m 把把标准输出重定向到文件描述符m中
command <&- 关闭标准输入
背景知识:
我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名。下面就是这些文件描述符及它们通常所对应的文件名:
输入文件—标准输入 0 缺省是键盘
输出文件—标准输出 1 缺省是屏幕
错误输出文件—标准错误 2 缺省是屏幕
$ cat food 2>&1 >file
cat: can't open food
$ cat food >file 2>&1
为什么只有第二个命令才能把标准输出(stdout)和标准错误(stderr)重定向到文件file中?
在第一个命令中,shell里首先是2>&1,意味着标准错误重定向到与标准输出同样的地方。这无任何效果,因为两部分都重定向到屏幕上(省缺)。然后>file重定向标准输出到file,但标准错误仍然定向到终端。
在第二个命令中,shell里首先是>file,意味着标准输出重定向到file。然后 2>&1将标准错误重定向到与标准输出同样的地方,即file。这也是我们想要的。
其它常用重定向的命令
command > filename 把标准输出重定向到一个新文件中
command >> filename 把标准输出重定向到一个文件中(追加)
command 1 > fielname 把标准输出重定向到一个文件中
command 1 >> fielname 把标准输出重定向到一个文件中(追加)
command 2 > filename 把标准错误重定向到一个文件中
command 2 >> filename 把标准错误重定向到一个文件中(追加)
command < filename 把filename文件作为标准输入
command << delimiter 从标准输入中读入,直至遇到delimiter分界符
command <&m 把把文件描述符m作为标准输入
command >&m 把把标准输出重定向到文件描述符m中
command <&- 关闭标准输入
背景知识:
我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名。下面就是这些文件描述符及它们通常所对应的文件名:
输入文件—标准输入 0 缺省是键盘
输出文件—标准输出 1 缺省是屏幕
错误输出文件—标准错误 2 缺省是屏幕