Mat*_*ins 70 shell redirection command-line
我知道该>符号用于命令行中的输出重定向,但我无法找到解释2>&1命令行中使用的内容。例如:
curl http://www.google.com > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)
Che*_*ion 87
的1表示标准输出(stdout)。的2表示标准错误(错误)。
所以2>&1说将标准错误发送到标准输出也被重定向的地方。因为它被发送到/dev/null类似于完全忽略任何输出。
Jor*_*ran 32
http://www.google.com在后台获取并丢弃stdout和stderr。
curl http://www.google.com > /dev/null 2>&1 &
是相同的
curl http://www.google.com > /dev/null 2>/dev/null &
0,1和2表示标准文件描述符在POSIX的操作系统。文件描述符是对(基本上)文件或套接字的系统引用。
在 C 中创建一个新的文件描述符看起来像这样:
fd = open("data.dat", O_RDONLY)
Run Code Online (Sandbox Code Playgroud)
大多数 Unix 系统命令接受一些输入并将结果输出到终端。 curl将获取指定 url ( google dot com ) 中的任何内容并将结果显示到stdout.

就像你说的<,>用于将命令的输出重定向到其他地方,比如文件。
例如, in ls > myfiles.txt,ls获取当前目录的内容>并将其输出重定向到myfiles.txt(如果创建不存在的文件,否则被覆盖,但你可以使用>>,而不是>追加到文件,而不是)。如果您运行上面的命令,您会注意到终端没有显示任何内容。这通常意味着在 Unix 系统中取得成功。选中此项cat myfiles.txt以在屏幕上显示文件内容。
第一部分> /dev/null将stdout,即curl的输出重定向到/dev/null(前面有更多内容)并将2>&1重定向stderr到stdout(刚刚重定向到/dev/null因此所有内容都将发送到/dev/null)。
左侧2>&1告诉你什么将被重定向,并且右侧会告诉你哪里来。将&用于右侧区分stdout (1)或stderr (2)从指定的文件1或2。所以,2>1最终会创建一个名为的新文件(如果它不存在)1stderr结果转储到那里。
/dev/null是一个空文件,一种用于丢弃写入其中的所有内容的机制。所以,
curl http://www.google.com > /dev/null是有效地抑制了curl的输出。

但是为什么终端上仍然显示一些东西?。这不是 curl常规输出,而是发送到 的数据stderr,此处用于显示进度和诊断信息,而不仅仅是错误。
curl http://www.google.com > /dev/null 2>&1忽略curl的输出和curl进度信息。结果是终端上没有显示任何内容。
该&在你到底是怎么告诉shell作为运行命令工作的背景。当命令在后台异步运行时,这会导致提示立即返回。jobs在您的终端中查看当前的作业类型。请注意,这与系统中运行的进程不同。top在终端中查看那些类型。
| 归档时间: |
|
| 查看次数: |
133776 次 |
| 最近记录: |