2014-04-04 5 views
2

У меня есть PID хранится в файле:Оценка Bash: [vs ||

echo 394 > pid_stored 

Я проверяю, если ПИД-регулятор работает с:

kill -0 $(cat pid_stored) 2> /dev/null || echo "PID not running" 

, который работает как шарм, но если я хочу сделать несколько действий в истинном или ложном случае, я думаю, мне нужна структура if if if. Но по какой-то причине я не могу понять, [или [[не оценивают таким же образом:

if [[ $(kill -0 $(cat pid_stored) 2> /dev/null) ]] 
then echo "PID IS NOT RUNNING" 
fi 

не работает, он всегда оценивает как истинный. Потоки ошибок передаются с 2> на/dev/null, поскольку kill -0 оценивается как истинный, если pid существует или не работает

Спасибо!

ответ

4

Удалить [[ and ]] так, что используется для вычисления выражения:

if kill -0 $(<pid_stored) 2> /dev/null 
then 
    echo "PID IS RUNNING" 
else 
    echo "PID IS NOT RUNNING" 
fi 

PS: Вы можете избежать cat также с $(<pid_stored)

Отрицать вы можете использовать:

if ! kill -0 $(<pid_stored) 2> /dev/null 
+0

Высокий , спасибо, любопытство: я должен отрицать выражение! Я полагаю, что это соотносится с || оператор? Если вы хотите исправить это в своем примере кода, если кто-то найдет этот ответ, было бы наоборот: if! kill -0 $ (/dev/null – gletscher

+0

уверен, что добавил к моему ответу. – anubhava

+0

Я фактически запускаю сценарий как фоновый процесс с 'nohup', тогда выражение' $ ( gletscher

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

  • Нет связанных вопросов^_^