Имею небольшой скрипт который генерит специфический конфиг (${file1267_conf}).
# проверяем новые конфиг нгинкс, если ошибка, то выключаем генерируемый конфиг и требуем разобраться
nginx -t && service nginx reload || (
mv ${file1267_conf} ${file1267_conf}.${bad_ending}
nginx -t && service nginx reload || echo "Nginx config error!"
)В логи попадает только текст "Nginx config error!"
Как бы в output генерить ругань проверки конфига от nginx.
> Имею небольшой скрипт который генерит специфический конфиг (${file1267_conf}).
{
> # проверяем новые конфиг нгинкс, если ошибка, то выключаем генерируемый конфиг и
> требуем разобраться
> nginx -t && service nginx reload || (
> mv ${file1267_conf} ${file1267_conf}.${bad_ending}
> nginx -t && service nginx reload || echo "Nginx config error!"
> )
} 2>&1
> В логи попадает только текст "Nginx config error!"
> Как бы в output генерить ругань проверки конфига от nginx.
>[оверквотинг удален]
>{
>> # проверяем новые конфиг нгинкс, если ошибка, то выключаем генерируемый конфиг и
>> требуем разобраться
>> nginx -t && service nginx reload || (
>> mv ${file1267_conf} ${file1267_conf}.${bad_ending}
>> nginx -t && service nginx reload || echo "Nginx config error!"
>> )
>} 2>&1
>> В логи попадает только текст "Nginx config error!"
>> Как бы в output генерить ругань проверки конфига от nginx.Все равно не понятно, зачем использовать секцию
{ } 2>&1
>>} 2>&1
>>> В логи попадает только текст "Nginx config error!"
>>> Как бы в output генерить ругань проверки конфига от nginx.
> Все равно не понятно, зачем использовать секцию{ } 2>&1По "в логи попадает только echo" я предположил, что:
1/ в логи попадает вывод на STDOUT
2/ "ругань проверки конфига" не попадает в STDOUT потому, что "идёт" на STDERRЧтобы "положить" предполагаемый STDERR в "работающий" STDOUT, а предложил [попробовать] перенаправление ' 2>&1 '.
Чтобы не искать, вывод которой из кучи команд предположительно в том STDERR, я "взял" STDERR их всех, обернув "секцией" ' { ... } '.
Всё это предположения, всё это писать длинно. И, как выяснилось, непонятно. Прошу прощения за то, что написал первое сообщение на непонятном Вам языке bash.
Началось...Я вот не сильно понимаю разницу между ( ) и { }.
Возможно вы знаете какие-то особенности использования { } внутри ( ) ?
Это имели ввиду?
(
...
{ nginx -t && service nginx reload || echo "Nginx config error!" } 2>&1
...
)
Но тогда имеем:
test4.sh: 27: Syntax error: ")" unexpected (expecting "}")
> Началось...
> Я вот не сильно понимаю разницу между ( ) и { }.В оснновном, с субшеллом -- без субшелла.
В не-основном - заморочки с разным "пониманием" ' ; ', ниже.
> Возможно вы знаете какие-то особенности использования { } внутри ( ) ?
> Это имели ввиду?Я имел в виду то, что написал. В основном то, что где-что с теми проверками, я не знаю.
>
> (
> ...
> { nginx -t && service nginx reload || echo "Nginx config error!"
> } 2>&1
> ...
> )
>
> Но тогда имеем:
> test4.sh: 27: Syntax error: ")" unexpected (expecting "}")Это я знаю, почему, но никакого отношения к первому ответу оно не имеет.
Проблема вот в чём: перед ' ) ' точка с запяной не обязательна, а перед ' } ' она нужна. Также перевод строки (примерно, как в моём первом ответе) [во всяческих скобочных многосторчных конструкциях] [и без экранирования обратным слешом] равносилен ' ; '.
Поэтому:
или
( command1 && command2 || command3 ) 2>&1
, или
( command1 && command2 || command3; ) 2>&1
, или
{ command1 && command2 || command3; } 2>&1, или
{
command1 && command2 || command3
} 2>&1, но не
{ command1 && command2 || command3 } 2>&1