Linux中重定向应注意的事情

引言

你是否见过bash ... 2>&1 1>file.txt的写法? 还没发现这样的写法有什么问题? 那么恭喜你, 看完本文你又将学会一个新知识!

重定向的错误用法

以引言中命令为例, 2>&1表示将错误输出重定向到标准输出, 1>file.txt表示将标准输出重定向到file.txt文件, 看起来的意思就是将标准输出和错误输出全都重定向到file.txt?

错啦! 上述命令只会标准输出重定向到file.txt文件, 而错误输出还是重定向到终端(或者叫做命令行, 控制台, 屏幕). 因为首先解析的是2>&1,此时的1指向的还是标准输出, 即终端, 解析到1>file.txt时, 标准输出才被重定向到file.txt. 下面我将用一个例子来验证我的结论:

test.sh是一个简单的脚本, 会把STDOUT输出到标准输出, 将STDERR输出到错误输出

$ cat test.sh
echo 'STDOUT' >&1
echo 'STDERR' >&2

我们先验证脚本的正确性, 标准输出和错误输出都被正确的捕捉到了, 脚本可以同时输出标准输出和错误输出, 正确性得以验证.
Linux中重定向应注意的事情

现在我们再来验证我一开始的结论, 执行bash ... 2>&1 1>file.txt形式的命令, 可以看到错误输出STDERR被输出到了终端, 而file.txt中仅有标准输出STDOUT
Linux中重定向应注意的事情

那么应该怎么改成我们想要的结果呢? 很简单, 将2>&1和1>file.txt调换个位置即可, 即bash ... 1>file.txt 2>&1; 或者使用bash ... &>file.txt, 都可以达到我们想要的效果
Linux中重定向应注意的事情

Linux中重定向应注意的事情

重定向另外一个值得注意的事项

重定向另外一个需要注意的事项就是: 执行类似于command > file.txt的命令时, 会首先判断file.txt是否存在, 若存在则先清空文件, 若不存在则创建文件, 随后才会执行command

假设有一个已经排好序的文件file.txt, 我们对这个文件去重的话, 执行uniq file.txt > file.txt会直接清空文件
Linux中重定向应注意的事情

想要不生成额外的临时文件做到去重的话, 正确的做法应该是使用管道|配合tee命令, 而不是使用重定向
Linux中重定向应注意的事情

原文链接:https://www.cnblogs.com/wbourne/p/17379592.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux中重定向应注意的事情 - Python技术站

(0)
上一篇 2023年5月8日
下一篇 2023年5月9日

相关文章

  • 在win10和linux上分别安装Python虚拟环境的方法步骤

    针对这个问题,我可以提供以下几个部分的详细攻略: 准备工作 在Win10上安装Python虚拟环境的方法步骤 在Linux上安装Python虚拟环境的方法步骤 接下来,我将分别对以上三个部分进行详细讲解。 一、准备工作 在安装Python虚拟环境之前,我们需要先准备好以下的工具和环境: Python环境:要安装Python虚拟环境,必须先安装Python,并…

    Linux 2023年5月24日
    00
  • Vmware虚拟机怎么向Linux虚拟机拖放文件?

    如果你使用的是Vmware Workstation虚拟机软件,那么你可以按照以下步骤向Linux虚拟机拖放文件: 第一步:选择需要拖放的文件。在Windows宿主机中,找到你想要拖放的文件或文件夹。如果你想要拖放多个文件,可以按住Ctrl键,然后逐一选择它们。 第二步:将文件拖放到虚拟机窗口中。打开Linux虚拟机软件,将它的窗口大小设置为与Windows宿…

    Linux 2023年5月24日
    00
  • docker 在 linux 搭建私有仓库

    1,首先我们需要安装了 docker 的 linux 系统 1,如果没有请先安装, 安装参考 2,安装仓库镜像 1,相关目录和文件的的创建 cd /root mkdir docker cd /root/docker mkdir registry cd /root/docker/registry mkdir registry touch docker-comp…

    Linux 2023年4月12日
    00
  • scala用ssh2连接Linux

    这个需要安装库: import ch.ethz.ssh2.{Connection, Session, StreamGobbler} 首先用 ip 和 post 创建连接: val conn: Connection = new Connection(ipAddr, post) 判断这个连接是否连接上了,这个用了一个 Boolean 类型判断: def logi…

    Linux 2023年4月12日
    00
  • yum install -y zlib zlib-devel 报错问题及解决

    Yum install -y zlib zlib-devel 报错问题及解决 问题描述 在使用 yum install -y zlib zlib-devel 命令时,可能会出现以下错误: Transaction check error: file /usr/share/man/man3/zlib.3.gz from install of zlib-1.2.7…

    Linux 2023年5月14日
    00
  • Linux apachectl命令

    以下是“Linux apachectl命令”的完整使用攻略,包含两个示例说明。 步骤 打开终端并输入以下命令以启动Apache服务器: bash sudo apachectl start 这将启动Apache服务器并开始监听传入HTTP请求。 如果您想停止Apache,请使用命令: bash sudo apachectl stop 这将停止Apache服务器…

    Linux 2023年5月12日
    00
  • KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法

    KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法 介绍 KVM 是一种基于内核的虚拟化技术,可以将一台物理机分割成多个虚拟机。Qemu-kvm 是一种基于 KVM 技术的虚拟机管理软件,可以用来创建、启动、管理和销毁虚拟机。 在本教程中,我们将介绍如何使用Qemu-kvm进行虚拟机的创建和管理。 安装 Qemu-kvm 在 Ubuntu 上,可以…

    Linux 2023年5月24日
    00
  • Linux:进程模型和进程管理

    1 进程与程序 在Linux系统中,执行一个程序或命令就可以触发一个进程,系统会给予这个进程一个ID,称为PID,同时根据触发这个进程的用户与相关属性关系,基于这个PID一组有效的权限设置。如下图所示(图片来自《鸟哥的Linux私房菜》[1]): 举个常见的例子,我们要操作系统的时候通常是利用ssh连接程序或直接在主机上登录,然后获取shell。默认的she…

    Linux 2023年4月17日
    00
合作推广
合作推广
分享本页
返回顶部