剖析cmd file 21 和 cmd file 2file 的差别

2024-05-07 10:48
文章标签 21 剖析 file cmd 差别 2file

本文主要是介绍剖析cmd file 21 和 cmd file 2file 的差别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先看例子:
  1. r2007@www r2007 $ (echo -n 123456;sleep 1;echo -n abc >&2;sleep 1;echo -n 789)>puzzle 2>puzzle
  2. r2007@www r2007 $ cat puzzle
  3. abc456789
  4. r2007@www r2007 $ (echo -n 123456;sleep 1;echo -n abc >&2;sleep 1;echo -n 789)>puzzle 2>&1
  5. r2007@www r2007 $ cat puzzle
  6. 123456abc789
复制代码

为了强调每个输出都是step by step,所以加了sleep命令,其实可以省略。(echo ....)等同于一个cmd命令,在这里用一组echo命令是为了能清晰的看到整个操作过程。
第一种用法实际上同时打开2次puzzle文件。过程如下:
>puzzle ---- 打开puzzle文件(打开文件的操作会在核心中产生一个数据结构-假设叫做foo结构,其中有很多参数,比如file position-以下简称fp,就是其中之一),然后fd1(标准输出)保存着这个指针(具体结构没做深入分析,姑且简化为保存了一个指针),总而言之,通过fd1可以引用到这个核心中的数据结构。
2>puzzle --- 基本同上,再次打开这个文件,核心中会产生一个新的数据结构,同时fd2(标准错误输出)保存了这个结构的指针。
一开始,这两个foo结构中的fp都是0,第一个echo在puzzle文件写入了123456,同时fd1所指向的foo结构中的fp变为6,然后第二个echo要在puzzle文件写入abc,但是它得到的fp是fd2所指向的foo结构中的fp,所以仍然从文件头开始写,所以puzzle中的内容变为abc456,第三个echo就不再罗嗦一遍了,它是从6这个位置开始写操作的。

为什么cmd >file 2>&1这种模式就不会发生混乱呢?
就是因为2>&1,不是再打开一次文件,而是fd2照抄fd1,这两个fd共用一个foo结构,所以它们使用的fp也是同一个。

以下例子可以加深理解这个道理:
  1. (echo -n 123;sleep 1;echo -n abcde >&2;sleep 1;echo -n 789) >puzzle 2>puzzle
  2. 结果:abc789
复制代码

  1. (echo -n 123;sleep 1;echo -n abcdeghij >&2;sleep 1;echo -n 789) >puzzle 2>puzzle
  2. 结果:abc789hij
复制代码


对于编程我是个外行,其中如有错误的概念,欢迎指正。



来源:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=764727

这篇关于剖析cmd file 21 和 cmd file 2file 的差别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/967133

相关文章

21.手绘Spring IOC运行时序图

1.再谈IOC与 DI IOC(lnversion of Control)控制反转:所谓控制反转,就是把原先我们代码里面需要实现的对象创 建、依赖的代码,反转给容器来帮忙实现。那么必然的我们需要创建一个容器,同时需要一种描述来让 容器知道需要创建的对象与对象的关系。这个描述最具体表现就是我们所看到的配置文件。 DI(Dependency Injection)依赖注入:就是指对象是被动接受依赖类

BD错误集锦5——java.nio.file.FileSystemException 客户端没有所需的特权

问题:在运行storm本地模式程序时,java.nio.file.FileSystemException  客户端没有所需的特权   解决方式:以管理员身份运行IDEA即可。

BD错误集锦1——[Hive]ERROR StatusLogger No log4j2 configuration file found. Using default configuration:

错误描述:在使用IDEA进行jdbc方式连接到hive数据仓库时,出现以下错误:                ERROR StatusLogger No log4j2 configuration file found. 问题原因:缺少log4j2.xml文件   <?xml version="1.0" encoding="UTF-8"?><Configuration><Appender

iOS:编译时出现no such file or directory:xxx以及use twice...filenames are used to distinguish private dec

简    注册  登录   添加关注 作者  婉卿容若 2016.04.29 11:22 写了21870字,被16人关注,获得了14个喜欢 iOS:编译时出现"no such file or directory:xxx"以及"use twice...filenames are used to distinguish private

6月21日训练 (东北林业大学)(个人题解)

前言:   这次训练是大一大二一起参加的训练,总体来说难度是有的,我和队友在比赛时间内就写出了四道题,之后陆陆续续又补了了三道题,还有一道题看了学长题解后感觉有点超出我的能力范围了,就留给以后的自己吧。话不多说,上正文。 正文:   Problem:A 幸运数字: #include <bits/stdc++.h>using namespace std;int sum,ans;in

【剖析】为什么说RBF神经网络的误差为0

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 机器学习中的模型非常的多,但如果要问有没有这样的一个模型,它的训练误差为0,那么就非RBF神经网络莫属了!下面我们来聊聊,为什么RBF神经网络的训练误差为0。 一、RBF神经网络是什么 知道RBF神经网络的人都知道,但不知道RBF神经网络的人还是不知道。所以简单提一下,RBF神经网络是一个什么东西。

vue dist文件打开index.html报Failed to load resource: net::ERR_FILE_NOT_FOUND

本地正常。打包好的dist文件打开index.html报Failed to load resource: net::ERR_FILE_NOT_FOUND 解决办法: 在webpack.prod.conf.js 中output添加参数publicPath:’./’ 在webpack.base.conf.js里 publicPath: process.env.NODE_ENV === ‘pro

github 报错 git fatal: unable to write new index file

错误一:git fatal: unable to write new index file主要原因就是服务器磁盘空间不够导致的,增加服务器空间就OK了在百度上面搜索没得到什么有效信息,在gooogle上搜索得到很多有效信息 Finding large directories with something like the following helped clean up some log fi

更改 windows 下 cmd(dos) 编码方式

chcp 命令, chcp 65001 就是换成UTF-8代码页 chcp 936 可以换回默认的GBK chcp 437 是美国英语 DOS命令CHCP简介编辑 功能:显示或设置活动 代码页编号 CHCP [nnn] nnn 指定 代码页编号。 不加参数键入 CHCP 显示活动 代码页编号。 nnn指定一已有的系统字符集,该字符集在CONFIG.SYS文件中由COU

HTML(21)——CSS精灵

CSS精灵,也叫CSS Sprites,是一种网页图片应用处理方式。把网页中一些背景图片整合到一张图片的文件中,再background-position精确定位出背景图片的位置。 优点:减少服务器被请求的次数,减轻服务器的压力,提高页面加载速度。 实现步骤: 创建盒子,盒子尺寸与小图尺寸相同设置盒子背景图为精灵图添加background-position属性,改变背景图位置