当前位置: 首页 > Linux

【原】Linux shell script 2>&1是什么意思

时间:2023-04-07 00:03:06 Linux

[原创]Linuxshell脚本2>&1是什么意思?而2在什么shell中,有一些常用的文件描述符(filedescriptor):0:标准输入(stdin)1:标准输出(stdout)2:标准错误(stderr),所以2>&1中的2是标准错误,1是标准输出。>符号是什么“>”在shell中是一个重定向符,例如:echo"abc">file1就是把abc写到文件名赋给file1的文件中。需要注意的是,一般“1>”可以简写为“>”,即默认重定向是重定向标准输出。使用“<”表示标准输入重定向,使用“2>”表示标准错误重定向,这样三个标准文件描述符就可以正确区分重定向。什么是&?&符号在shell中有多种含义。2>&1中,&作为“转义符”,与1结合,“&1”一起表示标准输出。那你为什么需要&?1不是已经表示标准输出了吗?那么我们假设我们使用这个shell脚本:catfile1>outfile2>1,那么系统会认为标准错误输出到文件名为1的文件中。为了消除歧义,&1在这种情况下表示标准输出,否则单个1就是名为1的文件。如果看到一个脚本:catfile1>outfile2>&1&第二个&(命令末尾的&),说明命令运行在background,和&1中的&意思不同。这个命令背后是什么如果你想了解更多,可以继续阅读:这个命令其实是一个dup2()调用。dup2的功能是复制一个现有的文件描述符。Dup2可以使用newfd参数指定新描述符的值。如果newfd已经打开,它将首先关闭。如果newfd等于oldfd,dup2返回newfd而不关闭它。dup2函数返回的新文件描述符也与参数oldfd共享相同的文件表条目。dup2等同于:close(oldfd);fcntl(oldfd,F_DUPFD,newfd);用strace可以看到,command>file2>&1这个命令实现重定向的关键系统调用顺序是:open(file)==3dup2(3,1)dup2(1,2)参考linuxdup和dup2函数分析linuxshell中的“2>&1”表示shell重定向输出(1>&22>&1&>file>&file)