为什么内容在 bash 中被 mv 之后仍继续添加到文件中?
Why does content keep being added to a file even after it was mv'd in bash?
将此代码放入脚本中说 how.bsh
:
#!/bin/bash
echo '1'
mv ./* ../
echo '2'
在目录 a/b
和 运行 中来自 b
像这样:
./how.bsh 1>list 2>&1
最终 list
文件在目录 a
中结束(正如预期的那样)BUT 包含 '2' !
怎么会这样;
编辑:
这是事实吗?:
所有现代文件系统都有 inode 的概念——一种跟踪文件内容的数据结构,它的存在独立于该 inode 的目录条目 link。
当您打开文件时,文件句柄指向索引节点——文件本身——而不是目录条目。因此,即使您重命名文件,只要目标位于同一文件系统上(因此可以使用 rename
系统调用),文件句柄仍然有效,并且继续追加到现有文件实例。
将此代码放入脚本中说 how.bsh
:
#!/bin/bash
echo '1'
mv ./* ../
echo '2'
在目录 a/b
和 运行 中来自 b
像这样:
./how.bsh 1>list 2>&1
最终 list
文件在目录 a
中结束(正如预期的那样)BUT 包含 '2' !
怎么会这样;
编辑:
这是事实吗?:
所有现代文件系统都有 inode 的概念——一种跟踪文件内容的数据结构,它的存在独立于该 inode 的目录条目 link。
当您打开文件时,文件句柄指向索引节点——文件本身——而不是目录条目。因此,即使您重命名文件,只要目标位于同一文件系统上(因此可以使用 rename
系统调用),文件句柄仍然有效,并且继续追加到现有文件实例。