Parece que /media/Backups/backup.sh
é um script Bash em vez de um shell script padrão (POSIX). Da mesma forma, a sintaxe para backup_all.sh
é válida apenas para o Bash.
No Bash source
é um arquivo embutido e function
é uma palavra-chave do shell, mas eles não são especificados no padrão POSIX para sh , o interpretador de comandos shell. O shebang em seus scripts é #!/bin/sh
, que instrui o kernel a usar /bin/sh
para interpretar o script.
O motivo pelo qual o shell script trabalhou com o CentOS é que as distribuições baseadas no Red Hat criam /bin/sh
como um link simbólico para /bin/bash
. O Bash é (principalmente) compatível com o POSIX, mas estende seus recursos de várias maneiras. Com derivativos recentes do Debian (como Raspbian), /bin/sh
é um link simbólico para /bin/dash
, um shell POSIX que é mais rígido em sua compatibilidade (mas também mais leve e rápido que o Bash). É por isso que os seguintes erros estão sendo lançados pelo interpretador de scripts:
/media/Backups/backup_all.sh: 2: /media/Backups/backup_all.sh: source: not found
/media/Backups/backup_all.sh: 7: /media/Backups/backup_all.sh: function: not found
Isso pode ser corrigido por:
- Especificando explicitamente o Bash como o interpretador na sua função
backup()
comobash /media/Backups/backup.sh "$1" "$2" filter-list.txt
(observe que as variáveis são citadas). -
Especificando explicitamente o Bash como o shebang para
backup_all.sh
(ebackup.sh
)#!/bin/bash
Como alternativa, reescreva ambos os scripts para serem compatíveis com POSIX e continue usando /bin/sh
como o interpretador. Veja o artigo wiki do Ubuntu, Traço como / bin / sh para mais informações sobre isso.