Ответ 1
возможно, выход идет на stderr
, а не на stdout
?
попробуйте это: OUTPUT=$(sudo apache2ctl configtest 2>&1)
Я пытаюсь перенаправить вывод команды на переменную:
OUTPUT=$(sudo apache2ctl configtest)
а затем прочитать его:
echo $OUTPUT
При его запуске вывод следующий:
19:19:12 [email protected] ~ OUTPUT=$(sudo apache2ctl configtest)
Syntax OK
Syntax OK
Но переменная остается пустой. Я пробовал то же самое для других команд, и все работает нормально.
OUTPUT=$(ls -l)
Это записывает список файлов в переменную OUTPUT
чтобы его можно было прочитать позже. Что я должен сделать, чтобы он работал?
возможно, выход идет на stderr
, а не на stdout
?
попробуйте это: OUTPUT=$(sudo apache2ctl configtest 2>&1)
Для возможной ситуации nginx, когда configtest может быть успешным с ошибкой в файлах конфигурации. Пример:
nginx: [warn] conflicting server name "test.com" on 0.0.0.0:80, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
для правильной проверки ошибок в сценариях bash необходимо использовать:
if [[ $((sudo /sbin/service nginx configtest) 2>&1 | grep "failed\|warn" ) ]]; then
echo "ERROR!!!"
else
echo "OK!!!"
fi