1

我想制作一个终端应用程序来存储有关文件/目录的信息。如果文件被移动或重命名,我想要一种方法来保留信息。

我认为我可以做的是在运行任何命令之前执行一个函数。我找到了这个:

http://www.twistedmatrix.com/users/glyph/preexec.bash.txt

但我想知道这是否是一个很好的方法。还是我应该做点别的?

我想在输入 mv 时从 C 程序调用该函数。

4

4 回答 4

1

如果您要尝试将某种元数据附加到文件中,那么有一种更好的支持方式可以做到这一点——扩展属性

另一种解决方案可能是使用文件的 inode 编号作为您自己维护的数据库的索引。

于 2012-05-23T23:53:25.280 回答
0

您也许可以使用DEBUG trapin Bash。

来自man bash

如果 sigspec 是 DEBUG,则命令 arg 在每个简单命令、for 命令、case 命令、select 命令、每个算术 for 命令之前以及在 shell 函数中执行第一个命令之前执行

于 2012-05-24T03:05:30.050 回答
0

你可以给 mv 命令起别名吗?在 .profile 或 .bashrc

alias mv=/usr/bin/local/mymv

其中 mymv 是一个编译的可执行文件,它运行您的 C 代码函数并调用 /usr/bin/mv。

precmd 和 preeexec 为每个运行的 bash 脚本增加了一些开销,即使脚本从不调用 mv。alias 的缺点是它需要 /usr/local 中的新代码,如果脚本或用户使用 /usr/bin/mv 而不是 mv 它不会做你想要的。一般来说,做这样的事情通常意味着有更好的方法来处理某种服务(守护程序)或驱动程序的问题。另外,如果您的 C 代码无法正确处理有趣的输入,例如

mv somefille /dev/null
于 2012-05-23T23:45:35.220 回答
0

如果您想在终端中执行某些命令后每次运行命令,只需将以下内容放入~/.bashrc

PROMPT_COMMAND="your_command;$PROMPT_COMMAND"

如果您希望每次在执行 mv 之前执行命令,请将以下内容放入~/.bashrc

alias mv="your_script"

确保您的脚本mv在需要时执行。

您可以使用inotify库来跟踪文件系统更改。这是一个很好的解决方案,但是一旦用户删除文件,它就已经消失了。

于 2012-05-23T23:45:50.883 回答