É possível definir aliases sensíveis ao diretório em zsh (ou qualquer outro shell)?

0

Eu quero usar diferentes aliases (ou talvez: o mesmo alias de forma diferente) dependendo do diretório de trabalho atual. Por exemplo, talvez eu queira usar l como uma abreviação de ls com algumas opções extras. Eu quero usar duas variantes:

alias l="ls --sort=extension" # variant A
alias l="ls --quoting-style=literal" # variant B

Normalmente, eu gostaria de usar a variante A. No entanto, eu quero usar a variante B ao listar imagens - isto é, quando meu diretório de trabalho é ~/pictures . (Este é apenas um exemplo mínimo. Meu caso de uso real é mais complicado.)

Estou ciente de que eu poderia simplesmente escrever uma função l() com uma diferenciação de maiúsculas e minúsculas na saída de $(pwd) . No entanto, quero uma solução mais robusta que me permita renomear os diretórios específicos sem alterar nenhum alias (e isso não atrapalha meu .zshrc ).

Mas é possível sobrescrever ou adicionar aliases, por exemplo? configurando um local .zshrc dentro do diretório relevante (como é possível para o vim e um local .vimrc )?

Além disso, é (também) possível no bash ou em qualquer outro shell?

    
por k.stm 05.07.2017 / 17:39

4 respostas

2

Você pode criar uma função ou um script para verificar algum arquivo no diretório atual e alterar o comportamento com base nisso:

l() {
    if [ -f ./.ls-literal-quote ] ; then
         ls --quoting-style=literal "$@"
    else
         ls --sort=extension "$@"
    fi
}

Algo assim permitiria que você mantivesse a configuração no próprio diretório, em vez de um local centralizado, se é isso que você quer.

Agora, isso requer lixo nos diretórios envolvidos com arquivos extras, mas você pode conseguir contornar isso usando atributos estendidos (se o seu sistema suportar isso).

    
por 05.07.2017 / 17:52
1

Se você quer um apelido limpo que seja robusto, complexo e extensível, a primeira opção que vem à mente é a criação de um script de boa-fé (por exemplo, l ) mantido em ~/bin . Você pode adicionar esse diretório ao seu PATH ou criar um alias que o chame explicitamente para você.

    
por 05.07.2017 / 17:45
1

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

Ele permite que você crie e use pseudo-aliases e funções que são locais para o diretório em que estão definidas. Talvez a melhor parte seja que ele realize isso sem executar qualquer comando "fonte" arriscado. Essas soluções são mais fáceis e rápidas, mas são uma grande preocupação de segurança.

Aqui está uma demonstração:

    
por 05.01.2018 / 22:45
0

Claro; basta fazer o alias se expandir para algum código de shell que faz o teste para você:

alias l="[[ $PWD =~ /pictures$ ]] && ls --quoting-style=literal || ls --sort=extension"
    
por 05.07.2017 / 17:50