Eu uso o Ubuntu 16.04 (xenial) com o Bash 4.3.48(1).
Com base na resposta de Stephen Kitt nesta sessão , tentei executar o seguinte comando como parte de uma função chamada imb()
:
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip" -
Eu criei o arquivo no qual a imb()
função se encontra:
source ~/functions.sh
A função
imb() {
drt="/var/www/html"
date="$(date +\%F-\%T)"
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip" - # Note the hyphen before this comment;
zip -r "all_zipped-$date.zip" "$drt"/ -x "*/cache/*"
rm -f "$drt/db-$date.zip"
}
Meu problema
Chamar a função falha com o zip
erro:
zip error: Nothing to do! (/var/www/html/db-2018-04-13-22:27:47.zip)
Isso parece acontecer porque o hífen foi ignorado de alguma forma; Eu suponho que de uma olhada em:
type -a imb
quais saídas:
imb is a function
imb () {
date="$(date +\%F-\%T)";
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip";
zip -r "all_zipped-$date.zip" "$drt"/ -x "*/cache/*";
rm -f "$drt/db-$date.zip"
}
Notei a falta de hífen aqui.
Minha pergunta
Por que a função falha / por que o Bash supostamente ignora o hífen?
Você tinha uma versão antiga da função em seu ambiente e não recuperou o arquivo depois de editá-lo para adicionar a extensão
-
.Quando você reorganizou o arquivo ou reiniciou o shell, obteve a versão corrigida da função que viu no arquivo. Essa versão funciona.
Isso é realmente tudo; não há nada de interessante para explicar aqui. É uma situação bastante comum o ambiente acabar ficando dessincronizado com os arquivos que o configuram e isso gera confusão momentânea muitas vezes, mas é facilmente resolvido como foi neste caso.