Отправка вывода команды на экран и в syslog

bash поддерживает это изначально,

$ string1="abcmoocow"
$ string2="moo"
$ if [[ $string1 == *$string2* ]]; then echo "Match"; else echo "No Match"; fi
Match
$ string1="abccrowcow"
$ if [[ $string1 == *$string2* ]]; then echo "Match"; else echo "No Match"; fi
No Match

также для исправления вашего примера; change;

if $(echo $1 | grep -c $2) ; then

превратиться в:

if [ -n "$(echo $1 | grep -c $2)" ]; then

(проверяет, возвращает ли grep какие-либо данные)

также обратите внимание, что также можно работать с кодом выхода;

$ echo bob | grep "o" &>/dev/null; echo $?
0
$ echo bob | grep "z" &>/dev/null; echo $?
1
2
06.05.2016, 13:39
2 ответа

Это документированное поведение:

message

Запишите это сообщение в журнал; если оно не указано, и флаг -f не установлен, в журнал записывается стандартный ввод.

К счастью, вы можете добавить необходимую информацию в стандартный ввод логгера:

log()
{
    {
        printf "DEBUG: $@"          # Prepends the prefix.
        cat                         # Outputs the original input.
    } | logger -s -t $(basename $0)
}
2
27.01.2020, 22:04

Передача аргументов в функцию, которая может быть использована как $1 или $@, не то же самое, что чтение stdin.

Вам придется сначала получить данные из stdin. Следующее решение может быть не идеальным, но даст вам подсказку:

#!/bin/bash
log()
{
    read INPUT
    logger -s -t $(basename $0) "DEBUG: $INPUT"
}

echo "test" | (log)
1
27.01.2020, 22:04

Теги

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