繁体   English   中英

钩在终端上。 我可以在终端中运行命令之前调用方法吗?

[英]Hooks on terminal. Can I call a method before a command is run in the terminal?

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

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

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

但是我想知道这是否是解决问题的好方法。 还是我应该做别的事情?

我想只要输入mv就可以从C程序调用该函数。

如果您要执行的操作是将某种元数据附加到文件中,则有一种更好的支持方式- 扩展属性

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

您可以为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

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

PROMPT_COMMAND="your_command;$PROMPT_COMMAND"

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

alias mv="your_script"

如果需要,请确保您的脚本将执行真正的mv

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

您也许可以使用Bash中的DEBUG trap

来自man bash

如果sigspec是DEBUG,则在每个简单命令(对于命令,case命令,select命令,每个命令的算术)之前以及在shell函数中执行第一个命令之前,都要执行命令arg

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM