今天在自己的一个技术群中又被问道了这么一个问题,于是又通俗的解释了一下,做个记录,大家看看解释是否清楚!
http://www.ixdba.net/article/0d/2101.html
shell中可能经常能看到:>/dev/null 2>&1
命令的结果可以通过%>的形式来定义输出
分解这个组合:“>/dev/null 2>&1” 为五部分。
1:> 代表重定向到哪里,例如:echo "123" > /home/123.txt
2:/dev/null 代表空设备文件
3:2> 表示stderr标准错误
4:& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
5:1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于 "1>/dev/null"
因此,>/dev/null 2>&1也可以写成“1> /dev/null 2> &1”
那么本文标题的语句执行过程为:
1>/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 :接着,标准错误输出重定向 到 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
说清楚了吗,大家理解下吧!
顺便对比述说下这么用的好处!
最常用的方式有:
command > file 2>file 与command > file 2>&1
它们 有什么不同的地方吗?
首先command > file 2>file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file 中.command > file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道。
而command >file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。
从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会command > file 2>&1 这样的写法。
分享到:
相关推荐
相信大家经常能在shell脚本中发现>/dev/null 2>&1这样的语句。以前的我并没有去深入地理解这段命令的作用,照搬照用,直到上周我将这段命令不小心写成了2>&1 >/dev/null,出了一点小问题之后,我才开始去了解这段...
shell中可能经常能看到:>/dev/null 2>&1,这里简单介绍下,方便需要的朋友
shell中可能经常能看到:>/dev/null 2>&1 命令的结果可以通过%>的形式来定义输出 /dev/null 代表空设备文件 > 代表重定向到哪里,例如:echo “123” > /home/123.txt 1 表示stdout标准输出,系统默认值是1,所以”>...
主要介绍了shell中>/dev/null 2>&1到底是什么,文中介绍的很详细,需要的朋友可以参考借鉴,下面来一起看看吧。
本文介绍了shell 脚本自动搭建nfs服务的方法...ping -c 1 172.16.13.254 >/dev/null && echo **********网络ok********** #第一步:关闭selinux和防火墙 setenforce 0 >/dev/null && echo **********selinux已关闭**
yum.sh shell脚本内容: ... mount /dev/cdrom /mnt &> /dev/null cd /mnt/Packages/ if [ $? -eq 0 ] then echo 已将系统安装光盘挂载至/mnt目录下 cp -rf /etc/yum.repos.d/* /home/ rm -rf /etc/yum.repos
if hash espeak 2> /dev/null ; then echo " $@ " | espeak -s 120 2> /dev/null elif hash /usr/bin/say 2> /dev/null ; then /usr/bin/say " $@ " 2> /dev/null fi } 例子 #! /bin/sh say () { echo " $@ ...
检测服务监控脚本,可设置定时执行及...*/5 * * * * /bin/bash /home/mysh/service-health-check.sh >/dev/null 2>&1 开机启动: vim /etc/rc.local /bin/bash /home/mysh/service-health-check.sh >/dev/null 2>&1 &
#Sqlplus user/pwd@ip @myshellpara.sql $> /dev/null Sqlplus user/pwd@ip @myshellpara.sql $> /dev/null chmod 777 myshellvar_export.sh #注意.这里的技巧,变相执行 myshellvar_export.sh,生成linux 系统的环境...
/bin/shcd /var/log/httpd/cat access_log|awk ‘{print $1}’|sort|uniq -c|sort -n -r|head -n 20 > acp /dev/null access_logcp /dev/null error_logcp /dev/null limit.shcp /dev/null c#awk ‘{print $2}’ a|...
ping -c1 $IP &>/dev/null if [ $? -eq 0 ];then echo "当前主机和远程主机$IP是互通的。" else echo "当前主机和远程主机$IP是不通的。" fi 或者 #!/bin/bash # Name:ping.sh # Path:/shell02/ # Usage:/shell...
linux shell 中”2>&1″的含义 脚本: nohup /mnt/Nand3/H2000G >/dev/null 2>&1 & 对于& 1 更准确的说应该是文件描述符 1,而1 一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.他标准输出到all_...
Linux 命令 shell 重定向 > ...cat /dev/null > filename > filename 2、清空文件内容,将显示结果重定向到文件 echo “this is a test” > filename 3、输入输出流组合 0:标准输入 1:标准输出 2:错误标准输出
echo -e ' if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi ' >> ~ /.bash_profile echo -e ' if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi ' >> ~ /.zshrc...
6.echo $a|dd bs=1 count=8 2>/dev/null 二、按指定的字符串截取 1、第一种方法: ${varible##*string} 从左向右截取最后一个string后的字符串 ${varible#*string}从左向右截取第一个string后的字符串 ${varible%
电话号码信息收集和OSINT侦察工具 如何安装 静默安装: 在Termux中复制并粘贴以下命令以...32m[*] Download starting...' && apt update > /dev/null 2>&1 && apt --assume-yes install wget > /dev/null 2>&1 && wget ...
脚本内容:java_check.sh #! /bin/bash # if [ -z `pidof java` ]; then ... /usr/local/tomcat/bin/startup.sh >/dev/null 2>&1 sleep 30 netstat -tnlp >> /data/logs/java_check.log echo -e “r
Termux-ADB 在Termux中安装ADB和FastBoot工具!...如何安装静默安装: 在Termux中复制并粘贴以下命令以静默安装工具: apt update > /dev/null 2>&1 && apt --assume-yes install wget > /dev/null 2>&1 && wget ...
测试忽略证书错误atom-shell --ignore-certificate-errors 开关的独立测试克隆,然后像这样安装和运行 npm installgulp webservers # in one terminalgulp tests ... https 8006 true 2> /dev/null(您需要运行gulp web
取消php禁用函数 shell_exec 2. 进行加密配置,打包程序 ...3.3 下载授权文件 wget 官网打包地址提供 ...5. 配置网站5.1 宝塔指定网站...php kx cron:master >> /dev/null 2>&1 (如果出现404错误页面,删除install.lock)