Puede usar 'strace' para ejecutar un script y ver todo lo que el script y sus subprocesos hacen, incluso buscar y abrir archivos. Por ejemplo:
$ cat foo.sh
#!/usr/bin/env bash
touch /tmp/foon
$ chmod +x foo.sh
$ strace -f -e execve,access,open,stat -o foo.trace ./foo.sh
$ cat foo.trace
32176 execve("./foo.sh", ["./foo.sh"], [/* 42 vars */]) = 0
32176 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
32176 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
32176 open("/usr/local/lib/tls/x86_64/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
...
32176 execve("/bin/bash", ["bash", "./foo.sh"], [/* 42 vars */]) = 0
...
32177 execve("/usr/bin/touch", ["touch", "/tmp/foon"], [/* 41 vars */]) = 0
32177 open("/tmp/foon", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
...
32176 --- SIGCHLD (Child exited) @ 0 (0) ---
$
he recortado un montón de la otra actividad pasando allí (bibliotecas del sistema de apertura; la búsqueda de datos local, y mucho más). Verifique 'man strace' para detalles sobre qué significan las opciones; -f, -o y -e son los que uso más a menudo.
Pregunta interesante, no trivial de responder. Considere seguir la salida desde 'sh -x' (pero eso solo muestra los comandos que se ejecutan, no aquellos que no lo son. –