相关博文原文地址:

CSDN:一个行走的民:Linux shell中2>&1的含义解释 (全网最全,看完就懂)



一、1和2在Linux中代表什么

在 Linux 下几乎一切都号称是文件,标准输入、输出也不例外,它们是叫做 fd (File Descriptor) 文件描述符。

名称 代码 操作符 Java中表示 Linux 下文件描述符(Debian 为例)
标准输入(stdin) 0 < 或 << System.in /dev/stdin -> /proc/self/fd/0 -> /dev/pts/0
标准输出(stdout) 1 >, >>, 1> 或 1>> System.out /dev/stdout -> /proc/self/fd/1 -> /dev/pts/0
标准错误输出(stderr) 2 2> 或 2>> System.err /dev/stderr -> /proc/self/fd/2 -> /dev/pts/0

使用 > 或 >> 时,默认为标准输出 1 重定向, 所以 > file 就是 1> file 的省写,1 与 > 之间不能有空格。

比如 ls -l > a.txt 就是 ls -l 1> a.txt ,数字 0, 1, 2 与它后面的操作符 > 或 < 等 总是一个整体。

2>&1 表示把 标准错误输出 重定向到 标准输出, 这在控制台下看到的效果 2>&1 和 1>&2 可能是一样的,因为标准输出或标准错误输出的目的地默认都为屏幕。

2>&1 是最常见到的写,这样就是把错误信息与标准输出都收集到一块了

&> file 表示把 标准输出 和 标准错误输出 都重定向到文件 file 中

>& file 把标准输出和标准错误输出都重定向到文件 file, 由于 > 默认为重定向标准输出,所以和 1>& file 是一个意思

1.1 输出重定向

1.2 输入重定向

1.3 绑定重定向

二、关于2>&1的含义

含义:将标准错误输出重定向到标准输出

三、为什么2>&1要放在后面

nohup java -jar app.jar >log 2>&1 &

&表示把条命令放到后台执行.

为什么2>&1一定要写到>log后面,才表示标准错误输出和标准输出都定向到log中?

把1和2都理解是一个指针,然后来看上面的语句就是这样的:

  • 本来1----->屏幕 (1指向屏幕)
  • 执行>log后, 1----->log (1指向log)
  • 执行2>&1后, 2----->1 (2指向1,而1指向log,因此2也指向了log)
nohup java -jar app.jar 2>&1 >log &
  • 本来1----->屏幕 (1指向屏幕)
  • 执行2>&1后, 2----->1 (2指向1,而1指向屏幕,因此2也指向了屏幕)
  • 执行>log后, 1----->log (1指向log,2还是指向屏幕)

四、每次都写">log 2>&1"太麻烦,能简写吗?

&>log
>&log
nohup java -jar app.jar &>log &

最新文章

  1. MFC双缓冲绘图(2015.09.24)
  2. DES,AeS加解密,MD5,SHA加密
  3. iOS 检测有没有安装其它应用 和ios9下要注意的地方
  4. 【HTML】Advanced7:HTML5 Forms Pt. 2: Attributes and Data Lists
  5. Android实现限制EditText输入文字的数量
  6. Use PRODUCT_USER_PROFILE To Limit User
  7. C语言控制流语句
  8. C作业--初步
  9. Runaway argument错误 [Overleaf: 在线Latex] [Type 3问题后续]
  10. hdu1540 Tunnel Warfare 线段树/树状数组
  11. apicloud 自定义模块引用aar
  12. 团队Git使用教程
  13. [转]启动Tomcat提示:指定的服务未安装
  14. Netty权威指南之NIO通信模型
  15. ndk编译android的lame库
  16. “全排列”问题系列(一)[LeetCode] - 用交换元素法生成全排列及其应用,例题: Permutations I 和 II, N-Queens I 和 II,数独问题
  17. IMAP简单研究
  18. ES6中的一些新特性
  19. Oracle 常见hint
  20. C++: int int&amp; int * int**的区别、联系和用途

热门文章

  1. std::thread线程详解(1)
  2. JAVA顺序结构和选择结构
  3. Hadoop集群安装配置
  4. cmake - 可执行文件
  5. VS2017+qt5.9的安装
  6. LeetCode237 删除链表中的节点
  7. dig的安装和使用
  8. MyBatis初级实战之三:springboot集成druid
  9. poj-Decoding Morse Sequences(动态规划)
  10. Ubuntu下修改缺省dash shell为bash shell