因此,我们的想法是让脚本尝试运行命令,如果命令失败,它会显示任何警告/错误。我的尝试:
$ 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
您认为这个脚本还好吗(就可移植性和功能性而言)?
最佳答案
我会做的一些改变:
- 按照 Steve Emmerson 的建议使用
"$@"
- 不要将
tempfile
的标准输出重定向到/dev/null
;这就是您要在变量中捕获的内容! - 考虑
mktemp
;它更便携。 - 捕获并使用命令的实际退出代码退出,因此信息不会丢失。
例如,没有错误检查,
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
关于linux - 一个 "try"的 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2094862/