在Bash文件中重定向STDERR会导致创建文件,即使没有错误也是如此.为什么?

nul*_*ull 1 bash shell stderr

我创建了一个用于执行MySQL数据转储的小型Bash脚本.因为转储可能相当大,所以我将进程放在后台,然后等待错误或日志显示在文件系统中.我有以下代码:

mysqldump main_db > /loc/to/dmp/file.sql 2>/loc/to/error/log/file.log &
Run Code Online (Sandbox Code Playgroud)

问题是我得到一个大小为0的'/loc/to/error/log/file.log'文件(我认为这意味着没有真正的错误),有时当这个命令运行时,这会杀死进程,即使有没有错误.

我不确定为什么STDERR会在没有数据写入时写入文件.这是因为&后台进程吗?

nos*_*nos 5

重定向文件在执行shell执行脚本之前设置.

即解析了包含重定向的stdout/stderr的命令后,shell分叉打开(如果文件不存在则创建文件).将打开的文件描述符附加到文件描述符1和2(分别为stdout/err),然后执行实际命令.