2015-08-20 3 views
2

У меня есть сценарий, и в скрипте я запускаю команду ниже.ls - ltr error потому что ничего в папке

ls -1tr ${ARCH1_DIR}/* | grep ${LOG_PREFIX} > $copied_binlog_set 

если папка пуста Я получаю сообщение об ошибке.

лс не может получить доступ/n01/mysqlarch1/*: Нет такого файла или каталога

Сценарий на данный момент не прекращает работу. Есть ли способ, чтобы сценарий мог продолжить обработку, если папка пуста.

+0

Я смущен вашим выбором принятого ответа. Если этот вопрос касается исключительно * подавления * сообщения об ошибке, вы могли бы так сказать. Потому что ваш скрипт * выполняет * обработку, даже если команда в скрипте терпит неудачу. Надеюсь, вы это знаете? * Сценарий автоматически не прерывается, если возникает ошибка. * – DevSolar

ответ

0

Вы можете попробовать:

ls -1tr ${ARCH1_DIR}/* 2>/dev/null | grep ${LOG_PREFIX} > $copied_binlog_set 

Когда вы пишете 2> file, это перенаправить поток ошибок в file, но вы можете использовать null устройство и бросает вход он получает. Вы можете думать об этом как о черной дыре вашей системы.

0

* расширена оболочкой, а не командой ls. Это означает, что если нет файла, оболочка не разворачивает *, а ls пытается отобразить список для файла с именем* в целевом каталоге - которого нет, следовательно, ошибка.

Вы можете перенаправить сообщение об ошибке (ls ... 2>/dev/null), и поймать состояние ошибки с помощью переменной Баш PIPESTATUS:

if [ ${PIPESTATUS[0]} != 0 ] 
then 
    # whatever error handling your script needs at this point 
    echo "ls failed!" 
fi 

PIPESTATUS позволяет получить возвращаемое значение ($?) любой команды в цепи трубы. ($? вернет только значение последней команды в цепочке). Индекс в массив PIPESTATUS является индексом команды в цепочке труб.

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

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