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.