因此,我们的想法是让一个脚本尝试运行一个命令,如果命令失败,它会显示任何警告/错误。我的尝试:

$ 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

10-08 08:18