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
分享到:
相关推荐
在 `nohup /mnt/Nand3/H2000G >/dev/null 2>&1 &` 这个例子中,`>/dev/null` 表示将标准输出(文件描述符 1)重定向到 `/dev/null`,这是一个特殊的设备文件,任何写入它的数据都会被丢弃,相当于“黑洞”。`2>&1` ...
在Shell脚本中,我们经常会遇到`>/dev/null 2>&1`这样的重定向操作,它是用来处理命令的输出和错误的。接下来,我们将详细解释这个命令的含义和作用。 首先,`>/dev/null`是将标准输出(标准输出的文件描述符为1)...
相信大家经常能在shell脚本中发现>/dev/null 2>&1这样的语句。以前的我并没有去深入地理解这段命令的作用,照搬照用,直到上周我将这段命令不小心写成了2>&1 >/dev/null,出了一点小问题之后,我才开始去了解这段...
/bin/tar -cf /backup/$1.$DATE.tar $1 > /dev/null 2>> /backup/$1.bak.log /bin/gzip /backup/$1.$DATE.tar if [ $? -eq 0 ] then echo "$1 $DATE backup successfully" >> /backup/$1.bak.log else echo "ERROR...
### Linux Shell 常用技巧详解 在 Linux 系统中,Shell 是用户与操作系统交互的主要方式之一。本文将深入探讨几个常用的 Shell 技巧及其应用场景。 #### 1. 使用 `/dev/null` 和 `/dev/tty` 在 Linux 系统中,`/...
上述Cron表达式的含义是:每天凌晨1点执行`/opt/soft/bin/auto-del-30-days-ago-log.sh`脚本,其中`> /dev/null 2>&1`用于忽略脚本执行时产生的任何输出信息,确保不会发送邮件提醒。 通过这种方式,我们可以轻松...
- 示例:`find / -name test > /dev/null 2>&1` 的含义是搜索根目录下的名为 "test" 的文件,并将输出重定向到空设备文件 `/dev/null`,同时将错误输出也重定向到同一位置。 #### 五、Shell 变量管理 - **变量...
if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "${PRG}"`/"$link" fi done BASEDIR=`dirname ${PRG}` BASEDIR=`cd ${BASEDIR}/..;pwd` if test -z ${JAVA_HOME}; then JAVA_BIN...
ps -ef | grep qmail | grep tcpserver | awk '{print $2}' | xargs kill > /dev/null 2>&1 killall qmail-send > /dev/null 2>&1 ``` 最后删除Qmail服务的锁文件。 ```sh if [-f /var/lock/subsys/qmail]; then ...
例如,`nohup ./execute.sh > /home/xxx/log.log 2>&1 &`会将标准输出和标准错误都重定向到`/home/xxx/log.log`文件中,而不是默认的`nohup.out`。 针对日志文件过大问题,可以采取以下策略: 1. 定期分割日志:...
echo $eth1_IP | grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" > /dev/null 2>&1 if [ $? -ne 0 ]; then echo 'eth1_IP is empty!' exit 1 fi # 设置PS1 echo "export PS1='\[\e[32m\][\u@$eth1_IP...
wget http://hi.baidu.com/myeyre/blog/item/bb5470cfa42c2637f9dc613b.html -O /dev/null > /tmp/root/keepalive.log 2>&1 &` - **自动重新登录任务**:每隔6小时执行一次,以确保连接有效。 - 命令格式:`0 */6...
java -jar your-jar-file.jar > logs/app.log 2>&1 & ``` 6. **检查运行状态**:使用`pgrep`或`jps`命令查找特定jar的进程ID,确认应用程序是否正在运行。 7. **停止程序**:可以创建一个函数或单独的命令来杀死...
### Linux Shell 编程知识点详解 #### 综述篇 **Shell是什么** - **定义**:Shell 是一种特殊的程序,充当用户与 Linux 或 Unix 操作系统内核之间的接口。它接收用户的输入,并将这些指令传递给操作系统的核心...
这里的`> /dev/null 2>&1`是为了避免输出到控制台,而是将其丢弃。 总的来说,`mysqlcheck`是MySQL数据库管理员的得力助手,通过它可以有效地管理和维护数据库健康状态,确保数据的完整性和系统的稳定运行。了解并...
if command -v pyenv 1>/dev/null 2>&1; then eval "$(pyenv init -)" fi ``` 保存并关闭文件,然后运行`source ~/.bash_profile`或`source ~/.zshrc`使更改生效。 在Windows中,`pyenv-win`会在安装过程中自动...
00 8-18/1 * * * cut -f1 /xyz/x1 >> /backup/bak01.txt ``` **示例3:** 每天5:50对`/data`目录进行压缩备份。 **脚本内容:** ```bash 50 5 * * * tar zcvf backup.tar.gz /data ``` **示例4:** 每天5:55卸载CD...
- `mysqldump -h$HOST -u$USER -p$PASS -B $DB > $BACKUP_NAME 2>/dev/null`:备份单个数据库到指定文件,忽略错误输出。 #### 多循环备份 - **脚本功能**:分别备份MySQL数据库中的每个数据库及其所有表到单独的...