LINUX.ORG.RU

Невозможно получить результат выполнения Bash-команды - почему?

 ,


0

2

Имеется скрипт:

#!/bin/bash
set -ex 

echo "Before"

isCdRomMount=`mount | grep '^\/dev\/sr.*'`

echo "After"


Этот скрипт не доходит до печати строки After:
+ echo Before
Before
++ mount
++ grep '^\/dev\/sr.*'
+ isCdRomMount=

Скрипт возвращает значение 1.

Вопрос: что не так то? Как исправить?

★★★★★
Ответ на: комментарий от TeopeTuK

Мда, вот видимо почему в конце всяких поточных команд я видел xargs, и не мог понять нахрена это нужно. Да, я знаю что делает xargs без параметров, но непонятно было зачем так извращаются. А этим трюком оказывается можно подавить код ошибки.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Мда, вот видимо почему в конце всяких поточных команд я видел xargs, и не мог понять нахрена это нужно. Да, я знаю что делает xargs без параметров, но непонятно было зачем так извращаются. А этим трюком оказывается можно подавить код ошибки.

Зачем делать такой изврат, когда можно написать в конце || true?

annulen ★★★★★
()
Ответ на: комментарий от Xintrea

Я бы вопрос поставил иначе: нафига использовать set -e?

При ошибке надо сделать запись в лог, хозяина предупредить, …, а вот такое «ошибка -> exit» вещь малоприменимая (для меня)

futurama ★★★★★
()
Ответ на: комментарий от annulen

Так у тебя обычно команда с «|» состоит из нескольких «преобразователей». С xargs/cat у тебя имеется возможность увидеть что там было в стандартном потоке даже если произошла ошибка. А с «|| true» ты этого не увидишь.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от futurama

Ну вот расставил ты эти записи в лог и прочие обработчики, а ошибка случилась где-то где ты не предусмотрел. Видимо, что-то идёт совсем не так как надо, и лучше завершить скрипт, и вернуть не-нулевой код завершения по цепочке наверх, кто-нить его там да поймает и залогирует (если всё норм сделано).

firkax ★★★★★
()
Ответ на: комментарий от firkax

Дядя, ты дурак? (с) …

После каждой команды есть проверка результатов ее работы, без этого никак. Экстренная остановка скрипта, нафиг никому не нужна, т.к. неизвестно где это произошло

futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 1)
Ответ на: комментарий от futurama

Мне даже интересно посмотреть на твой скрипт где после каждого sleep стоит проверка на то, не случилось ли i/o error в попытке его запустить. Да даже не sleep, просто в большинстве случаев ошибка в какой-нить важной команде означает что скрипту дальше делать нечего, и нужна именно аварийная остановка.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)