我想制作一个存储有关文件/目录信息的终端应用程序。如果文件被移动或重命名,我想要一种方法来保存信息。
我认为我能做的是在运行任何命令之前执行一个函数。我发现了这个:
http://www.twistedmatrix.com/users/glyph/preexec.bash.txt
但我想知道这是不是一个很好的方法。或者我应该做些什么?
我想在输入mv时从C程序调用该函数。
答案 0 :(得分:1)
如果你要做的是将某种元数据附加到文件中,那么有更好的支持方式 - extended attributes。
另一个解决方案可能是使用文件的inode编号作为您自己维护的数据库的索引。
答案 1 :(得分:0)
你可以为mv命令设置别名吗?在.profile或.bashrc
alias mv=/usr/bin/local/mymv
其中mymv是一个已编译的可执行文件,它运行您的C代码函数并调用/ usr / bin / mv。
precmd和preeexec为每个运行的bash脚本增加了一些开销,即使脚本从不调用mv。别名的缺点是它需要/ usr / local中的新代码,如果脚本或用户使用/ usr / bin / mv而不是mv,它将无法执行您想要的操作。通常做这样的事情通常意味着有一种更好的方法来处理某种服务(守护进程)或驱动程序的问题。另外,如果您的C代码无法正确处理有趣的输入,例如
,会发生什么mv somefille /dev/null
答案 2 :(得分:0)
如果要在终端中执行某些命令后每次都运行命令,只需将以下内容放在~/.bashrc
中:
PROMPT_COMMAND="your_command;$PROMPT_COMMAND"
如果您希望每次执行mv之前执行命令,请将以下内容放在~/.bashrc
中:
alias mv="your_script"
如果需要,请确保您的脚本将执行真实的mv
。
您可以使用inotify库来跟踪文件系统更改。这是一个很好的解决方案,但是一旦用户删除文件,它就已经消失了。
答案 3 :(得分:0)
您可以在Bash中使用DEBUG
trap
。
来自man bash
:
如果sigspec是DEBUG,则命令arg在每个之前执行 简单命令,命令,case命令,select命令,every arithmetic for command,在执行第一个命令之前 一个shell函数