电脑世界
霓虹主题四 · 更硬核的阅读氛围

脚本执行输出重定向:把命令结果悄悄存进文件里

发布时间:2026-03-22 12:30:50 阅读:5 次

你写好一个 Bash 脚本,运行后满屏刷日志,想保存下来查问题,又懒得手动复制粘贴?或者定时任务跑完只留个空屏,根本不知道它到底干了啥?这时候,脚本执行输出重定向就是你该翻出来的‘藏宝图’。

输出重定向不是魔法,只是个箭头

Linux/macOS 终端里,>>> 就是两个最常用的重定向符号。前者覆盖写入,后者追加写入。比如:

ls -l /var/log > file_list.txt

这条命令一执行,/var/log 下的文件列表就老老实实进了 file_list.txt,终端反而变干净了。再跑一次?旧内容直接被清空,只留新结果。

要是你想保留历史,比如每天记录一次磁盘使用率,那就用双箭头:

df -h / | grep '/' >> disk_usage.log

每次执行,新一行就自动加在 disk_usage.log 最底下,像记账本一样清晰。

错误信息也别让它乱跑

脚本出错时,报错信息(stderr)默认和正常输出(stdout)走不同通道。光用 > 只能抓到 stdout,stderr 还是会蹦出来刷屏。想一网打尽?加个 2>&1

./deploy.sh > deploy.log 2>&1

这句意思是:把标准输出写进 deploy.log,同时把标准错误也重定向到同一位置。部署失败?打开日志一眼看到报错在哪行。

更省事的写法(bash 4.0+):

./deploy.sh &> deploy.log

实际小场景:自动备份+留痕

假设你有个清理临时文件的脚本 clean_tmp.sh,想让它每天凌晨 3 点运行,还留下每回删了啥:

# 加到 crontab 中
0 3 * * * /home/user/clean_tmp.sh >> /home/user/clean_log.txt 2>&1

这样,日志里既有“已删除 12 个 .tmp 文件”,也有万一权限不对导致的 Permission denied 提示——问题来了,不靠猜,全在文件里。

顺手把输入也管起来

重定向不止输出。如果脚本需要读取配置,又不想每次手动输路径,可以用 < 把文件当输入塞进去:

mysql -u root -p < backup.sql

密码还是得输(安全起见),但 SQL 命令已经从文件流进去了。搭配 << 还能写“内联文档”,适合简单初始化操作。