shell 玩转文件描述符 和 重定向

文件描述符是与文件输入,输出相关联的整数。它们用来跟踪已经打开的文件。

最常见的文件描述符是  系统预留的  0 ,1,2 。

0 -- stdin      (标准输入)。

1 -- stdout (标准输出)。

2 -- stderr (标准错误)。

在命令输出文本时,这些文本信息 可能是 错误信息,也可能是 正常输出信息 ,单靠 查看输出的内容本身,我们没办法分辨哪些是错误信息哪些是正常输出。

我们可以 通过文件描述符来解决这个问题,将那些与特定描述符关联的文本提出出来


#!/bin/bash
echo "This is a normal stdout string" > temp.txt
ls;      cat temp.txt


> 会将目标文件中的内容清空后再写入 内容,>>会直接在目标文件后追加内容


错误信息

如果你在 终端执行一行 错误的指令,就会输出 错误信息 例如

$ ls +
ls: +: No such file or directory

这里 ,+ 是一个非法参数,因此返回错误信息 对应 2 stderr


下面的 命令正确执行 ,输出的是 输出内容  对应  1  stdout

$ ls
Applications         Movies               shell.sh
Desktop              Music                solarized

可以将内容 重定位到文件中 如下

$ls > lstmp.txt


分别将  1 stdout  和 2 stderr 重定位到不同的文件中

注意空格   2>tmp.txt    ,2和>之间不能有空格, >和tmp.txt 之间的空格 可有可无

$ls 2>error.txt 1>output.txt

将所有输出 都定位到 同一个文件中

$ls &>allmessage.txt


可以讲 stderr  都定位到  stdout 中,然后再全部 定位到文件中

$ls 2>&1 alloutput.txt

或者这样 

$cmd &>outputAnderror.text


有时候在输出中 包含一些不必要的信息 ,如果不想让终端中充斥这 错误信息,可以将 stderr 定位到 /dev/null

$cmd 2>/dev/null






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值