Executando comando de string de alias

Executando comando de string de alias

Escrevi um script simples para percorrer o diretório do meu projeto de desenvolvimento e adicionar um atalho de alias para cada um:

shopt -s dotglob #Use shopt -u dotglob to exclude hidden directories
find ~/development/* -prune -type d | while IFS= read -r d; do 
    cur_dir="${d##*/}"
    cmd="alias ${cur_dir}=\"code $d\""
    echo "executing: $cmd"
    $cmd
done

E a saída fica assim:

executing: alias project-1="code /home/my_user/development/project-1"
./alias_for_projects.sh: line 6: alias: /home/my_user/development/project-1": not found
...

Se eu copiar e executar o comando:

alias project-1="code /home/my_user/development/project-1"

simplesmente funciona... Como faço para corrigir meu script?

Responder1

Você tem dois problemas:

  1. É complicado correrum comando armazenado em uma variável.Mas você realmente não precisa armazenar o comando em uma variável. Você pode simplesmente fazer alias "${cur_dir}"="code $d"onde você corre $cmd.

  2. Você está executando aliasem subshell. Bash executa comandos canalizados em um subshell (a menos que lastpipeesteja definido). Mas você não precisa do cano (ou findde ambos). Você pode apenas usar globbing normal (que você já está usando, então findfaz ainda menos sentido).

Combinado:

shopt -s dotglob
for d in ~/development/*/; do         # trailing slash - only directories match
    cur_dir="${d%/}"                  # strip trailing slash
    cur_dir="${cur_dir##*/}"
    alias "${cur_dir}"="code $d"
done

Responder2

Depois de ler todos os comentários, corrigi meu script assim:

shopt -s dotglob #Use shopt -u dotglob to exclude hidden directories
while IFS= read -r d; do 
    cur_dir="${d##*/}"
    #echo "${cur_dir}"="code $d"
    alias "${cur_dir}"="code $d"
done <<<$(find ~/development/* -prune -type d)

informação relacionada