Скрипт "try" shell - PullRequest
       9

Скрипт "try" shell

1 голос
/ 19 января 2010

Итак, идея состоит в том, чтобы иметь скрипт, который пытается выполнить команду, и, если команда не выполняется, он отображает любые предупреждения / ошибки. Моя попытка:

$ 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

Считаете ли вы, что этот скрипт в порядке (с точки зрения переносимости и функциональности)?

Ответы [ 2 ]

1 голос
/ 20 января 2010

Некоторые изменения я бы сделал:

  • Используйте "$@", как предложил Стив Эммерсон
  • Не перенаправлять стандартный вывод 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
1 голос
/ 19 января 2010

Я бы заключил $ @ в двойные кавычки в операторе if, чтобы сохранить границы слов.

...