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:
É 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
.Você está executando
alias
em subshell. Bash executa comandos canalizados em um subshell (a menos quelastpipe
esteja definido). Mas você não precisa do cano (oufind
de ambos). Você pode apenas usar globbing normal (que você já está usando, entãofind
faz 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)