因此,我们的想法是让一个脚本尝试运行一个命令,如果命令失败,它会显示任何警告/错误。我的尝试:
$ cat try.sh
#! /bin/sh
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/temp$$
trap 'rm -f $tempfile >/dev/null 2>&1' 0
trap 'exit 2' 1 2 3 15
echo "$@"
if ! "$@" >$tempfile 2>&1; then
cat $tempfile;
false;
fi
你认为这个脚本可以吗(wrt的可移植性和功能性)?
最佳答案
我会做一些改变:
按照steve emmerson的建议使用
不要将"$@"
的stdout重定向到tempfile
;这就是您试图在变量中捕获的内容!
考虑一下/dev/null
;它更便于携带。
用命令的实际退出代码捕获和退出,因此信息不会丢失。
例如,没有错误检查,
tempfile=`mktemp 2>/dev/null || echo /tmp/tempfile$$`
[ -w "$tempfile" ] || { echo "Can't make tempfile" >&2; exit 1; }
"$@" 2> $tempfile
rc=$?
case $rc in
0) ;;
*) cat "$tempfile" >&2 ;;
esac
rm -f "$tempfile"
exit $rc