Definindo aliases para um determinado diretório [duplicado]

4

Existe uma maneira de ter um alias definido para um diretório específico e seus subdiretórios?

Eu sei que posso colocá-lo no meu arquivo .bashrc , mas gostaria apenas de um determinado diretório.

Editar: o que eu quero dizer é que gostaria de executar comandos com alias dentro do diretório

~$ foo
-bash: foo: command not found
~/project$ foo
Bar!
    
por Daniel A. White 18.02.2014 / 01:35

6 respostas

2

Editar: eu deletei uma resposta anterior que continha autoloaded funciona como comandos locais, mas também mais ou menos reinventados o problema de ter '.' em $ PATH - pode-se executar um código inesperado.

Em vez disso, aqui está uma versão mínima de um wrapper para 'cd', já que vários os entrevistados sugeriram quais arquivos de fontes somente em diretórios. Não manipula pushd ou popd, nem desfeito ou Unalias quaisquer comandos definidos depois de se deslocar para outro diretório - pode-se definir uma função separada de limpeza que pode ser chamada para isso.

cd ()
{
    command cd "$@" || return;
    local FRC=.functions.rc;
    case ${PWD:- $(pwd)} in
        /some/special/dir)
            [ -O "$FRC" ] && source "$FRC"
        ;;
    esac
}
    
por 18.02.2014 / 03:06
2

Eu posso sugerir usar o utilitário GNU Make com declaração de comandos no Makefile no diretório de interesse (~ / project). Então é possível obter tal funcionalidade:

~$ foo
-bash: foo: command not found
~$ make foo
make: *** No rule to make target 'foo'.  Stop.
~/project$ make foo
Bar!

Makefile para este exemplo:

.PHONY : foo
foo:
    @echo "Bar!"

Isso funcionará apenas no diretório de interesse, mas não em subdiretórios.

    
por 31.01.2018 / 09:31
1

Você pode criar cd , pushd e popd funções que chamam os recursos internos e, em seguida, examinar o CWD e usá-lo para determinar quais aliases adicionar ou remover:

function cd() {
    command cd "$@"
    blah blah blah...
}
    
por 18.02.2014 / 03:02
0

Eu acredito que o que você está pedindo é chamado de bookmarking. As duas abordagens que vi usadas para fazer isso são manter um conjunto de aliases ou usar uma ferramenta para "marcar" algum caminho de diretório longo e, em seguida, usar essa ferramenta para "saltar" para um diretório marcado.

Método 1 - Aliases

Você pode criar aliases para esses diretórios e armazená-los no arquivo ~/.bashrc . Você pode então digitar coisas assim:

alias dir1="cd ~/path/to/some/deep/deep/dir1"
alias dir2="cd ~/path/to/some/deep/deep/dir2"

Agora, quando você faz login, aliases como esses funcionarão apenas em qualquer shell que faça uso do arquivo ~/.bashrc .

Método 2 - Ferramentas de marcação de diretório

Veja este Q & Um título: Navegação de diretório rápido no terminal . Ferramentas como autojump ou O xd - eXtra fast Directory changer , também pode ser usado para "marcar" diretórios usados com freqüência, para que você possa facilmente alterá-los sem precisar digitar caminhos longos.

Aliases "sensíveis" de contexto

Isso seria algo que só está disponível quando você estiver em um diretório específico. Eu não estou ciente de qualquer maneira de fazer algo assim. Você teria que desenvolver sua própria solução caseira para facilitar algo assim. Um script seria o método lógico para implementar algo assim.

Uma abordagem seria desenvolver um script que verifique se o diretório em que você está antes de executar. Se não for o diretório designado, ele simplesmente sairá. Caso contrário, continuaria. Isso poderia ser implementado como uma função no Bash também.

    
por 18.02.2014 / 02:31
0

A única maneira que posso pensar em fazer isso é ligar a chamada para cd ( pushd , popd , etc) para executar uma função personalizada que inspeciona o ( real ) diretório de trabalho atual e adiciona ou remove aliases (ou funções) conforme necessário.

    
por 18.02.2014 / 03:11
0

Estou trabalhando em um projeto que faz exatamente isso. Confira: localalias .

Aqui está uma demonstração:

    
por 01.06.2018 / 18:22