Я хочу запустить сценарий, как показано ниже:
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
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
завершилась с ненулевым статусом выхода.