我想做一个终端应用程序,存储有关文件/目录的信息。我想要一种方法,以保持信息,如果文件被移动或重命名。
我想我可以做的是在任何命令运行之前执行一个函数。我发现了这个:
http://www.twistedmatrix.com/users/glyph/preexec.bash.txt
但我在想这是不是个好办法,或者我应该做点别的?
我想无论何时输入mv,我都会从C程序中调用该函数。
我想做一个终端应用程序,存储有关文件/目录的信息。我想要一种方法,以保持信息,如果文件被移动或重命名。
我想我可以做的是在任何命令运行之前执行一个函数。我发现了这个:
http://www.twistedmatrix.com/users/glyph/preexec.bash.txt
但我在想这是不是个好办法,或者我应该做点别的?
我想无论何时输入mv,我都会从C程序中调用该函数。
5条答案
按热度按时间s5a0g9ez1#
如果您要尝试将某种元数据附加到文件中,则有一种更好的支持方式-extended attributes。
另一种解决方案可能是使用文件的inode编号作为您自己维护的数据库的索引。
0x6upsns2#
您可以在.profile或.bashrc中使用mv命令的别名吗?
其中,mymv是一个编译后的可执行文件,它运行C代码函数并调用/usr/bin/mv。
precmd和preeexec会给运行的每个bash脚本增加一些开销,即使脚本从不调用mv。alias的缺点是它需要/usr/local中的新代码,并且如果脚本或用户使用/usr/bin/mv而不是mv,它将不会执行您想要的操作。通常,这样做通常意味着有更好的方法来处理某种服务的问题另外,如果您的C代码不能正确处理感兴趣的输入(如
alen0pnh3#
如果你想每次在终端中执行某个命令后运行命令,只需在
~/.bashrc
中输入以下内容:如果希望每次在执行mv之前执行命令,请将以下内容放入
~/.bashrc
:如果需要,请确保脚本将执行真实的的
mv
。你可以使用inotify库来跟踪文件系统的变化。这是一个很好的解决方案,但是一旦用户删除文件,它就已经消失了。
7lrncoxx4#
你也许可以在Bash中使用
DEBUG
trap
。从
man bash
开始:如果sigspec为DEBUG,则在每个简单命令、for命令、case命令、select命令、每个算术for命令之前,以及在shell函数中执行第一个命令之前,执行命令arg
6ju8rftf5#
当我被迫在tcsh中工作时,我发现了这篇文章,我想确保当用户从某个文件夹运行程序时,特定的environemtn变量存在(没有全局设置该变量)
tcsh可以做到这一点。
tcsh有special alias,其中一个是
precmd
。这可用于在打印shell提示符之前运行脚本。例如,我使用了set precmd 'bash $HOME/.local/bin/on_cd.sh'
这可能是
csh
中为数不多的有用特性之一。这是一个遗憾,但我不认为相同或类似的特性是在bash或其他sh
衍生物(ash,破折号等)。Related answer.