Upstart: вывести вывод из нескольких команд

Я пытаюсь определить, есть ли сетевая ссылка (кабель подключен / отсоединен) в сценарии выскочки (Ubuntu 12.04). Здесь соответствующая часть моего скрипта (который работает):

script
if  [ /sbin/ethtool eth0 | /bin/grep "Link detected: yes" > /dev/null ] ; then
    exec prog1
else
    exec prog2
fi

end script

(попробуйте запустить prog1, если есть ссылка в противном случае prog2.) Как это исправить?

1
задан 4 June 2014 в 19:12

1 ответ

Вы должны помнить, что Upstart запускает код оболочки в / bin / sh (это Dash), а не / bin / bash. Если вы поместите свой код в sh, это не сработает:

$ if  [ /sbin/ethtool eth0 | /bin/grep "Link detected: yes" > /dev/null ]; then echo cheese; fi
sh: 9: [: missing ]
/bin/grep: ]: No such file or directory

Итак, есть проблема с синтаксисом. Вместо использования неявного кода состояния, который использует bash, я бы подумал об этом:

/sbin/ethtool eth0 | /bin/grep "Link detected: yes" > /dev/null
if  [ $? -eq 0 ]; then echo cheese; fi

Это работает для меня в sh.

[ ! d3]

Или вы можете заставить поведение bash обернуть его в загрузчик bash:

script
/bin/bash <<EOT
    if  [ /sbin/ethtool eth0 | /bin/grep "Link detected: yes" > /dev/null ]; then echo cheese; fi
EOT
end script
0
ответ дан 24 May 2018 в 06:59

Другие вопросы по тегам:

Похожие вопросы: