我想制作一个终端应用程序来存储有关文件/目录的信息。如果文件被移动或重命名,我想要一种方法来保留信息。
我认为我可以做的是在运行任何命令之前执行一个函数。我找到了这个:
http://www.twistedmatrix.com/users/glyph/preexec.bash.txt
但我想知道这是否是一个很好的方法。还是我应该做点别的?
我想在输入 mv 时从 C 程序调用该函数。
我想制作一个终端应用程序来存储有关文件/目录的信息。如果文件被移动或重命名,我想要一种方法来保留信息。
我认为我可以做的是在运行任何命令之前执行一个函数。我找到了这个:
http://www.twistedmatrix.com/users/glyph/preexec.bash.txt
但我想知道这是否是一个很好的方法。还是我应该做点别的?
我想在输入 mv 时从 C 程序调用该函数。
如果您要尝试将某种元数据附加到文件中,那么有一种更好的支持方式可以做到这一点——扩展属性。
另一种解决方案可能是使用文件的 inode 编号作为您自己维护的数据库的索引。
您也许可以使用DEBUG
trap
in Bash。
来自man bash
:
如果 sigspec 是 DEBUG,则命令 arg 在每个简单命令、for 命令、case 命令、select 命令、每个算术 for 命令之前以及在 shell 函数中执行第一个命令之前执行
你可以给 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
如果您想在终端中执行某些命令后每次运行命令,只需将以下内容放入~/.bashrc
:
PROMPT_COMMAND="your_command;$PROMPT_COMMAND"
如果您希望每次在执行 mv 之前执行命令,请将以下内容放入~/.bashrc
:
alias mv="your_script"
确保您的脚本mv
在需要时执行。
您可以使用inotify库来跟踪文件系统更改。这是一个很好的解决方案,但是一旦用户删除文件,它就已经消失了。