Como definir um alias por diretório?

13

Suponha que você tenha um apelido go , mas quer que ele faça coisas diferentes em diretórios diferentes?

Em um diretório, ele deve executar cmd1 , mas em outro diretório ele deve executar cmd2

A propósito, eu já tenho um alias para alternar para os diretórios acima, então é possível acrescentar a alocação de alias go ao foo alias?

alias "foo=cd /path/to/foo"

Trabalhando no bash (?) no OSX.

    
por B Seven 26.10.2012 / 20:54

5 respostas

13

Não é completamente certo o que você está perguntando, mas um alias apenas se expande para o que está no alias. Se você tiver dois aliases, poderá acrescentar os diferentes comandos, até aliases.

alias "foo=cd /path/to/foo; go"
alias "foo2=cd /path/to/foo2; go"

Em qualquer outra situação, você poderia especificar uma função em seu .bashrc

function go ()
{
    if [ "$PWD" == "/path/to/foo" ]; then
       cmd1
    elif [ "$PWD" == "/path/to/go" ]; then
       cmd2
    fi;
}

Caso você tenha mais opções, é melhor usar uma estrutura de casos.

    
por 26.10.2012 / 21:53
4

Tenho a sensação de que você é muito "orientado a diretórios", e, nesse caso, isso pode melhorar sua mentalidade.

(Mas, para ser honesto, acho que esta é uma má ideia, você gostaria que os comandos fossem globais.)

Em .bashrc , coloque alias go="./.cmd" (então source ~/.bashrc ).

Em seguida, em cada diretório, coloque um script chamado .cmd e, em seguida, chmod +x .cmd , em seguida, apenas go faça o seu trabalho.

    
por 27.10.2012 / 02:17
1

Se você adicionar a seguinte função ao seu .bashrc

function cd () { 
  builtin cd "$@" && [[ -f .aliases ]] && . .aliases
  return 0
}

Sempre que você gravar em um diretório com um arquivo .aliases, ele será originado.

Cuidado com a segurança se outras pessoas puderem criar arquivos em sua máquina.

Com esse truque, aliases nunca são removidos, mas você pode escrever quantos códigos quiser na função.

ondir usa esse truque e tem uma tonelada de sinos e assobios.

link

    
por 08.12.2017 / 18:22
1

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

Aqui está uma demonstração:

Engraçado, na verdade eu usei go como exemplo na demo. Eu não mostrei diretórios de comutação (algo que eu deveria mudar sobre a demo), mas as funções com o comando la são de fato locais para o diretório em que elas estão definidas.

    
por 01.06.2018 / 17:40
0
function go() {
  if [ ! -e "./.cmd1" ]
    then command go -a $1
    else command go -b $1
  fi
}

Coisa semelhante, mas assumir "ir" é um comando do qual você deseja uma funcionalidade diferente em um diretório específico.

    
por 08.10.2013 / 00:02