Сценарий не работает должным образом при запуске в качестве задания cron.

Согласно dlocate, clear_consoleявляется частью (пакета Debian )bash. Он не является частью восходящихbashисточников. Журнал изменений пакета сообщает вам, когда и откуда он появился:

 -- Matthias Klose   Thu, 23 Mar 2006 01:16:22 +0100

bash (3.1-3) unstable; urgency=low

...

  Merge from Ubuntu:
  * clear_console: New helper program to clear the console, including
    the scrollback buffer.
  * /etc/skel/.bash_logout: Install it again and use clear_console.
    Ubuntu #29405. Closes: #331504.

Упомянутые отчеты об ошибках -указывают причину, по которой они были добавлены:

  • Ubuntu #29405 , январь 2006 г. 'clear' не запускается перед 'exit'

    When logging out of a F1-F6 terminal, all of your existing output of activies are left on the screen even when the next login screen appears. The screen should be cleared before the new login appears, so private output won't be viewed by other users.

  • Debian #331504 , октябрь 2005 г. bash :Укажите файл /etc/skel/.bash по умолчанию _выход из системы

    It would be nice if bash would provide a default.bash_logout in /etc/skel for users to use by default to clean up the screen when login through console this is common request, specially in multi-user environments where people don't want others to see what they were working on.

Кстати, это упоминалось вместе с ncurses здесь:

  • Red Hat #815790 [RFE -конфиденциальность] очистить консоль , указав
  • Debian #376841добавьте очистку _консоли в ncurses -bin

Первая проблема была устранена путем адаптации функцииxtermпатча #107 в 1999 году (для консоли Linux ), а вторая никуда не исчезла из-за несовместимости лицензий.

1
07.06.2020, 23:54
1 ответ

Использование failglob— это еще один вариант, когда сбой расширения глобуса приведет к сбою всей команды (вообще ничего не выполняется ). В сочетании с оператором командной оболочки no -op:(двоеточие )это идеальный способ проверить результаты glob (успешно или нет ).

shopt -s failglob
: website-db-backup*

# The following code is purely indicative
if [ $? -eq 0 ]; then
  echo "Success, website-db-backup* exists"
else
  echo "Failed, nothing matches website-db-backup*"
fi

Это имеет преимущество перед ответом Хауке Лагинга в том, что он не затирает существующие позиционные параметры($1и т. д. ), хотя вы можете обойти это, используя функцию:

shopt -s nullglob

argc() {
  return $#
}
argc website-db-backup*

# Now check $? the same way as above
# $1, $2,... remain untouched

Массив Bash также является хорошим вариантом:

shopt -s nullglob
FILES=(website-db-backup*)
echo "${#FILES[@]}"  # gives number of matched files

Это ИМО самое простое и элегантное решение.

1
18.03.2021, 23:29

Теги

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