script -e 和 crontab 或者

script -e 和 crontab 或者

我有一个想要通过 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

有人能帮助我理解为什么会发生这种情况,以及如何获得正确的返回值?

相关内容