linux - 一个 "try"的 shell 脚本

标签 linux shell portability

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

$ 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/

相关文章:

c++ - 有没有 C++ 方法来调用 linux shell 命令?

shell - 如何以安全的方式使用可移植 shell 创建临时文件?

mysql - 将预先存在的 Flex/Java/Hibernate/MySQL 应用程序迁移到可移植发行版的 CD 上的最佳途径?

node.js - 安装了 NodeJs 但无法执行。用 bash 脚本搞砸了

c - 将数据发送到等待 ppoll 的另一个进程的 stdin

c - 如何通过网络套接字可移植地发送 C 结构?

linux - 从 Linux http 服务器执行 wget 所需的设置

linux - tslib : Selected device is not a touchscreen (must support ABS_X and ABS_Y events)

linux - 使用 super 用户访问权限自动登录并在 Ubuntu 服务器 16.04.2 LTS 中运行我的脚本

windows - 为 Windows 编译 Linux 应用程序 (C)