Распределение загружаемых встроенных модулей Bash
-
22-07-2019 - |
Вопрос
Я написал встроенную утилиту для bash, которая изменяет команду 'cd', требование для моего программного обеспечения. Есть ли способ на самом деле распространять загружаемый независимо от самого Bash? В идеале я хотел бы распространить только каплю "дополнительная функция" потому что я знаю, что людей можно отложить, исправив и скомпилировав их оболочку из исходного кода.
Я хочу определить, сколько времени пользователь находится в каталоге, чтобы я мог определить, где он хочет быть. Вот эта функциональность > Переписан как встроенный bash, для проблем с производительностью. Эта реализация использует $ PROMPT_COMMAND
для работы, но я хотел что-то интегрированное. Р>
Решение
Непонятно, что вы изменили, но в любом случае bash
(как минимум ksh93
, в котором IIRC представил концепцию, и zsh
) поддерживает, используя синтаксис enable -f имя файла
, загрузку встроенных функций в качестве внешних динамически загружаемых модулей.
Эти модули, представляющие собой простые файлы, безусловно, могут распространяться независимо, если вы уверены, что они совместимы с целевой версией / архитектурой. Это было верно 5 лет назад, когда вы задавали этот вопрос.
Одна из проблем в вашем случае заключается в том, что, похоже, не существует документированного способа перегрузки внутренней встроенной программы, такой как 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 "$@"
}
Пока ваша настройка не влияет на поведение стандартной команды и, следовательно, не рискует нарушить использование скриптов, в вашем подходе нет ничего плохого.
Другие советы
Изменение встроенного компакт-диска - кошмар поддержки для любого администратора и нежелателен для иностранных пользователей. Что плохого в том, чтобы назвать его «smart-cd» и позволить ПОЛЬЗОВАТЕЛЮ решить, хотят ли они эту функциональность, включив ее в свои .bashrc или .profile? Затем они могут настроить вещи так, как они хотят.
Кроме того, использование того, как долго вы были в каталоге, является довольно плохим показателем предпочтений. Как бы вы различали холостой ход (забытая оболочка, висящая в / tmp за ночь), долго выполняющиеся сценарии (ночные задания cron) и реальную активность.
Существует множество других способов создания ярлыков для избранных каталогов: псевдонимы, программные ссылки, $ VARIABLES, скрипты. С вашей стороны высокомерно предполагать, что ваши шаблоны использования будут приветствоваться другими пользователями вашей системы.