На самом деле происходит то, что bash сохраняет файл открытым, и rm
не останавливает его.
Так что rm
вызывает функцию libc "unlink ()", которая удаляет "ссылку"на inode из каталога, в котором он находится. Эта «ссылка» на самом деле является именем файла вместе с номером инода (номера инода можно увидеть с помощью ls -i
).
Инод существует до тех пор, пока программыон открывается.
Вы можете легко проверить это утверждение следующим образом:
$ echo read a> ni
$ bash ni
, находясь в другом окне:
$ pgrep -lf bash\ ni
31662 bash ni
$ lsof -p 31662|grep ni
bash 31662 wmertens 255r REG 14,2 7 12074052 /Users/wmertens/ni
$ rm ni
$ lsof -p 31662|grep ni
bash 31662 wmertens 255r REG 14,2 7 12074052 /Users/wmertens/ni
Файл все еще открыт, даже если вы можетебольше не вижу его в лс.Так что bash не читает весь файл - он просто не исчезнет, пока bash с ним не закончит.