gpt4 book ai didi

bash - &> 在 bash 中做什么?

转载 作者:行者123 更新时间:2023-11-29 08:41:12 25 4
gpt4 key购买 nike

我正在查看预提交 Hook 并发现了以下行,因为我想知道为什么在执行提交后我的目录中总是有一个名为 1 的空文件。

git status 2&>1 > /dev/null

我相信我的意图是写下面的内容,我更正了它。

git status 2>&1 > /dev/null

但是,我很好奇以下语法的确切作用,所以我查阅了手册页。

git status 2&>1

这是手册页。

  Redirecting Standard Output and Standard Error
This construct allows both the standard output (file descriptor 1) and
the standard error output (file descriptor 2) to be redirected to the
file whose name is the expansion of word.

There are two formats for redirecting standard output and standard
error:

&>word
and
>&word

Of the two forms, the first is preferred. This is semantically equiva‐
lent to

>word 2>&1

然而,这个手册页暗示两者是等价的,但事实并非如此。

有人可以阐明手册页并准确解释这种语法发生了什么吗?

最佳答案

我们在这里使用的运算符是:

  • > 语法:file_descriptoropt > file_name
  • >& 语法:file_descriptoropt >& file_descriptor
  • &> 语法:&> file_name

如果省略文件描述符,则输入默认为 0 (stdin),输出默认为 1 (stdout)。 2 表示标准错误。

所以我们有:

  • >name 表示 1>name -- 将标准输出重定向到文件 name
  • &>name 类似于 1>name 2>name -- 将 stdout 和 stderr 重定向到文件 name(但是 name 只打开一次;如果你真的写了 1>name 2>name 它会尝试打开 name 两次,而且可能会出现故障)。

所以当你写 git status 2&>1 时,它就像 git status 2 1>1 2>1 ,即

  • 第一个 2 实际上作为参数传递给 git status
  • stdout 被重定向到名为 1 的文件(不是文件描述符 1)
  • stderr 被重定向到名为 1 的文件

这个命令实际上应该创建一个名为 1 的文件,其内容是 git status 2 的结果——即名为 2< 的文件的状态 这可能是“你的分支是最新的,没有什么可提交的,工作目录是干净的”,假设你实际上没有跟踪名为 2 的文件。

关于bash - &> 在 bash 中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24793069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com