Обработка ошибок в сценарии оболочки

Если Вы предпочитаете делать это от GUI, это объяснено в справке для файлового браузера GNOME (известное как Наутилус):

http://library.gnome.org/users/user-guide/2.29/nautilus-permissions.html.en#nautilus-permissions-folder

В основном Вы просто выбираете папку, и затем из меню выбирают File-> Properties-> Permissions.

Иначе ответ sepp2k абсолютно корректен, и ссылка txwikinger является большой, если Вы интересуетесь всесторонним объяснением полномочий файла Unix.

3
21.09.2011, 10:19
3 ответа

Проиллюстрировать ответ Ignacio (использование после протокола: сначала проверьте, существует ли lockfile, и затем установите прерывание), можно решить проблему как это:

$ cat test2.sh
if [ -f run_script.lck ]; then
  echo Script $0 already running
  exit 1
fi
trap "rm -f run_script.lck" EXIT
# rest of the script ...
4
27.01.2020, 21:08

Проверьте на присутствие блокировки прежде, чем поставить капкан.

5
27.01.2020, 21:08
  • 1
    Наконец мы все еще должны поставить капкан, и он выйдет. –  lamwaiman1988 21.09.2011, 05:08

На пути поставлен капкан на ошибках и позволен sh прервите сценарий в случае ошибок (set -e). Например,

$ cat test.sh
set -e
trap "echo foo" ERR
if [ $# == 1 ]; then
  exit 0
fi
false
$ bash test.sh
foo
$ bash test.sh 1
$

(где $# количество аргументов),

В Вашем сценарии просто необходимо удостовериться, что Вы выполняете свою команду прерывания, когда сценарий работает успешно (т.е. никакого катастрофического отказа не происходит, например, в конце Вашего нормального процесса выполнения программы).

set -e средства, что каждый неравный статус выхода 0 заканчивает выполнение сценария. Подобный этому, с set -u каждый (вероятно, случайный) использование неопределенной переменной заканчивает выполнение.

Таким образом, передавая эту идею исходному варианту использования, решение могло быть похожим на это:

$ cat test.sh
set -e
trap "rm -f run_script.lck" ERR
if [ -f run_script.lck ]; then
  echo Script $0 is already running
  exit 1
fi
#
# do all the work ...
#
# no error until now
rm -f run_script.lck
4
27.01.2020, 21:08
  • 1
    , что делает, если оператор делает? –  lamwaiman1988 21.09.2011, 19:53
  • 2
    @gunbuster363 ответа, он проверяет, предоставляется ли один аргумент. В Вашем варианте использования Вы проверили бы существование файла блокировки. Я обновил ответ с другим примером. –  maxschlepzig 22.09.2011, 11:52

Теги

Похожие вопросы