LINUX.ORG.RU

[bash] stderr в переменную

 


0

0

Есть утилита time (не путать с bash-евской командой time), которая запускает переданную ей команду, а потом валит данные (время выполнения, например) по выполнению этой команды в stderr:

~$ /usr/bin/time -f %e sleep 5
5.00

Как можно сохранить эти данные со стандартного потока ошибок в переменную?

#!/bin/bash
cmd=adsfololo
err=$($cmd 2>&1)
echo $err
edigaryev ★★★★★
()

Как можно сохранить эти данные со стандартного потока ошибок в переменную?

В простейшем случае, если вывод идёт только на stderr:

var=$( command 2>&1 )
Если программа выводит дынные и на stdout, и на stderr, а в переменную тебе нужно сохранить только stderr:
var=$( command 2>&1 >/dev/null )
Обрати внимание: если перепутать местами два перенаправления («2>&1» и «>/dev/null»), то вообще весь вывод уйдёт в /dev/null.

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

Просто костыль, да еще и зело ненадежный. Представь, например, что во время выполнения /usr/bin/time -f %e sleep 5 2> /tmp/file (или после внесения данных в файл, но до их использования) у тебя запустится вторая копия скрипта. Что будет в переменной? Правильно, херня.

Нужно как минимум рандомизировать имя файла\привязываться к времени.. но зачем городить _такой_ костыль?

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

Нужно как минимум рандомизировать имя файла\привязываться к времени

Ну ты блин даешь! Это же всего лишь пример. /tmp/file.$$ так тебе полегчало?

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

И еще, может я не хочу stdout в /dev/null кидать, а хочу видеть его на экране?

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