В моем скрипте bash мне нужно проверить, существует ли двоичный файл журнала. Если это так, я передаю выходные данные приложения.
Редактировать --------
| Это должно быть трубопроводом, приложение должно работать постоянно.
---------------
Я пытался поместить материал конвейера в переменную и использовать его позже. Что-то вроде:
if [ -e /usr/bin/logger ]; then
OUT=| /usr/bin/logger
fi
application param1 2>&1 $OUT > /dev/null &
но это не работает, выходные данные не передаются в логгер. Если я помещаю материал конвейера прямо в стартовую строку приложения, это работает. К сожалению, настоящий сценарий становится слишком сложным, если я использую командные строки с и без логгера в операторах if / else - причина в том, что у меня уже есть if / else и добавление новых удвоит число наблюдений .
Простое тестовое приложение
TMP=| wc -m
echo aas bdsd vasd $TMP
дает
$ ./test.sh
0
AAS BDSD VASD
Кажется, что каким-то образом command1 и command2 выполняются отдельно.
Мне удалось решить проблему (как в тестовом, так и в реальном сценариях), используя eval
и поместив условные выражения в двойные кавычки.
TMP="| wc -m"
eval echo aas bdsd vasd $TMP
$ ./test.sh
14
Это похоже на обходной путь. Как правильно это сделать?