Erro ao gerar aliases de bash

0

No meu ~/.shortcuts , tenho links simbólicos para alguns diretórios usados com frequência.

Em .bashrc (OS X), estou fazendo isso:

ls -1 ~/.shortcuts | xargs -I {} alias {}="'cd -P ~/.shortcuts/{}'"

Quando executo alias no terminal, a saída mostra os novos aliases , mas nenhum dos aliases funciona. Por quê?

Eu tenho alguns aliases como alias ll='ls -l' definidos em .bash_aliases . Fazer . ~/.bash_aliases in .bashrc carrega meus aliases personalizados perfeitamente. Mas, quando eu redireciono a saída xargs -t para um arquivo tmp e a coloco em bashrc (assim como eu optei por .bash_aliases ), isso não funciona.

O que estou fazendo de errado?

    
por harithski 09.01.2014 / 19:06

1 resposta

5

Não funciona porque o alias é executado em um subshell que sai imediatamente depois disso. Isso nunca afeta o shell que iniciou o pipeline.

Você deve tentar algo como:

for short in ~/.shortcuts/* ; do
  alias $(basename $short)="cd -P $short"
done

Isso pressupõe que você não possui arquivos com caracteres engraçados (como espaços em branco) em seus nomes nessa pasta.

(De um modo geral, não analisa a saída de ls , use as funções globbing do seu shell.)

    
por 09.01.2014 / 19:17