LINUX.ORG.RU

Сохранения вывода команды в переменную и проверка успешности выполнения

 ,


1

2

И снова вопрос по bash'у

Пытаюсь сохранить в переменной вывод команды. Удалось сделать так:

CommandLog=`eval "(cd ./test && tar -cvf testtar.tar * $ArchiveExclude)" 2>&1 | tee`
Однако, даже если при использовании tar произошла ошибка, то $? всёравно выдаёт ноль, ибо tee исполнилась нормально.

Как можно узнать успешность выполнения tar, сохранив при этом вывод в переменную?

★★★★★

Хватит насиловать труп баша

tee это наследие Тёмных Времён, в святом zsh можно запросто делать вещи наподобие этого

myscript.sh >&1 > log.txt 2>&1

zolden ★★★★★
()
Ответ на: комментарий от Plcmn

Разве нельзя использовать что-нибудь вроде i=$(cd ./test && tar -cvf testtar.tar)?

В случае ошибки в tar так же возвращается ноль.

najlus ★★★★★
() автор топика
Ответ на: комментарий от anonymous

man bash там есть про коды возврата для всех участников пайпа

Можно поподробнее - что-то не могу там такого найти.

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

Проверить файл статуса, предварительно вызвав скрипт в котором стоит вызов tar у которого в случае успешности следом стоит вывод статуса выполнения операции tar-а в файл, который указан при вызове этого скрипта...

Возможно, проще написать скрипт на python, используя argparse для командного интерфейса...

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

Разве нельзя использовать что-нибудь вроде i=$(cd ./test && tar -cvf testtar.tar)?

В случае ошибки в tar так же возвращается ноль.

Для предложенной альтернативы это не так. Вернётся именно то, что вернул tar.

$ var=$(true)
$ echo $?
0
$ var=$(false)
$ echo $?
1

И вот почему:

If there is no command name, but the command contained a command substitution, the command shall complete with the exit status of the last command substitution performed. Otherwise, the command shall complete with a zero exit status.

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

в святом zsh можно запросто делать вещи наподобие этого

myscript.sh >&1 > log.txt 2>&1

Зачем перенаправлять stdout в самого себя? Это чем-то отличается от?

myscript.sh >log.txt 2>&1
unterwulf
()
Ответ на: комментарий от zolden

Спасибо за науку. Ещё один гвоздь в гроб юникс-вея ;-)

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

день дурака был вчера, выдыхай. все эти фишки zsh дохнут от простого употребления #! /bin/sh в скриптах. не стоит годный интерактивный шелл использовать как каждой бочке затычку

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

Отступи старик - это не твоя война.
Этот падаван принадлежит мне

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