2010-01-19 41 views
1

所以,想法是有一个脚本试图运行一个命令,如果命令失败它会显示任何警告/错误。我的尝试:“尝试”外壳脚本

$ 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 "[email protected]" 
if ! "[email protected]" >$tempfile 2>&1; then 
    cat $tempfile; 
    false; 
fi 

你认为这个脚本没问题吗(可移植性和功能)?

+0

我个人会在Python重写这个。我很佩服那些可以用shell脚本编写复杂工作程序的人,但我自己不会冒这个风险。 –

+0

让一个脚本执行一个命令会让你直接执行命令是不是? –

+1

@Steve,据推测,这将是一个较大的脚本的一部分,当一个命令不失败时抑制输出 – bdonlan

回答

1

一些变化我会做:

  • 使用"[email protected]"史蒂夫·埃默森建议
  • 不重定向的tempfile/dev/null标准输出;这就是你想要在变量中捕获的东西!
  • 考虑mktemp;它更便携。
  • 以指令的实际退出码捕捉并退出,信息不会丢失。

例如,没有错误检查,

tempfile=`mktemp 2>/dev/null || echo /tmp/tempfile$$` 
[ -w "$tempfile" ] || { echo "Can't make tempfile" >&2; exit 1; } 
"[email protected]" 2> $tempfile 
rc=$? 
case $rc in 
    0) ;; 
    *) cat "$tempfile" >&2 ;; 
esac 
rm -f "$tempfile" 
exit $rc 
+0

感谢您的评论。 –

1

为了保留字边界,我会在“if”语句中用双引号将$ @括起来。