`

linux shell 中"2>&1"含义

 
阅读更多
export date_str=$(date "+%Y-%m-%d_%H%M%S")
echo $date_str
#pg_dump --host 202.105.182.135 --port 5432 --username "postgres" --role "postgres" --no-password  --format custom --blobs --verbose --file "/home/pandy/db_$date_str.bakup" "rhcpm_saas"
pg_dump --host 192.168.0.xxx --port 5432 --username "postgres" --role "postgres" --no-password  --format custom --blobs --verbose --file "/home/pandy/local_db_$date_str.bakup" "rhcpm_saas" >/home/pandy/test_out.file  2>&1
//表示备份数据库的时候产生的标准输出, 重定向输出道/home/pandy/test_out.file文件.





原文:
http://www.cnblogs.com/caolisong/archive/2007/04/25/726896.html

脚本是:
      nohup /mnt/Nand3/H2000G  >/dev/null  2>&1  &
      对于& 1 更准确的说应该是文件描述符 1,而1 一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.他标准输出到all_result ,然后复制标准输出到文件描述符2(STDERR_FILENO),其后果就是文件描述符1和2指向同一个文件表项,也可以说错误的输出被合并了.其中0表示键盘输入 1表示屏幕输出 2表示错误输出.把标准出错重定向到标准输出,然后扔到/DEV/NULL下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面。
      command >out.file  2>&1 &
      command >out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。最后一个& , 是让该命令在后台执行。
      
      试想2>1代表什么,2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;
换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出.


      你可以用
            ls 2>1测试一下,不会报没有2文件的错误,但会输出一个空的文件1;
            ls xxx 2>1测试,没有xxx这个文件的错误输出到了1中;
            ls xxx 2>&1测试,不会生成1这个文件了,不过错误跑到标准输出了;
            ls xxx >out.txt 2>&1, 实际上可换成 ls xxx 1>out.txt 2>&1;重定向符号>默认是1,错误和输出都传到out.txt了。
      为何2>&1要写在后面?
      command > file 2>&1
       首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。
      command 2>&1 >file
      2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。

用strace可以看到:
1. command > file 2>&1
这个命令中实现重定向的关键系统调用序列是:
open(file) == 3
dup2(3,1)
dup2(1,2)

2. command 2>&1 >file
这个命令中实现重定向的关键系统调用序列是:
dup2(1,2)
open(file) == 3
dup2(3,1)

      可以考虑一下不同的dup2()调用序列会产生怎样的文件共享结构。
分享到:
评论

相关推荐

    linux shell 中 2>1的含义

    linux shell 中”2>&1″的含义 脚本: nohup /mnt/Nand3/H2000G >/dev/null 2>&1 & 对于& 1 更准确的说应该是文件描述符 1,而1 一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.他标准输出到all_...

    linux shell 中 2>&1的含义

    对于&1 更准确的说应该是文件描述符 1,而1 一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用

    深入理解Linux shell中2>&1的含义(全网最全,看完就懂)

    主要介绍了深入理解Linux shell中2>&1的含义,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    深入理解Linux shell中2&1的含义(全网最全,看完就懂)

    A.首先了解下1和2在Linux中代表什么 在Linux系统中0 1 2是一个文件描述符 名称 代码 ...Java中表示 Linux 下文件描述符(Debian 为例) ...1 >, >>, 1> 或 1>> .../dev/stdout -> /proc/self/fd/1 ...2> 或 2>> System.err /

    Linux Shell中的特殊符号和含义简明总结(包含了绝大部份)

    在Linux Shell中有很多的特殊符号,这对于我们写Shell脚本时要特别留意:一方面要知道这些特殊符号的用法,这些符号用好了可以达到事半功倍的效果;但另一方面要避免这些特殊符号的过度使用而导致脚本难以调试、难以...

    LINUX与UNIX SHELL编程指南(很全)

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

    Linux shell编程指南

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

    Linux与unix shell编程指南

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

    linux shell 编程教程

    linux shell编程 教程大全 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 ...

    LINUX_Shell编程基础教程.rar_linux_shell编程_教程

    1)在Linux编辑中命令区分大小写字符。 2)在Shell语句中加入必要的注释,以便以后查询和维护,注释以#开头。 3)对Shell变量进行数字运算时,使用乘法符号“*”时,要用转义字符“\”进行转义。 4)由于Shell对命令...

    LINUX与UNIX SHELL编程指南

    <br>目 录<br>译者序<br>前言<br>第一部分 shell<br>第1章 文件安全与权限 1<br>1.1 文件 1<br>1.2 文件类型 2<br>1.3 权限 2<br>1.4 改变权限位 4<br>1.4.1 符号模式 4<br>1.4.2 chmod命令举例 5<br>1.4.3 绝对...

    绝版经典《Linux与UNIX Shell编程指南》

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

    LINUX与UNIX SHELL编程指南 高清PDF

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

    如何使用Linux的Shell脚本维护Oracle

    当运行文件(或脚本)时,将执行该文件中包含的命令。由于 shell 脚本与 DBA 的工作相关,因此您可能不会马上看到 shell 脚本的价值,这跟您的工作经历有关。如果您以前从未使用过 UNIX 或类似 UNIX 的系统,那么...

    LINUX与UNIX_SHELL编程指南1

    第1章 文件安全与权限 1<br>1.1 文件 1<br>1.2 文件类型 2<br>1.3 权限 2<br>1.4 改变权限位 4<br>1.4.1 符号模式 4<br>1.4.2 chmod命令举例 5<br>1.4.3 绝对模式 5<br>1.4.4 chmod命令的其他例子 6<br>1.4.5 可以...

    LINUX开发基础 系统使用 全屏编辑器VI SHELL 常用变量

    第四节 Linux Shell 编程 全屏幕编辑器与vi 第四节 Linux Shell 编程 一、Shell程序的编写和执行 二、Shell的变量 三、Shell的测试命令 四、条件语句 五、循环语句 六、函数 七、参数变量和内部...

    linux下目录文件字符编码转换shell脚本

    使用方法:./fconv type1 type2 dir 含义:from 'type1' to 'type2' in directory 'dir'

    Linux与unix shell编程指南1.rar

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

    linux与unix shell编程指南part2

    10.10.6 从sed输出中设置shell变量 102 10.11 快速一行命令 102 10.12 小结 103 第11章 合并与分割 104 11.1 sort用法 104 11.1.1 概述 104 11.1.2 sort选项 104 11.1.3 保存输出 105 11.1.4 sort启动方式 105 ...

Global site tag (gtag.js) - Google Analytics