bash - 为什么内容在 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'!
怎么会这样;
编辑:
这是事实吗?:
解决方案
所有现代文件系统都有inode的概念——一种跟踪文件内容的数据结构,它的存在独立于哪些目录条目链接到该 inode。
当您打开一个文件时,文件句柄指向索引节点——文件本身——而不是目录条目。因此,即使您重命名文件,只要目标位于同一文件系统上(因此rename
可以使用系统调用),文件句柄仍然有效,并且继续追加到该现有文件实例。
推荐阅读
- php - How to save TCPDF png barcode to a specified folder in php?
- c++ - C++: Why is a non-static class method able to be called without a class instance?
- ios - Auto-layout is not working in case 1 label is shown, but works with 2 labels
- python - Error: 'list' object is not callable, why?
- node.js - SAM template - Sending SQS item to existing Java service
- php - Laravel relationships functions shows null
- laravel - Eloquent model with table name dynamically set breaks after queued (Laravel 5.8)
- node.js - 'aws_amplify__WEBPACK_IMPORTED_MODULE_2___default.a.signUp 不是函数'
- python - 使用 BeautifulSoup 从表中提取某些列
- ms-word - Mac 上的 Xojo 文字自动化