我有一个想要通过 at 运行的 shellscript,并使用 script 来捕获记录。script -e 是在 util-linux-ng 2.18 中引入的,它返回子进程的 retval。
我想捕获通过脚本执行的命令的返回值,并做出相应的反应。
$ cat /tmp/b.sh
#!/bin/bash
script -qea /tmp/out.txt -c asdfl
if [ $? -eq 0 ]; then
touch /tmp/RET0
else
touch /tmp/RETNOT0
fi
$ /tmp/b.sh
bash: asdfl: command not found
$ ls /tmp/RETNOT0
/tmp/RETNOT0
我期望上述结果,因为“asdf1”不是一个有效的命令。
但是,如果我通过 at 或 crontab 运行相同的 shell 脚本,返回值为零。
$ crontab -l
40 17 * * * /tmp/b.sh
$ ls /tmp/RET0
/tmp/RET0
有人能帮助我理解为什么会发生这种情况,以及如何获得正确的返回值?