1

我为 bash 编写了一个内置程序,它修改了“cd”命令,这是我的软件的要求。有没有办法独立于 bash 本身实际分发可加载的?理想情况下,我希望只发布一小部分“附加功能”,因为我知道人们可以通过从源代码修补和编译他们的 shell 来推迟。

我想计算用户在目录中的时间,以便确定他们想要在哪里。就是这个功能: http: //github.com/joelthelion/autojump/tree/master重写为 bash 内置,以解决性能问题。这个实现用来$PROMPT_COMMAND工作,但我想要一些集成的东西。

4

2 回答 2

3

目前尚不清楚您修改了什么,但无论如何,bash(至少像ksh93IIRC 引入的概念和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 "$@"
}

只要您的自定义不影响标准命令的行为,因此不会冒险破坏使用它的脚本,您的方法就没有错。

于 2013-09-21T13:06:40.713 回答
2

更改内置 cd 对任何管理员来说都是一场噩梦,不欢迎外国用户。将其命名为“smart-cd”并让用户通过将其包含在 .bashrc 或 .profile 中来决定他们是否需要该功能有什么问题?然后他们可以随心所欲地设置东西。

此外,使用您在目录中的时间长度是一个很差的偏好指示。您如何区分空闲(一个被遗忘的外壳在一夜之间挂在 /tmp 中)、长时间运行的脚本(每晚 cron 作业)和实际活动。

有许多其他方法可以创建收藏目录的快捷方式:别名、软链接、$VARIABLES、脚本。假设您的使用模式会受到您系统的其他用户的欢迎,这是傲慢的。

于 2009-03-15T02:50:22.340 回答