Подавить ошибку в сценарии оболочки

Я хочу запустить сценарий, как показано ниже:

for i in `cat`;do 
result=command $i |awk '{print $2}'  ## it may give us the exact anwer or error like "command not found"
echo "$i - $result"  
done

для каждого $ i , я хочу напечатать:


$i - $result    # if success
$i - NO RESULT  # if I got command not found error

0
20.02.2017, 21:10
1 ответ
while read -r cmd; do
    result=$( command $cmd 2>/dev/null || echo "Just a boring error" )
    printf '%s\t- %s\n' "$cmd" "$result"
done

Read будет считывать со стандартного ввода оболочки построчно. Если вы попытаетесь использовать для cmd в $ (cat) , процесс cat должен будет завершиться до того, как будет запущена какая-либо часть цикла. В приведенном выше цикле каждая итерация выполняется по мере поступления строк на стандартный ввод.

Переменная result получит результат подстановки команды. Подстановка команды вернет вывод команды или echo , если команда в $ cmd завершилась с ненулевым статусом выхода.

1
28.01.2020, 02:46

Теги

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