【shell】输入输出重定向详解

一、基础概念
  • 标准输入 (stdin):文件描述符 0,默认来自键盘输入。
  • 标准输出 (stdout):文件描述符 1,默认输出到终端。
  • 标准错误 (stderr):文件描述符 2,默认输出到终端。

二、输出重定向
1. 覆盖重定向
操作符功能示例
> 或 1>覆盖重定向标准输出ls > files.txt
2>覆盖重定向标准错误ls /invalid 2> error.log
2. 追加重定向
操作符功能示例
>> 或 1>>追加标准输出echo "new" >> files.txt
2>>追加标准错误ls /invalid 2>> error.log
3. 合并输出流
操作符功能示例
&> 或 >&合并标准输出和错误到同一文件command &> output.log
2>&1将标准错误重定向到标准输出command > output.log 2>&1

三、输入重定向
操作符功能示例
<从文件读取输入sort < input.txt
<<Here Document(多行输入)见下方示例
<<<Here String(字符串输入)tr 'a-z' 'A-Z' <<< "hello"

Here Document 示例

mail -s "Alert" admin@example.com << EOF
系统检测到异常!
时间: $(date)
EOF

四、特殊设备与技巧
1. /dev/null
  • 黑洞设备:丢弃所有输出
    command > /dev/null 2>&1  # 静默执行
2. tee
  • 分流输出:同时输出到屏幕和文件
    ls | tee files.txt       # 输出到屏幕并保存到文件
    ls | tee -a files.txt    # 追加模式
3. 管道 (|)
  • 传递标准输出:仅传递标准输出,错误需额外处理
    find / -name "*.log" 2>/dev/null | grep "app"  # 忽略错误

五、高级用法
1. 重定向顺序
  • 重要规则:从左到右解析
    # 正确:合并输出到文件
    command > output.log 2>&1
    
    # 错误:错误仍输出到终端
    command 2>&1 > output.log
2. 临时重定向代码块
{
    echo "--- 开始执行 ---"
    ls /invalid
    echo "--- 结束执行 ---"
} > output.log 2>&1
3. 文件描述符操作
exec 3>file.txt    # 打开文件描述符3
echo "内容" >&3    # 写入到描述符3
exec 3>&-          # 关闭描述符3

六、典型场景
1. 日志记录
# 记录所有输出(覆盖模式)
./script.sh > script.log 2>&1

# 记录所有输出(追加模式)
./script.sh >> script.log 2>&1
2. 分离正常与错误输出
# 正常输出到文件,错误输出到屏幕
command > output.log

# 正常输出到文件,错误输出到另一文件
command > output.log 2> error.log
3. 忽略非关键错误
# 忽略“文件不存在”错误
rm *.tmp 2>/dev/null
4. 多命令协作
# 生成文件列表并压缩
find . -name "*.log" > list.txt 2>/dev/null
tar -czf logs.tar.gz -T list.txt

七、注意事项
  1. 权限问题:确保对目标文件有写入权限。
  2. 路径存在性:目标文件目录必须存在。
  3. 覆盖风险:使用 > 前确认是否需要备份原文件。
  4. 性能优化:避免频繁写入小文件,可批量处理。

通过灵活组合这些重定向技巧,可以高效控制数据流,满足日志记录、批量处理、错误隔离等需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩瀚之水_csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值