簡體   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