У меня есть скрипт со многими командами. подобно

#!/bin/sh
mv new /root/
mv old /root/ 
mv foo /code
#many other commands

Если файл 'новый' не найден, bash выдаст сообщение об ошибке: foo: No such file or directory

Я могу подавить сообщение об ошибке, перенаправив весь вывод из stderr в /dev /null

mv foo /code 2>1 /dev/null

Вопросы:
Есть ли способ просто сделать это без изменения всего сценария? Есть ли способ, чтобы подавить все сообщения об ошибках в сценарии?

1 ответ1

1

Вы можете подавить все сообщения в скрипте, запустив скрипт так:
yourcommand &>filename. Например ./myscript &> /dev/null

Или вы можете использовать your_script 2> /dev/null

Последний перенаправит весь вывод из stderr в битовую корзину без необходимости добавлять это к каждой команде. Так как это удаляет все ошибки из видимого вывода, это сделает скрипт очень сложным для отладки. Вы должны проверить возвращаемое значение каждой команды, чтобы увидеть, произошла ли ошибка, и при необходимости прервать ее.

Вы можете сделать последнее с $? ,

Например

#!/usr/bin/env bash
mv new /root/
if [[ $? -ne 0 ]]; then
   #ignore error since it is not important, or
   #
   # echo "YIPES! CRITICAL FAILURE. Aborting whole script!
   exit 1
fi
Next command here

И т.д.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .