2009-03-14 14 views
1

Я написал встроенный для bash, который изменяет команду «cd», требование для моего программного обеспечения. Есть ли способ фактически распределить загружаемую информацию независимо от самого bash? В идеале я хотел бы распределить просто «дополнительную функцию», потому что я знаю, что люди могут быть отложены, исправляя и компилируя свою оболочку из исходного кода.Распределение загружаемых встроенных модулей bash

Я хочу посмотреть, как долго пользователь находится в каталоге, чтобы я мог определить, где они хотят быть. Это функциональность: http://github.com/joelthelion/autojump/tree/master переписан как встроенный bash для проблем с производительностью. Эта реализация использует $PROMPT_COMMAND для работы, но я хотел что-то интегрированное.

ответ

2

Неясно, что вы изменили, но в любом случае, bash (например, по меньшей мере, ksh93 который IIRC ввел понятие и zsh) поддерживает, используя enable -f file name синтаксис, загрузка встроенных функций, как внешних динамически загружаемых модулей.

Эти модули, являющиеся обычными файлами, могут быть независимо распределены независимо от того, насколько они совместимы с целевой версией/архитектурой. Это было уже пять лет назад, когда вы задали этот вопрос.

Одна проблема в вашем случае - это не документированный способ перегрузить встроенный встроенный, как 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); 
} 

затем использовать псевдоним, или лучше, функцию оболочки для специальной версии будет используется вместо обычного одного:

cd() { 
    mycd "[email protected]" 
} 

пока ваша настройка не влияет на поведение стандартной команды и при этом не сломаешь сценарии его использования, нет ничего плохого в своем подходе.

+0

Немного встречного взгляда и фактически ищущего «помощь включить» в моей оболочке приводит меня к выводу, что вы действительно правы. – Philluminati

+0

Спасибо, что нашли время ответить на это. – Philluminati

+2

Мне потребовались четыре года ;-) – jlliagre

2

Изменение встроенного компакт-диска является кошмаром поддержки для любого администратора и нежелательным для иностранных пользователей. Что не так, назвав его «smart-cd» и разрешив ПОЛЬЗОВАТЕЛЮ решить, хотят ли они функциональности, включив его в свои .bashrc или .profile? Тогда они могут настроить все, что захотят.

Кроме того, использование того, как долго вы были в каталоге, является довольно плохим показателем предпочтения. Как бы вы различали холостой ход (забытая оболочка, висящая в/tmp в одночасье), длинные скрипты (ночные задания cron) и фактическая активность.

Существует множество других способов создания ярлыков для избранных каталогов: псевдонимы, программные ссылки, $ VARIABLES, скрипты. Вы высокомерно полагаете, что ваши шаблоны использования будут приветствоваться другими пользователями вашей системы.