Estou usando archlinux com bash. Eu tenho tentado criar um novo alias, mas bashrc
não gosto do meu colchete. O comando abaixo deve contar a duração do vídeo de cada um .mkv
no meu diretório (profundidade = 3) e convertê-lo em horas.
alias vidlength="find . -maxdepth 3 -iname '*.mkv' -exec ffprobe -v quiet -of csv=p=0 -show_entries format=duration {} \; | paste -sd+ -| bc | awk '{print(($1/60)/60)}'"
Quando executo o source $ source ~/.bashrc
e
$ vidlength
depois disso, recebo este erro:
awk: cmd. line:1: {print((/60)/60)}
awk: cmd. line:1: ^ syntax error
Bashrc e coisas assim são muito novas para mim, e não consegui encontrar nenhum problema semelhante no google. Qualquer ajuda é muito apreciada. :)
O problema não tem nada a ver com o seu 'colchete'.
Você costumava
"
citar todo o valor do alias, então dentro dessa string$1
que você pretendia significar 'campo 1' em awk, é expandido para o parâmetro shell 1 no tempo de definição do alias que era um valor vazio; como resultado, a expressão((/60)/60)
não faz sentido -- você está tentando dividir algo por 60, mas não há algo. Você pode citar o$
com barra invertida, ou você pode usar o truque que as referências de campo awk ainda funcionam com um espaço nelas como$ 1
ou$ NF
enquanto os parâmetros do shell não funcionam.Como alternativa, use uma função shell (que aceita a sintaxe completa do shell) em vez de um alias (que exige que tudo seja compactado em uma única string):
Além disso, você pode simplificar isso fazendo com que o awk faça a adição em vez de um bc separado, e você não precisa de todos os parênteses: