首页 > 解决方案 > 为什么内容在 bash 中被 mv'd 后仍被添加到文件中?

问题描述

将此代码放在脚本中说how.bsh

#!/bin/bash
echo '1'
mv ./*  ../
echo '2'

在一个目录a/b中并像这样运行它b

./how.bsh 1>list 2>&1

最后list文件最终在 dir 中a(如预期的那样)包含'2'

怎么会这样;

编辑:

这是事实吗?:

在此处输入图像描述

标签: bashredirectmv

解决方案


所有现代文件系统都有inode的概念——一种跟踪文件内容的数据结构,它的存在独立于哪些目录条目链接到该 inode。

当您打开一个文件时,文件句柄指向索引节点——文件本身——而不是目录条目。因此,即使您重命名文件,只要目标位于同一文件系统上(因此rename可以使用系统调用),文件句柄仍然有效,并且继续追加到该现有文件实例。


推荐阅读