bash脚本自动删除



bash脚本如何在遇到要删除自身的语句后执行?例如,当我运行test.sh脚本,其中包含:

<--some commands-->
rm test.sh
<--some more commands-->
end

脚本执行到最后,然后删除自己

实际情况是bash保持文件打开,而rm不会停止。

所以rm调用libc函数"unlink()",它将从目录中删除到索引节点的"链接"。这个"链接"实际上是一个文件名和一个索引节点号(您可以通过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

文件仍然打开,即使您在ls中不再看到它。因此,bash并没有读取整个文件——只是在bash处理完它之前,它并没有真正消失。

实际上,这种现象是特定于shell(如bash)的,它将文件读入内存,然后执行它们。

如果执行下面的a.bat:回声Yo1德尔a.bat回声Yo2

得到以下输出:C:> a.bat

C:> Yo1回响Yo1

C:> del a.bat无法找到批处理文件。

这是你的期望:-)

相关内容

  • 没有找到相关文章

最新更新