1、首先,bash中0,1,2三个数字分别代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即标准输入(一般是键盘),标准输出(一般是显示屏,准确的说是用户终端控制台),标准错误(出错信息输出)。

2、输入输出可以重定向,所谓重定向输入就是在命令中指定具体的输入来源,譬如 cat < test.c 将test.c重定向为cat命令的输入源。输出重定向是指定具体的输出目标以替换默认的标准输出,譬如ls > 1.txt将ls的结果从标准输出重定向为1.txt文本。有时候会看到如 ls >> 1.txt这类的写法,> 和 >> 的区别在于:> 用于新建而>>用于追加。即ls > 1.txt会新建一个1.txt文件并且将ls的内容输出到新建的1.txt中,而ls >> 1.txt则用在1.txt已经存在,而我们只是想将ls的内容追加到1.txt文本中的时候。

3、默认输入只有一个(0,STDIN_FILENO),而默认输出有两个(标准输出1 STDOUT_FILENO,标准错误2 STDERR_FILENO)。因此默认情况下,shell输出的错误信息会被输出到2,而普通输出信息会输出到1。但是某些情况下,我们希望在一个终端下看到所有的信息(包括标准输出信息和错误信息),要怎么办呢?

对了,你可以使用我们上面讲到的输出重定向。思路有了,怎么写呢? 非常直观的想法就是2>1(将2重定向到1嘛),行不行呢?试一试就知道了。我们进行以下测试步骤:

1)mkdir test && cd test                ; 创建test文件夹并进入test目录

2)touch a.txt b.c c                          ; 创建a.txt b.c c 三个文件

3)ls > 1                                           ; 按我们的猜测,这句应该是将ls的结果重定向到标准输出,因此效果和直接ls应该一样。但是实际这句执行后,标准输出中并没有任何信息。

4)ls                                                  ; 执行3之后再次ls,则会看到test文件夹中多了一个文件1

5)cat 1                                            ; 查看文件1的内容,实际结果为:1 a.txt b.c c     可见步骤3中 ls > 1并不是将ls的结果重定向为标准输出,而是将结果重定向到了一个文件1中。即1在此处不被解释为STDOUT_FILENO,而是文件1。

4、到了此时,你应该也能猜到2>&1的用意了。不错,2>&1就是用来将标准错误2重定向到标准输出1中的。此处1前面的&就是为了让bash将1解释成标准输出而不是文件1。至于最后一个&,则是让bash在后台执行。

bash中 21 的解释相关推荐

  1. shell学习(17)- shell中21的解释及输入输出重定向

    大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准输出,默 ...

  2. 如何检查Bash中是否设置了变量?

    我如何知道是否在Bash中设置了变量? 例如,如何检查用户是否将第一个参数赋予函数? function a {# if $1 is set ? } #1楼 检查是否设置了变量 var="&q ...

  3. 如何在Bash中的分隔符上拆分字符串?

    我将此字符串存储在变量中: IN="bla@some.com;john@home.com" 现在我想用拆分字符串; 分隔符,以便我有: ADDR1="bla@some.c ...

  4. Linux命令中21个不太好搜索其含义的特殊符号你都知道吗?

    Linux命令中有一些常用符号,看到时不一定好查询它们的功能和含义,这里列举一些常见的符号和解释,欢迎大家补充完善. |: 管道符,在两个相邻命令之间传递数据:如ls | head把ls命令的输出传给 ...

  5. 如何在Bash中加入数组元素?

    如果我在Bash中有这样的数组: FOO=( a b c ) 如何用逗号将元素加入? 例如,产生a,b,c . #1楼 重复使用@无关紧要的解决方案,但是通过避免$ {:1}的替换和避免中间变量的使用 ...

  6. Bash中的管道输出和捕获退出状态

    我想执行Bash中长时间运行的命令,都捕获它的退出状态,并且发球它的输出. 所以我这样做: command | tee out.txt ST=$? 问题在于变量ST捕获了tee而不是命令的退出状态. ...

  7. linux相等路径,关于linux:如何检查Bash中两条路径是否相等?

    在Bash中检查两条路径是否相等的最佳方法是什么? 例如,给定目录结构 ~/ Desktop/ Downloads/ (symlink to ~/Downloads) Downloads/ photo ...

  8. shell变量加单引号sql_关于shell:在Bash中的命令中扩展变量的单引号

    我想从bash shell脚本中运行一个命令,该脚本在单引号和变量中包含单引号和一些其他命令. 如repo forall -c '....$variable'. 在这种格式中,对$进行转义,不展开变量 ...

  9. 堆叠自编码器中的微调解释_25种深刻漫画中的编码解释

    堆叠自编码器中的微调解释 by freeCodeCamp 通过freeCodeCamp 25种深刻漫画中的编码解释 (Coding Explained in 25 Profound Comics) W ...

最新文章

  1. 神经元之间是如何形成“社交网络”的
  2. Linux文件基本属性
  3. app测试-兼容性测试与云测试技术
  4. bash脚本切换管理员_开始为系统管理员使用Bash脚本
  5. 63. 不同路径 II(JavaScript)
  6. linux系统下tar打包压缩命令的使用总结
  7. 数据结构与算法之-----栈的应用(二)
  8. 如何为项目中的单个文件禁用ARC?
  9. 数据结构在程序中的实现及表现形式
  10. HDU 4746 Mophues(莫比乌斯反演)题解
  11. 雷军自述:我十年的程序员生涯
  12. 数据洞察|Qtum量子链4月主网报告
  13. 数据库小白 T-SQL练习500题 超详细!带素材!持续更新中~
  14. JSON.stringify用法
  15. mybatis中获取当前时间_mybatis 在xml文件中获取当前时间的sql
  16. 异步社区两周年 - 技术图书免费送(活动已结束)
  17. 本地快速搭建FTP服务器
  18. 配置Model Optimizer的Python 3.7.4 ECHO 处于关闭状态。‘pip3‘ 不是内部或外部命令,也不是可运行的程序或批处理文件
  19. java pdf 转图片
  20. 计算机无steam服务,有了这个,或许以后都不用登录电脑的Steam了

热门文章

  1. 2015年绿盟面试题
  2. Windows 8 应用开发 - 应用栏
  3. Statement与PreparedStatement区别
  4. tomcat中的目录映射
  5. 12款界面精美的 HTML5 CSS3 网站模板
  6. 用户注册,用邮箱来验证用户是否存在
  7. 51CTO,什么情况?
  8. c++实现全局优化的了望算法
  9. 无法更改域名 php网页,WordPress更改新域名后网站无法正常运行怎么办?
  10. android自定义view圆,Android自定义View圆形百分比控件(一)