如何在Bash脚本内部指定stderr的输出文件?
如何在Bash脚本内部指定stderr的输出文件?
当然可以做到!你完全不需要在执行脚本时手动加重定向参数,直接在脚本内部配置stderr的输出目标就行,给你几种实用的方法:
方法一:直接在脚本开头重定向stderr
你可以用exec命令修改当前shell的文件描述符,把后续所有的stderr输出都定向到指定文件。示例脚本如下:
#!/bin/bash # 将stderr(文件描述符2)重定向到error.err文件 exec 2>error.err # 你的Bash代码 echo "这是标准输出内容" # 故意触发一个错误,测试重定向效果 ls non_existent_file
执行这个脚本时,所有原本会输出到终端的错误信息,都会被写入error.err文件里,而标准输出还是会正常显示在终端。
方法二:用变量自定义错误文件名
如果想灵活修改错误文件名,可以先定义一个变量,再用变量指定输出文件:
#!/bin/bash # 自定义错误文件名 ERROR_LOG="my_custom_errors.log" # 重定向stderr到变量指定的文件 exec 2>"$ERROR_LOG" # 测试代码 echo "正常输出内容" cat missing_file.txt
这样后续如果要改错误文件名,只需要修改ERROR_LOG变量的值即可。
方法三:追加模式写入错误文件
如果不想每次运行脚本都清空原有错误文件,而是把新错误追加到文件末尾,可以用>>代替>:
#!/bin/bash # 以追加模式将stderr写入error.err exec 2>>error.err # 你的代码 echo "本次运行的正常输出" rm non_existent_file
每次运行脚本,新的错误信息都会加到error.err的最后,不会覆盖之前的内容。
备注:内容来源于stack exchange,提问作者ailauli69
相关产品推荐
相关产品推荐

