2014-11-19 3 views
1

мне нужен более компактный, предпочтительно один вкладыш, на следующий Баш скрипта:Как я могу сделать этот скрипт bash одним однострочным?

#/bin/sh 
service openstack-keystone status > /dev/null 
service_rc=$? 
keystone token-get 2>&1 | grep "^Authentication Failed" > /dev/null 
keystone_rc=$? 
if [ $service_rc != 0 -o $keystone_rc == 0 ] 
then 
     echo "need to restart" 
else 
     echo "ok" 
fi 

В конце концов я должен получить эту логику в сервис кукольного где стандартная проверка статуса недостаточно.

Обновлено. Извините за то, что я не был более ясен в своем первоначальном вопросе и благодаря вам, которые прокомментировали и ответили. :)

+0

Какие выгоды вы ожидаете от его сжатия в одной строке? Тестирование '[-e file]' намного лучший способ проверить, существует ли файл, чем анализировать вывод ошибки 'ls'. –

ответ

4

Вы можете использовать:

service blah status > /dev/null && 
    keystone token-get 2>&1 | grep -q "^Authentication Failed" && 
    echo "ok" || echo "need to restart" 
+0

Спасибо за отличный ответ. Но я должен, вероятно, обновить свой вопрос, потому что я просто использовал 'ls ...' для моделирования вывода в stderr. Я фактически выполняю команду 'keystone token-get' и grepping для строки« Ошибка аутентификации »в stderr. –

+0

ok проверить мой обновленный ответ для этого. – anubhava

Смежные вопросы