Использование Shell “: -” и преимущество

Рассмотрение образца mcelog.conf файл конфигурации, который это надеется содержать больше всего, если не все типы триггеров это может иметь дело с.

DIMMs

[dimm]
#
# execute these triggers when the rate of corrected or uncorrected
# errors per DIMM exceeds the threshold
# Note when the hardware does not report DIMMs this might also
# be per channel
# The default of 10/24h is reasonable for server quality·
# DDR3 DIMMs as of 2009/10
#uc-error-trigger = dimm-error-trigger
uc-error-threshold = 1 / 24h
#ce-error-trigger = dimm-error-trigger
ce-error-threshold = 10 / 24h

Сокеты

[socket]
# Threshold and trigger for uncorrected memory errors on a socket
# mem-uc-error-trigger = socket-memory-error-trigger
mem-uc-error-threshold = 100 / 24h
# Threshold and trigger for corrected memory errors on a socket
mem-ce-error-trigger = socket-memory-error-trigger
mem-ce-error-threshold = 100 / 24h

Кэш

[cache]
# Processing of cache error thresholds reported by Intel CPUs
cache-threshold-trigger = cache-error-trigger

Страница

[page]
# Memory error accouting per 4K memory page
# Threshold for the correct memory errors trigger script
memory-ce-threshold = 10 / 24h
# Trigger script for corrected errors
# memory-ce-trigger = page-error-trigger

Триггеры

Триггерами можно управлять в этом разделе.

[trigger]
# Maximum number of running triggers
children-max = 2
# execute triggers in this directory
directory = /etc/mcelog

Демонстрационные триггеры

Существуют некоторые демонстрационные триггеры здесь на mcelog странице GitHub.

Демонстрационный сценарий триггера, dimm-error-triggers:

#!/bin/sh
#  This shell script can be executed by mcelog in daemon mode when a DIMM
#  exceeds a pre-configured error threshold
# 
# environment:
# THRESHOLD     human readable threshold status
# MESSAGE   Human readable consolidated error message
# TOTALCOUNT    total count of errors for current DIMM of CE/UC depending on
#       what triggered the event
# LOCATION  Consolidated location as a single string
# DMI_LOCATION  DIMM location from DMI/SMBIOS if available
# DMI_NAME  DIMM identifier from DMI/SMBIOS if available
# DIMM      DIMM number reported by hardware
# CHANNEL   Channel number reported by hardware
# SOCKETID  Socket ID of CPU that includes the memory controller with the DIMM
# CECOUNT   Total corrected error count for DIMM
# UCCOUNT   Total uncorrected error count for DIMM
# LASTEVENT Time stamp of event that triggered threshold (in time_t format, seconds)
# THRESHOLD_COUNT Total umber of events in current threshold time period of specific type
#
# note: will run as mcelog configured user
# this can be changed in mcelog.conf

logger -s -p daemon.err -t mcelog "$MESSAGE"
logger -s -p daemon.err -t mcelog "Location: $LOCATION"

[ -x ./dimm-error-trigger.local ] && . ./dimm-error-trigger.local

exit 0

Ссылки

4
28.04.2015, 04:51
4 ответа

Так что после установки других вещей, чтобы исправить драйверы, сообщение обстановки ушло, и исправление завершилось добавлением режимов «1280x1024» до подраздела в разделе Экран в xorg.conf

xorg.conf

] -121--217285-

Это более оптимизировано; Вы можете сделать что-то в одной простой команде, а не два (Например, [[-ZZ $ var]] && var = / temp ) или сложная команда, такая как

if [[ -z $var ]]
then
    var=/temp
fi

. Также не требуется, чтобы условное значение быть назначенным для переменной. Например,

#!/bin/sh
prog="$1"
# Do sanity checks & input validation here.
cc "$prog" -o "${2:-$(basename "$prog")}"

, если это вызывается как COMP FOO.C , Это будет компилировать foo.ch и напишите скомпилированный выход на foo . Но COMP FOO.C FU будет компилироваться foo.c И напишите скомпилированный выход на Фу .

Это становится особенно значимым Если вы хотите использовать несколько параметров с значениями по умолчанию:

some_command ${1:-default_value1} ${2:-default_value2} ${3:-default_value3} ${4:-default_value4} ${5:-default_value5} ${6:-default_value6} ${7:-default_value7} ${8:-default_value8} ${9:-default_value9}

выполнение этого способа потребует около 18 команд настроить параметры.

Еще один пример того, как использовать это где вам не нужно назначать условное значение переменной Является ли сценарий, который хочет позволить пользователю редактировать файл:

#!/bin/sh
    ⋮ 
file=something
    ⋮ 
"$(EDITOR:-vi}" "$file"

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

4
27.01.2020, 20:47

Существует три случая: VAR , возможно, было первоначально не рассеяно, пустым или непустым. В первых двух случаях он установлен на / TEMP ; В последнем случае он остался один.

Другим способом сделать то же самое, является

: "${var:=/temp}"

Я предпочитаю, что один, потому что цепочка назначений яснее, но это вопрос эстетики.

При нормальных настройках это эквивалентно

if [ -z "$var" ]; then var="/temp"; fi

, которое, возможно, более четко. Тем не менее, синтаксис $ {var: - ...} или $ {var: = ...} имеет преимущество: он работает даже в , набор , который Причины $ var к ошибке, если var unset. Преимущество установлено -U заключается в том, что он позволяет легко поймать ошибки из-за неправильного использования имени переменной или забывающей, чтобы определить его при определенных условиях. Тем не менее, он может использоваться только с сценариями, которые не предполагают, что расширение переменных unset всегда возможна.

3
27.01.2020, 20:47

Это не «Обшивок» - это «значение по умолчанию», в другом слове, если значение не установлено (или пустое) Используйте значение по умолчанию.

1
27.01.2020, 20:47

Это компактная идиома . Вы можете использовать ее inline, где выполняются команды:

cmd "${arg1}" "${arg2}" "${arg3:-42}"

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

: "${1:?} ${2:?}"

или проверить и назначить ее семантически названным переменным, над которыми Вы работаете в программе или или в ответ на которые Вы работаете в программе или в ответ на которые Вы работаете в программе, или наоборот. функции:

foo=${1:?} bar=${2:?} baz=${3:-42}

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

Вы также можете использовать для этой цели связанные конструкции ${var:=val} (или ${var=val}), если задействованы не позиционные параметры, а переменные:

: "${foo:=${1:?}} ${bar:=${2:?}} ${baz:=${3:-42}}"

Идиома ${var:-42} также имеет вариант ${var-42} (i. e. без двоеточия :) до различать неотсыпанных параметров от пустых параметров; конструкции теста не могут напрямую различать пустые переменные от неотсыпанных переменных.

3
27.01.2020, 20:47

Теги

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