目前尚不清楚您修改了什么,但无论如何,bash
(至少像ksh93
IIRC 引入的概念和zsh
)支持使用enable -f file name
语法将内置函数加载为外部动态加载的模块。
这些作为普通文件的模块当然可以独立分发,只要您确保它们与目标版本/架构兼容。五年前当你问这个问题时,这已经是真的了。
在您的情况下,一个问题是似乎没有记录的方法可以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 "$@"
}
只要您的自定义不影响标准命令的行为,因此不会冒险破坏使用它的脚本,您的方法就没有错。