簡體   English   中英

分發可加載的內置bash模塊

[英]Distributing loadable builtin bash modules

我為bash寫了一個內置的修改'cd'命令,這是我的軟件的要求。 有沒有辦法實際分發可加載的獨立於bash本身? 我理想的是只想分發“附加功能”,因為我知道可以通過從源代碼修補和編譯shell來推遲人們。

我想計算用戶在目錄中的時間,以便我可以確定他們想要的位置。 這是這個功能: http//github.com/joelthelion/autojump/tree/master重寫為bash內置,用於性能問題。 這個實現使用$PROMPT_COMMAND工作,但我想要集成一些東西。

目前還不清楚你修改了什么,但無論如何, bash (至少是IIRC引入概念和zsh ksh93 )支持,使用enable -f file name語法,將內置函數加載為外部動態加載模塊。

這些純文件模塊當然可以獨立分發,只要您確保它們與目標版本/體系結構兼容即可。 5年前,當你問這個問題時,這已經是真的了。

在你的情況下的一個問題是似乎沒有記錄的方法來重載內部內置的像cd一樣動態加載的同時保持訪問前者的能力。

一個簡單的解決方法是使用不同的名稱實現您的自定義CD,比如mycd,如下所示:

int mycd_builtin(list)
WORD_LIST *list;
{
  int rv;
  rv=cd_builtin(list);
  if(rv == EXECUTION_SUCCESS) {
    char wd[PATH_MAX+1];
    getcwd(wd,sizeof(wd));
    // do your custom stuff knowing the new working directory
    ...
  }
  return (rv);
}

然后使用別名或更好的shell函數來定制您的自定義版本而不是常規版本:

cd() {
  mycd "$@"
}

只要您的自定義不會影響標准命令的行為,因此不會冒使用它破壞腳本的風險,您的方法就沒有錯。

更改內置CD是任何管理員的支持噩夢,不受外國用戶歡迎。 命名為'smart-cd'並讓USER通過將其包含在.bashrc或.profile中來決定是否需要該功能有什么問題? 然后他們可以設置他們想要的東西。

此外,使用您在目錄中的時間長度是一個非常糟糕的偏好指示。 你如何區分空轉(一夜之間掛在/ tmp中的被遺忘的shell),長時間運行的腳本(夜間cron作業)和實際活動。

有許多其他方法可用於創建喜愛目錄的快捷方式:別名,軟鏈接,$ VARIABLES,腳本。 假設您的使用模式將受到系統其他用戶的歡迎,這是傲慢的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM