LINUX 标准错误输出重定向

LINUX 标准错误输出重定向,第1张

用途:不挂断地运行命令。

语法:nohup Command [ Arg … ] [ &]

无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。

如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。

退出状态:该命令返回下列出口值:

126 可以查找但不能调用 Command 参数指定的命令。

127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。

否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

用途:在后台运行

一般两个一起用

3.为什么呢 2>&1 要写在后面?

首先是command >file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。

2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。

用strace可以看到:

这个命令中实现重定向的关键系统调用序列是:

open(file) == 3

dup2(3,1)

dup2(1,2)

这个命令中实现重定向的关键系统调用序列是:

dup2(1,2)

open(file) == 3

dup2(3,1)

注意:0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

这里的2和>之间不可以有空格,2>是一体的时候才表示错误输出。

一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符

文件描述符为0,小于号表示数据由文件流入命令

usage:

命令 <file

#加入输入重定向,对输入文件进行计数

wc -l </etc/passwd

文件描述符为1,大于号表述数据由命令流入文件

所以: echo "hello" >t.log 也可以写成 echo "hello" 1 >t.log

> 会把文件的内容清空,再输入到新的文件

>> 会把当前内容保持不变,然后在下一行进行追加

2> 错误重定向,如果当前命令产生了错误,会把错误重定向到文件中,而不会打印到屏幕

&> 无论内容正确还是错误都会把文件输出到文件中。

stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

默认情况下, command >file 将stdout 重定向到 file, command <file 将stdin 重定向到 file。

如果希望 stderr 重定向到 file,可以这样写:

$ command 2>file

如果希望 stderr 追加到 file 文件末尾,可以这样写:

$ command 2>>file 2 表示标准错误文件(stderr)

如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写:

$ command >file 2>&1 或者 $ command >>file 2>&1

如果希望对 stdin 和 stdout 都重定向,可以这样写:

$ command <file1 >file2

command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2。

含义:将标准错误输出 重定向到 标准输出。

符号>&是一个整体,不可分开,分开后就不是上述含义了。

比如有些人可能会这么想:2是标准错误输入,1是标准输出,>是重定向符号,那么"将标准错误输出重定向到标准输出"是不是就应该写成"2>1"就行了?是这样吗? 如果是尝试过,你就知道2>1的写法其实是将标准错误输出重定向到名为"1"的文件里去了


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8338356.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存