我只是想知道如何知道我们通常在shell 命令中首先放置哪条指令? 例如, 为什么使用该命令:

ls -l file_doesnot_exists > /dev/null 2>&1

正在工作,而此命令:

ls -l 2>&1 file_doesnot_exists > /dev/null

不是

推荐答案

注:

  • 问题被标记为linux,这意味着ls是PowerShell自己的Get-ChildItem cmdlet(仅适用于Windows)的内置别名not,而是指标准的/bin/ls Unix实用程序.

  • PowerShell中,您的命令之间有no个差异,因为order of 100 does NOT matter.

    • 所有目标output streams始终保持其身份:流的任何重定向都会影响同一命令中到相同流的任何其他重定向.

    • 因此,neither of your commands work as intended and produce no output,因为虽然2>&1将错误流(2)重定向到成功输出流(1),但由于> /dev/null(>1>相同),后者的输出最终是discarded,including是重定向的错误流输出.

  • 相比之下,在POSIX-compatible shells such as Bash中,order of redirections DOES matter:

    • ls -l 2>&1 file_doesnot_exists > /dev/null WORKS按计划:

      • 2>&1将stderr输出重定向到original标准输出.
      • 标准输出的later重定向(>1>相同)对2>&1no影响
      • 最终结果是只有stderr行打印到stdout,而stdout行被丢弃(通过重定向到/dev/null).
    • 相比之下,ls -l file_doesnot_exists > /dev/null 2>&1DOES NOT的yields 为no output:

      • > /dev/null将标准输出重定向到/dev/null,即有效地discards标准输出.

      • 因为在命令中2>&1等于later,所以1引用already redirected标准输出,因此stderr输出也被丢弃.

    • 有关详细信息,请参阅this answer.

Linux相关问答推荐

我使用Windows 10,但我无法在我的WSL2上下载vscode

如何将netcdf文件列表中的特定变量添加到不同的文件中?

使用信号处理程序实现Hibernate 功能

如何让xargs对 bash 脚本中find命令找到的所有文件执行?

如何在具有多种可能性的linux shell中获取最大值和最小值?

在 Rust 中重命名主线程

使用 sed 或 awk 在 linux 中将第一行中的一个单词替换为第二行中的另一个单词

如何在 Linux 上使用 Python 判断进程是否仍在运行?

如何在 Linux 命令行上解析 CSV 文件?

如何将执行的shell命令的结果存储在python的变量中?

为什么 mmap() 比顺序 IO 快?

为什么`du`的输出通常与`du -b`如此不同

`是什么意思! -d` 在这个 Bash 命令中?

命令列出除 . (点)和..(点点)

Ant 找不到 javac,在 Ubuntu 上不会设置 JAVA_HOME

rename() 是原子的吗?

Linux SCHED_OTHER、SCHED_FIFO 和 SCHED_RR - 区别

在不运行测试的情况下制作(从源代码安装)python

如何安排 tcpdump 在特定时间段内运行?

Linux:删除多个文件的文件扩展名