Если вы запустите эту команду, вы получите два файла, один с именем stdout
и один с именем stderr
, содержащие вывод на stdout и вывод на stderr . соответственно:
(source env_ora.sh >/dev/null; sh aclenv/arun) >stdout 2>stderr
Ваша команда grep
видит только те данные, которые отправлены на стандартный вывод . Он даже не видит данные, которые здесь записаны в stderr .
Взяв вариант вашего примера в последующем -комментарии, вы увидите, что только stdout проходит через конвейер для обработкиsed
:
( echo "stdout"; echo "stderr" >&2 ) | sed 's/std/STD/'
stderr
STDout
Другая строка вывода записывается непосредственно в канал stderr , который по умолчанию подключен к вашему терминалу.
Таким образом, :конвейер прикрепляет стандартный вывод одной команды к стандартному выводу следующей. Канал stderr подключен к вашему терминалу, поэтому сообщения об ошибках (или обновления состояния )могут быть записаны туда, не влияя на поток фактических данных.
Просто измените условие if, как показано ниже:-
#!/bin/bash
a="abc"
b="abc"
c="deftdgr"
d="def"
if [[ $a = "$b" && $c == "$d"* ]]
then
echo "inside if loop"
#break you don't need this at all
else
echo "inside else loop"
fi
Это называется логическим AND
логическим оператором.
exp1 -a exp2 returns true if both exp1 and exp2 are true.
Если вы сопоставляете строки, вы делаете:
if [[ condition1 && condition2 ]]; then echo "blah" ; fi
Один из способов выразить это:
if [[ "$a" == "$b" && "$a" == "$c" ]]
При сравнении чисел вы делаете:
if (( (a == b) && (a == c) )); then echo "blah" ; fi
Док нажмите