Pergunta

Eu escrevi um built-in para a festança que modifica o comando 'cd', uma exigência para o meu software. Existe uma maneira de realmente distribuir um carregável independentemente da própria bash? Eu tinha idealmente como para distribuir apenas uma gota no "recurso adicional" porque eu sei que as pessoas podem ser adiadas por remendar e compilar seu escudo a partir do código-fonte.

Eu quero tempo quanto tempo um usuário está em um diretório para que eu possa determinar onde eles querem ser. É essa funcionalidade: http://github.com/joelthelion/autojump/tree/master reescrito como um builtin bash, para problemas de desempenho. Esta implementação utiliza $PROMPT_COMMAND de trabalho, mas eu queria algo integrado.

Foi útil?

Solução

Não está claro o que você modificou mas em qualquer caso, bash (como pelo menos ksh93 que IIRC introduziu o conceito e zsh) suportes, usando a sintaxe enable -f file name, carregamento built-in funções como módulos carregados dinamicamente externos.

Estes módulos sendo arquivos texto certamente pode ser distribuído de forma independente, contanto que você se certificar de que eles são compatíveis com a versão de destino / arquitetura. Isso já era verdade há 5 anos quando fiz esta pergunta.

Um problema no seu caso é parece haver maneira de sobrecarregar nenhum documentou uma interna built-in como cd por um carregado dinamicamente, mantendo a capacidade de acesso a ex.

Uma simples solução alternativa seria implementar o seu cd personalizado com um nome diferente, dizem mycd, como este:

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);
}

, em seguida, usar um alias, ou melhor, uma função de shell para sua versão personalizada para ser usado em vez do normal:

cd() {
  mycd "$@"
}

Enquanto sua personalização não afeta o comportamento do comando padrão e, portanto, não arrisca quebrar scripts de usá-lo, não há nada errado na sua abordagem.

Outras dicas

Alterar o built-in cd é um pesadelo suporte para qualquer administrador e indesejável para usuários estrangeiros. O que está errado com nomeando-o 'smart-cd' e permitindo que o usuário decidir se querem a funcionalidade, incluindo-a no seu .bashrc ou .profile? Então, eles podem coisas configuração no entanto eles querem.

Além disso, usando o tempo que estive em um diretório é uma indicação muito pobre de preferência. Como você distinguir entre marcha lenta (um enforcamento esquecido shell em / tmp durante a noite), scripts de longa execução (trabalhos do cron noturno), e atividade real.

Há uma infinidade de outros métodos para criar atalhos para diretórios favoritos: aliases, softlinks, $ variáveis, scripts. É arrogante de você assumir que seus padrões de uso será recebido por outros usuários de seu sistema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top