Posso usar o comando em aliases? [duplicado]

1
    

Esta pergunta já tem uma resposta aqui:

    

Exemplo:

Eu tenho alias chrome='google-chrome' . Quero que which chrome retorne a mesma coisa which google-chrome retorna, ou seja:

/usr/bin/google-chrome

Isso é possível?

    
por syntagma 25.01.2015 / 19:43

4 respostas

1

Se você realmente quer que which se comporte dessa maneira, você pode redefini-la como uma função de shell dessa maneira:

which() {
  if [ -n "$(type "$1" | grep "is aliased")" ]; then
    command which $(type "$1" | awk '
      {cmd=gensub("[07]", "", "g" , $NF);print cmd}')
  else
    command which "$1"
  fi
}

Note que, embora isso deva funcionar se o seu shell for bash , a função pode precisar ser ligeiramente modificada se você usar um shell diferente.

    
por 25.01.2015 / 23:51
1

Não use which para essa finalidade, ou melhor - não use which . Use type <alias_name> para ver expansão de alias. Use type -a <command> para ver todas as categorias possíveis que um determinado comando pode representar - programas de $ PATH, shell builtins, funções, aliases. Veja type -a echo por exemplo.

EDITAR:

Você também pode ver a expansão de alias usando alias <ALIAS_NAME> form, por exemplo:

$ alias chrome
alias chrome='google-chrome'

Para obter apenas uma parte depois de alias <ALIAS_NAME>=' , você tem de analisar a saída assim:

$ alias chrome | sed "s,alias !#:1=',," | sed "s,'$,,"

Antes de fazer isso em um script, certifique-se de que alias <ALIAS_NAME> retorne zero.

    
por 25.01.2015 / 20:38
1

em zsh , which é um comando builtin que tem o mesmo efeito de whence -c . Que imprimirá como o comando each listado será interpretado em um formato csh -like.

Em shells que não têm which como um builtin. which é ignorante de alias, builtins, funções e só pode pesquisar PATH para um comando com o nome.

Um exemplo é which echo . que pode imprimir /bin/echo , mas echo é (normalmente) um comando interno também, que teria precedência mais alta que um binário em PATH . Assim, o shell usaria o builtin e não /bin/echo .

    
por 25.01.2015 / 23:25
0

Se você quiser qual cromo e qual o google-chrome retornará a mesma resposta, crie um alias para chrome (alias chrome = / usr / bin / google-chrome). Os aliases são avaliados antes dos comandos, portanto, isso alterará o comando que o chrome retorna.

    
por 25.01.2015 / 22:59

Tags