>/dev/null 2>&1详解

24 篇文章 0 订阅
6 篇文章 0 订阅

一、问题引入

在 Linux shell 文件 testshell.sh 中写入了以下命令:

vi testshell.sh
nohup java -Xmx256m -Xms128m -Xss256k  -jar manager-api.jar > logs/manager.out & 

那么在判断 testshell.sh 是否执行完成时是无法正确判断的,testshell.sh 一直是未完成的状态。

二、解决方法

在语句中加入 >/dev/null 2>&1 就可以正常判断了。

nohup java -Xmx256m -Xms128m -Xss256k  -jar manager-api.jar > logs/manager.out >/dev/null 2>&1 & 


那么,>/dev/null 2>&1 的作用是什么呢?以下进行详解。

三、>/dev/null 2>&1 详解

1.文件描述符

计算机中有各种各样的硬件设备,比如键盘、鼠标、麦克风等输入设备,显示器、打印机等输出设备。这些设备在 Linux 中都以文件表示。其中,键盘是标准输入设备,显示器是标准输出设备。
Linux 会给每个文件分配一个 ID,这个 ID 是一个整数,被称为文件描述符。与输入输出相关的文件描述符为 0、1、2,对应的目标文件分别为 /dev/stdin、/dev/stdout、/dev/stderr,分别表示标准输入、标准输出、和标准错误。

文件描述符文件名 类型    目标文件 设备
0stdin 标准输入/dev/stdin键盘
1stdout    标准输出/dev/stdout显示器
2stderr    标准错误 /dev/stderr显示器

2.shell 重定向

在执行 shell 命令中,一般都默认是从键盘获得输入,并且将结果输出到控制台。有了重定向,我们就可以通过更改文件描述符默认的指向,实现输入输出的重定向。
Linux Shell 重定向分为两种:输入重定向和输出重定向。

(1)输入重定向

输入重定向的写法是 fd<file 或 fd<<file,其中 fd 表示文件描述符,如果不写,默认为 0。

注意:fd 和 < 之间不能有空格,否则 Shell 会解析失败;< 和 file 之间的空格可有可无。

(2)输出重定向

输出重定向的写法是 fd>file 或 fd>>file,> 代表覆盖,>> 代表追加。

注意:fd 和 > 之间不能有空格,否则 Shell 会解析失败;> 和 file 之间的空格可有可无。

(3)文件描述符的复制

文件描述符使用 “&” 进行复制,表示复制文件描述符到另一个文件描述符中以作其副本。

(4)重定向命令列表

命令说明示例输出
command > file将输出重定向到filedate > test.logTue Mar 22 14:39:06 CST 2022
command < file将输入重定向到file wc -l < test.log    1
command >> file将输出以追加的方式重定向到filedate >> test.logTue Mar 22 14:39:06 CST 2022
Tue Mar 22 14:44:08 CST 2022
n> file将文件描述符为n的文件重定向到file date 2> test.log 文件内容为空
n>> file将文件描述符为n的文件以追加的方式重定向到filedate 1>> test.logTue Mar 22 14:54:01 CST 2022
n>&m将输出文件 m 和 n 合并2>&1标准错误 stderr 重定向到标准输出 stdout
n<&m将输入文件 m 和 n 合并
<< tag将开始标记 tag 和结束标记 tag 之间的内容作为输入 [root@localhost test]# wc -l << EOF
> hi
> 你好
> 谢谢
> EOF    
3

3. /dev/null

执行某个命令但又不希望在屏幕上显示输出结果,可以将输出重定向到 /dev/null:

command > /dev/null

4. 2>&1

将错误输出和标准输出输出到同一个地方。

5.重定向顺序

Linux 在执行 shell 命令之前,就会确定好所有的输入输出位置,并且从左到右依次执行重定向的命令。

(1)>/dev/null 2>&1 和 2>&1 >/dev/null

  • command >/dev/null 2>&1 执行结果:标准输出、错误输出都会被丢弃。
  • command 2>&1 >/dev/null 执行结果:标准输出丢弃、错误输出在屏幕显示。

(2)">file 2>&1" 和 “2>&1 >file”

  • “>file 2>&1” 执行结果:标准输出重定向到file上,标准错误也重定向到file上。
  • “2>&1 >file” 执行结果:标准输出重定向到file上,标准错误输出到屏幕上。

6.nohup

我们一般使用 nohup command & 命令形式来启动一些后台程序,比如本文第一节问题描述的例子,为了不让执行信息输出屏幕,加上 >/dev/null 2>&1 命令来丢弃所有的输出,使 shell 的状态置为完成。
 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值