Bash: Структура, подобная функции, которая не требует вызова? [закрыто]

Мне нравится munin - достаточно просто установить (munin-node на каждом хосте и munin "мастер" на сервере сбора и построения графиков) и указать хостам я получил полную информацию об аппаратных датчиках, процессоре, дисках, памяти, прерываниях и многом другом. У него есть веб-интерфейс для просмотра, но, насколько я знаю, нет для настройки.

Cacti — хорошо зарекомендовавший себя инструмент мониторинга с полным веб-интерфейсом для настройки и управления. Хорошо справляется с ping и snmp для сетевого управления хостами; Я не нашел, что так легко получить информацию, которую вы запрашиваете.

Если вы хотите провести полную оценку, Nagios — еще один широко используемый бесплатный пакет, но у меня нет информации о нем.

0
16.02.2018, 12:46
2 ответа

Se llama comando compuesto y la sintaxis es

{ compound-list; }

(este es un ejemplo de un comando compuesto, otras cosas como forbucles, etc. también son comandos compuestos)

Por ejemplo:

{
    echo 'hello'
    echo 'world'
}

El ;solo es necesario si no hay una nueva línea antes del final}:

{ echo 'hello'; echo 'world'; }

Los comandos en la construcción {...; }se ejecutan en el entorno actual , al igual que para una función.

Más información sobre esto está disponible en la descripción del estándar POSIX de comandos compuestos .

No hay razón (o posibilidad )de nombrar estas secciones ya que nombrar una sección así es más o menos equivalente a crear una función de shell de todos modos. Además, nombrar un comando compuesto solo sería necesario si se va a consultar más adelante, que es para lo que se usan las funciones.

Obviamente se pueden utilizar comentarios:

# my hello world thing
{
    echo 'hello'; echo 'world'
}

De manera similar, se puede tener una subcapa con

(
    echo 'hello'
    echo 'world'
)

Esto se ejecuta en un entorno secundario del shell actual, y los cambios en las variables, etc. no se reflejarán en el shell actual.

La sintaxis general es

( compound-list )

Aquí, no hay necesidad de un final ;antes de ).


Como curiosidad, las funciones de shell pueden usar (...)en lugar de {...;}para ejecutar su código en un entorno local:

helloworld () (
    echo 'hello'
    echo 'world'
)

Esto puede ser útil para saber si se está escribiendo una función en un lenguaje shque no admite variables locales(localo typesetenbash)y que no necesita modificar el entorno del script.

3
28.01.2020, 02:19

¿Son suficientes los comentarios?

Puede usarlos de la siguiente manera para reagrupar comandos y proporcionar un nombre a esos grupos, y nada le prohíbe usar sangría:

#context1
    echo "I'm in context1"
#end of context1

#context2
    echo "I'm in context2"
#end of context2

También podría reagrupar los comandos con {...}, lo que no tendría ningún otro efecto en este contexto AFAIK:

#context1
{
    echo "I'm in context1"
}
#end of context1


{ #context2
    echo "I'm in context2"
} #end of context2

Si desea además asociar estos contextos con un ámbito local, puede usar subcapas:

#context1
(
    context="context1"
    echo "I'm in $context"
)
#end of context1

( #context2
    echo "I'm in $context" #context is undefined there
    context=context2
    echo "I'm in $context"
) #end of context2

pruébalo aquí

1
28.01.2020, 02:19

Теги

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