Как ни странно, у меня это не сработает.
nginx -t | grep -c 'successful' | awk '{if ($0==0) print "not found"; else if ($0>0) print "found"}'
Он возвращает не найден хотя результат выглядит следующим образом:
nginx: [warn] conflicting server name "xxx.co.za" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "xxx.co.za" on 0.0.0.0:443, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
not found
Даже простой grep не делает того, что от него ожидается.
(nginx -t | grep -q 'successful') && echo "Yes" || echo "Nope"
Любая идея, как я могу проверить, есть ли nginx -t команда прошла успешно или нет?
По значению выхода команды nginx, 0 в случае успеха.
root@nginx-1-vm:~# nginx -t && printf "Valid\n" || printf "Error\n"
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Valid
root@nginx-1-vm:~# mv /etc/nginx/nginx.conf /tmp
root@nginx-1-vm:~# nginx -t && printf "Valid\n" || printf "Error\n"
nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)
nginx: configuration file /etc/nginx/nginx.conf test failed
Error
Лучше, чем вывод с помощью grep, поскольку сообщения могут быть локализованы или иным образом изменены в будущем.