Em vez de usar sua função, eu usaria esse método:
$ cat yael.bash
#!/bin/bash
set -eE -o functrace
file1=f1
file2=f2
file3=f3
file4=f4
failure() {
local lineno=$1
local msg=$2
echo "Failed at $lineno: $msg"
}
trap 'failure ${LINENO} "$BASH_COMMAND"' ERR
cp -- "$file1" "$file2"
cp -- "$file3" "$file4"
Isso funciona interceptando ERR e chamando a função failure()
com o comando atual line number + bash que foi executado.
Exemplo
Aqui, não tomei o cuidado de criar os arquivos f1
, f2
, f3
ou f4
. Quando eu executo o script acima:
$ ./yael.bash
cp: cannot stat ‘f1’: No such file or directory
Failed at 17: cp -- "$file1" "$file2"
Ele falha, informando o número da linha mais o comando que foi executado.