Bash 重定向然后移动目标文件

Bash 重定向然后移动目标文件,bash,unix,stdout,file-descriptor,io-redirection,Bash,Unix,Stdout,File Descriptor,Io Redirection,我在AIX上测试了以下内容,它可以正常工作 logfile=log.txt echo "Hello" > "$logfile" exec 1>>"$logfile" mv "$logfile" "${logfile}_new" echo "World" 此脚本运行后,文件log.txt\u new将包含: Hello World 我不希望它工作,因为我将文件重命名为stdout被重定向的位置。它为什么有效 如果我对包含日志文件的目录进行mv/重命名,它也可以工作 答复: 混

我在AIX上测试了以下内容,它可以正常工作

logfile=log.txt
echo "Hello" > "$logfile"
exec 1>>"$logfile"
mv "$logfile" "${logfile}_new"
echo "World"
此脚本运行后,文件
log.txt\u new
将包含:

Hello
World
我不希望它工作,因为我将文件重命名为
stdout
被重定向的位置。它为什么有效

如果我对包含日志文件的目录进行mv/重命名,它也可以工作

答复:
混淆源于命令
mv

在这种情况下,
mv
实际上并不移动文件,而是给它一个新名称

文件的内容保持不变,并且仍然是当前shell的标准输出的目标


这就是为什么
echo
命令仍然输出到原始文件中的原因。

exec 1>>“$logfile”
您正在重定向命令输出,对吗?从bash手册-如果没有指定命令,重定向可能会影响当前的shell环境。我不知道为什么它会重定向到新文件而不是stdouty您的问题更适合。