Тест на существование функции, которая может работать и на bash и на zsh?

У меня уже несколько дней возникает такая же проблема на моем хосте KVM / QEMU, на котором запущен Debian 8.6 с ядром 3.16.0-4-amd64. { {1}} Это часть моего журнала:

Jan 01 13:07:42 debbi3 kernel: Uhhuh. NMI received for unknown reason 20 on CPU 0.
Jan 01 13:07:42 debbi3 kernel: Do you have a strange power saving mode enabled?
Jan 01 13:07:42 debbi3 kernel: Dazed and confused, but trying to continue
Jan 02 10:48:58 debbi3 kernel: Uhhuh. NMI received for unknown reason 30 on CPU 0.
Jan 02 10:48:58 debbi3 kernel: Do you have a strange power saving mode enabled?
Jan 02 10:48:58 debbi3 kernel: Dazed and confused, but trying to continue

Это началось после установки BOINC (текущая задача - гипотеза Коллатца). В настоящее время я разрешаю BOINC захватить 99% процессора.

Итак, я предполагаю, что причина этих сообщений заключается в том, что ЦП перегружен и не получает достаточно времени для правильной обработки (аппаратных) прерываний. В вашем конкретном случае виновником может быть какой-то другой процесс или внешняя причина. YMMV.

7
23.12.2016, 01:23
2 ответа

Если вы хотите проверить, что существует определенная в настоящее время (или, по крайней мере, потенциально отмеченная для автозагрузки) функция с именем foo , независимо от того, может ли она также быть доступна встроенным / исполняемым / ключевым словам / псевдонимом name, вы можете сделать:

if typeset -f foo > /dev/null; then
  echo there is a foo function
fi

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

Вышеупомянутое должно работать в ksh (откуда оно взято), zsh и bash .

24
27.01.2020, 20:15

Это чистый POSIX, поэтому он должен работать во всех оболочках POSIX.

foo()
{
    echo "bar"
}

if type 'foo' 2>/dev/null | grep -q 'function'
then
   echo 'function exists'
fi
4
27.01.2020, 20:15

Теги

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