LINUX.ORG.RU

Как быть?

 


0

1
{ command; rc=$?; } | grep -v что-то

(( rc == 0 )) && делаем что-то


Проблема в том, что переменная rc не назначается из-за того, что после неё идёт пайп.
Как быть в такой ситуации, если нужна подобная конструкция?

★★★★★

Ответ на: комментарий от Niroday

потому что мне надо отгрепать команду, при этом получить ЕЁ статус возврата, а не грепа

teod0r ★★★★★
() автор топика

Объяви переменную rc перед скобками. В текущем варианте она не видна за пределами указанной области видимости.

shell-script ★★★★★
()

Есть массив $PIPESTATUS, в котором лежат rc для команд, которые через pipe гонятся, попробуйте в этом направлении покопать.

$ true | grep . ; echo $PIPESTATUS
0

$ false | grep . ; echo $PIPESTATUS
1
micronekodesu ★★★
()
Ответ на: комментарий от teod0r

Да нет, я не об этом. Сунуть exit status в переменную можно и без пайпа. А грепать вывод через echo $rc можно и следующей командой. Или так не устраивает?

Niroday
()
Ответ на: комментарий от Niroday

так мне грепать не переменную надо, а первую команду

teod0r ★★★★★
() автор топика
Ответ на: комментарий от shell-script

Блин. А я фигню сморозил. Баш такого не умеет же, тут логика другая.

shell-script ★★★★★
()

{ command; rc=$?; } | grep -v что-то
Как быть?

Не исключено, что переписать то, что там на самом деле, иначе.

Но если лень, то:

if command > >(grep -v что-то); then
   делаем что-то
fi
Zmicier ★★★★★
()
Ответ на: комментарий от teod0r

${PIPESTATUS[0]} — то что надо

Для наваристой каши — самое оно, да.

Zmicier ★★★★★
()

Вариант

{ command || kill $$ ; } | grep
делаем что-то
DonkeyHot ★★★★★
()
Ответ на: комментарий от teod0r

${PIPESTATUS[0]} — то что надо

Только учти, что оно будет работать только в bash.
Мне в свое время для подобной задачи хватило set -o pipefail

Kroz ★★★★★
()
2 мая 2018 г.
Ответ на: комментарий от Zmicier

если в начале скрипта есть

[[ "$FLOCKER" != "$0" ]] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@" || :

, то команда > >(команда2) не работает, ругается:
syntax error near unexpected token `>'

ЧЯДНТ? неправильно делаю flock? данный код я взял из man flock.
как правильно?

teod0r ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.