как вывод с stdout и stderr некой команды записать в переменные?что-то одно без проблем:
so=$(date)
se=$(date 2>&1)
но как и stdout и stderr?
> как вывод с stdout и stderr некой команды записать в переменные?
> что-то одно без проблем:
> so=$(date)
> se=$(date 2>&1)
> но как и stdout и stderr?запиши в файлы, загрузи файлы в переменные
> запиши в файлы, загрузи файлы в переменныекрасоты нет :)
> se=$(date 2>&1)Вот так. Ты перенаправил 2>&1, при этом 1 остался. Получаешь обоих в $se.
>> se=$(date 2>&1)
> Вот так. Ты перенаправил 2>&1, при этом 1 остался. Получаешь обоих в
> $se.ну да, но это не вопрос же:
se=`(date >/dev/null) 2>&1`
>>> se=$(date 2>&1)
>> Вот так. Ты перенаправил 2>&1, при этом 1 остался. Получаешь обоих в
>> $se.
> ну да, но это не вопрос же:
> se=`(date >/dev/null) 2>&1`( и ) лишние.
А про красоту... Вот такой "заход" не работает:
481 tst() { echo 'out'; echo 'RRR' >&2; }
482 tst
483 read a < <( { read b < <( tst ) ; } 2>&1 ); echo "$a+$b"
484 a=3; b=4; read a < <( { read b < <( tst ) ; } 2>&1 ); echo "$a+$b"
485 a=3; b=4; read a < <( { { read b; echo "bb:$b" } < <( tst ) ; } 2>&1 ); echo "$a+$b"
486 a=3; b=4; read a < <( { { read b; echo "bb:$b"; } < <( tst ) ; } 2>&1 ); echo "$a+$b"
487 a=3; b=4; read a < <( { { read b; echo "bb:$b"; } < <( tst ) ; } >&3 2>&1 3>&2 ); echo "$a+$b"
488 a=3; b=4; read a < <( { { read b; echo "bb:$b" >&3; } < <( tst ) ; } 2>&1 3>&2 ); echo "$a+$b"
489 a=3; b=4; read a < <( { { read b; echo "bb:$b" >&2; } < <( tst ) ; } 2>&1 3>&2 ); echo "$a+$b"
490 export b; a=3; b=4; read a < <( { { read b; echo "bb:$b" >&2; } < <( tst ) ; } 2>&1 3>&2 ); echo "$a+$b"
491 export b; a=3; b=4; read a < <( { read b;} < <( tst ) ; } 2>&1 3>&2 ); echo "$a+$b"
492 export b; a=3; b=4; read a < <( { read b; } < <( tst ) ; } 2>&1 3>&2 ); echo "$a+$b"
493 export b; a=3; b=4; read a < <( { read b; } < <( tst ) 2>&1 ); echo "$a+$b"
494 export b; a=3; b=4; read a < <( { read b; export b; } < <( tst ) 2>&1 ); echo "$a+$b"
495 export b; a=3; b=4; read a < <( { read b; export b; } < <( tst ) 2>&1; ); echo "$a+$b"
496 export b; a=3; b=4; { read a < <( { read b; export b; } < <( tst ) 2>&1; ) } ; echo "$a+$b"
497 export b; a=3; b=4; { read a < <( { read b; export b; } < <( tst ) 2>&1; ) }; echo "$a+$b"
498 export b; a=3; b=4; { read a < <( read b < <( tst ) 2>&1; ) }; echo "$a+$b"
499 export b; a=3; b=4; { read a < <( read b < <( tst ) 2>&1; ); }; echo "$a+$b"С mkfifo у меня тоже не вышло.
По факту нужно _2 одновременных read-а в _одном контексте-шеле -- чтоб обе переменные получили видимые в одном месте значения... У меня за две-три минуты не вышло.
>>>> se=$(date 2>&1)
>>> Вот так. Ты перенаправил 2>&1, при этом 1 остался. Получаешь обоих в
>>> $se.
>> ну да, но это не вопрос же:
>> se=`(date >/dev/null) 2>&1`
> ( и ) лишние.не лишнее, пример 1:
====================
#!/bin/sh
se=`date gdfg >/dev/null 2>&1`
echo $se# sh -x ./bin/test.sh
+ date gdfg
+ se=''
+ echo
====================пример 2:
====================
#!/bin/sh
se=`(date gdfg >/dev/null) 2>&1`
echo $se# sh -x ./bin/test.sh
+ se='+ date gdfg
date: illegal time format
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format]'
+ echo + date gdfg date: illegal time format usage: date '[-jnu]' '[-d' dst] '[-r' seconds] '[-t' west] '[-v[+|-]val[ymwdHMS]]' ... '[-f' fmt date '|' '[[[[[cc]yy]mm]dd]HH]MM[.ss]]' '[+format]'
+ date gdfg date: illegal time format usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format]
====================
>[оверквотинг удален]
> 498 export b; a=3; b=4; { read a <
> <( read b < <( tst ) 2>&1; ) }; echo
> "$a+$b"
> 499 export b; a=3; b=4; { read a <
> <( read b < <( tst ) 2>&1; ); }; echo
> "$a+$b"
> С mkfifo у меня тоже не вышло.
> По факту нужно _2 одновременных read-а в _одном контексте-шеле -- чтоб обе
> переменные получили видимые в одном месте значения... У меня за две-три
> минуты не вышло.долго вчера игрался, так ничего и не получилось, нарисовал функцию с tmp файлом:
q1=''
q2=''
comexec(){
err=`mktemp /tmp/XXXXXXX`
if [ $? -ne 0 ]; then
echo "not create tmp file"
exit;
fi
exec 3>&2
exec 2>$err
q1=`eval "$1"`
exec 2>&3 3>&-
q2=`cat $err`
if [ $? -ne 0 ]; then
echo "not read tmp file"
exit;
fi
rm $err
}
>>> se=`(date >/dev/null) 2>&1`
>> ( и ) лишние.
> не лишнее, пример 1:И точно. Хардкорный садо-мазо ABS :/
Вот так "без скобок" (=без субщела) у меня (и Advanced Bash-Scripting Guide-а, да) получилось:
$ se="`date 3>&1 2>&1 >/dev/null `"; echo +$se+
$ se="`date ddd 3>&1 2>&1 >/dev/null `"; echo +$se+Но проблемы двух риидов в одном контексте это не решает, да.
>>>> se=`(date >/dev/null) 2>&1`
>>> ( и ) лишние.
>> не лишнее, пример 1:
> И точно. Хардкорный садо-мазо ABS :/
> Вот так "без скобок" (=без субщела) у меня (и Advanced Bash-Scripting Guide-а,
> да) получилось:
> $ se="`date 3>&1 2>&1 >/dev/null `"; echo +$se+
> $ se="`date ddd 3>&1 2>&1 >/dev/null `"; echo +$se+
> Но проблемы двух риидов в одном контексте это не решает, да.Медитировал-медитировал, но так и не вымедитировал зачем кавычки нужны (se="..."). При test-е (if [ "se" == "" ]), если предыдущее выражение вернет пустой результат, все равно же se в скобки брать придется? Чего я в этом мире не знаю?
>>>> ( и ) лишние.:>
>> $ se="`date ddd 3>&1 2>&1 >/dev/null `"; echo +$se+
>> Но проблемы двух риидов в одном контексте это не решает, да.
> Медитировал-медитировал, но так и не вымедитировал зачем кавычки нужны (se="...")Ага, сам такой, именно. Я не _знаю последовательности экспаншенов и подстановок, поэтому пишу лишние кавычки. Недостаток образования <В)))
>>> $ se="`date ddd 3>&1 2>&1 >/dev/null `"; echo +$se+
>>> Но проблемы двух риидов в одном контексте это не решает, да.
>> Медитировал-медитировал, но так и не вымедитировал зачем кавычки нужны (se="...")
> Ага, сам такой, именно. Я не _знаю последовательности экспаншенов и подстановок, поэтому
> пишу лишние кавычки. Недостаток образования <В)))А... перестраховка всегда хорошо, да :)
> как вывод с stdout и stderr некой команды записать в переменные?Чёй-то я не фкурю...
Надо разделить выходной поток из команды на два и
каждый записать в свою переменную, за одну команду?
>> как вывод с stdout и stderr некой команды записать в переменные?
> Чёй-то я не фкурю...
> Надо разделить выходной поток из команды на два и
> каждый записать в свою переменную, за одну команду?хотелось бы. в разные файлы же одновременно можно.
>>> как вывод с stdout и stderr некой команды записать в переменные?
>> Чёй-то я не фкурю...
>> Надо разделить выходной поток из команды на два и
>> каждый записать в свою переменную, за одну команду?
> хотелось бы. в разные файлы же одновременно можно.В две переменные - нельзя!
В два файла - нельзя!
В переменную и файл - нельзя!
В переменную и на консоль - можно!{ se=$(date ddd 2>&1 1>&3-) ;} 3>&1;
echo $se;
> В два файла - нельзя!some_sript.sh > /tmp/stdout_file 2>/tmp/stderr_file
> В два файла - нельзя!date >/1.log 2>/2.log
> В переменную и файл - нельзя!
se=$(date 2>/2.log)
>> В два файла - нельзя!
> date >/1.log 2>/2.log
>> В переменную и файл - нельзя!
> se=$(date 2>/2.log)Ну хрен знает, в две переменные точно низя.
> Ну хрен знает, в две переменные точно низя.:) fail за'shit'ан
>> Ну хрен знает, в две переменные точно низя.
> :) fail за'shit'анНе всё так просто :)
>>>> как вывод с stdout и stderr некой команды записать в переменные?
>>> Чёй-то я не фкурю...
>>> Надо разделить выходной поток из команды на два и
>>> каждый записать в свою переменную, за одну команду?
>> хотелось бы. в разные файлы же одновременно можно.
> В две переменные - нельзя!
> В два файла - нельзя!можно:
#!/bin/bash
cmd='date'
res=`$cmd 1>succ 2>fail`> В переменную и файл - нельзя!
?? не ожидал от Вас. из приведенного выше примера - ясно, что можно:
res=`$cmd 1>succ`
или
res=`$cmd 2>fail`> В переменную и на консоль - можно!
> { se=$(date ddd 2>&1 1>&3-) ;} 3>&1;
> echo $se;PS
непонятно чем Вы руководствовались, когда перенаправление вывода на консоль, отделили от той же операции с файлами.
> непонятно чем Вы руководствовались, когда перенаправление вывода на консоль, отделили
> от той же операции с файлами.Тема начиналась про две переменные, запутали меня вы тут...
>> непонятно чем Вы руководствовались, когда перенаправление вывода на консоль, отделили
>> от той же операции с файлами.
> Тема начиналась про две переменные, запутали меня вы тут...это мы могём. всегда видно, когда подустал человек. и тут мы его на взлете - бах!!! блин.. че это я.... ))))
PS
кстати задачка по определению периода в длинном числе только на шеле вроде от Вас была? очень понравилась.
res=`$cmd 1>succ`и что будет в переменной? :)
> res=`$cmd 1>succ`
> и что будет в переменной? :)ничего. в файл весь стандартный вывод попрет. )
>> res=`$cmd 1>succ`
>> и что будет в переменной? :)
> ничего. в файл весь стандартный вывод попрет. ) зато вывод ошибок попрет на консоль - уже разделение. именно это и хотел показать. просто ненужную в данном случае переменную забыл убрать - каюсь ).
>>> res=`$cmd 1>succ`
>>> и что будет в переменной? :)
>> ничего. в файл весь стандартный вывод попрет. ) зато вывод ошибок попрет на консоль - уже разделение. именно это и хотел показать. просто ненужную в данном случае переменную забыл убрать - каюсь ).падла ... падла ... падлавил (С)
> PS
> кстати задачка по определению периода в длинном числе только на шеле вроде
> от Вас была? очень понравилась.Чё, решил?
>> PS
>> кстати задачка по определению периода в длинном числе только на шеле вроде
>> от Вас была? очень понравилась.
> Чё, решил?Не. Ссылку как на зло потерял (там же задача в продолжении какой-то темы была - найти сейчас сложно). Когда читал - с дня рождения возвращался - решил на завтра отложить. Сейчас точные условия задачи не вспомню. Линканешь? Мне правда интересно.
>>> PS
>>> кстати задачка по определению периода в длинном числе только на шеле вроде
>>> от Вас была? очень понравилась.
>> Чё, решил?
> Не. Ссылку как на зло потерял (там же задача в продолжении какой-то
> темы была - найти сейчас сложно). Когда читал - с дня
> рождения возвращался - решил на завтра отложить. Сейчас точные условия задачи
> не вспомню. Линканешь? Мне правда интересно.сиё? http://www.opennet.me/openforum/vsluhforumID9/9467.html
Павлуша тут отжег как надо, да.
>>>> PS
>>>> кстати задачка по определению периода в длинном числе только на шеле вроде
>>>> от Вас была? очень понравилась.
>>> Чё, решил?
>> Не. Ссылку как на зло потерял (там же задача в продолжении какой-то
>> темы была - найти сейчас сложно). Когда читал - с дня
>> рождения возвращался - решил на завтра отложить. Сейчас точные условия задачи
>> не вспомню. Линканешь? Мне правда интересно.
> сиё? http://www.opennet.me/openforum/vsluhforumID9/9467.html
> Павлуша тут отжег как надо, да.Оно! Спасибо.
парни, вы меня пугаете своими странными фетишами!
> парни, вы меня пугаете своими странными фетишами!при чем тут фетишизм? ) я хотел просто мозги в кучу собрать.
2Аноним (еще раз спасибо за ссылку) - ИМХО задача не решаема чисто по мат определению исходных условий.
PS
а так найти:
- период десятичной дроби чисто на bash не проблема.
- к решению второго пункта задачи при реальных реальных условиях я бы подошел с того, что степени 10 в знаменатель ставил для начала (для простоты). деление на bash столбиком уже показали - останется только реализация вычисления интегралов в общем случае)
> 2Аноним (еще раз спасибо за ссылку) - ИМХО задача не решаема чисто
> по мат определению исходных условий.Нет. Решаема. //Я б рассказал как, но :D поля этого трактата...
(И делимое-делитель я б ограничил _базовым целым bash-а. Дописывать _на _bash-e gmplib для решения более общей задачи было бы... Хотя... :)Павлины среди нас.)
>> 2Аноним (еще раз спасибо за ссылку) - ИМХО задача не решаема чисто
>> по мат определению исходных условий.
> Нет. Решаема. //Я б рассказал как, но :D поля этого трактата...if поля
then
трактаРа
else
echo 'error'
endif> (И делимое-делитель я б ограничил _базовым целым bash-а. Дописывать _на _bash-e gmplib
> для решения более общей задачи было бы... Хотя... :)Павлины среди
> нас.)Сколково по тебе плачет).
> парни, вы меня пугаете своими странными фетишами!Ну причем тут фитишизм, просто ведь интересное решение задачи, разве нет?
LSTemp, пожалуйста :)
>> парни, вы меня пугаете своими странными фетишами!
> Ну причем тут фитишизм, просто ведь интересное решение задачи, разве нет?
> LSTemp, пожалуйста :)ну дальше там уж давайте - в источнике:
http://www.opennet.me/openforum/vsluhforumID9/9467.html#16
> как вывод с stdout и stderr некой команды записать в переменные?
> что-то одно без проблем:
> so=$(date)
> se=$(date 2>&1)
> но как и stdout и stderr?для bash так кпримерно проще будет:
temp=`command 2>&1`
[ $? -eq 0 ] && echo "result: $temp" || echo "error: $temp"анализируем код возврата предыдущей комады и решаем - ошибка или нет. после этого выполняем соотвействующие действия.
> анализируем код возврата предыдущей комады и решаем - ошибка или нет.
int main(void) {write(1, "ERROR\n", 6);
write(2, "FINE\n", 5);return 0;
}:)
>> анализируем код возврата предыдущей комады и решаем - ошибка или нет.
>
> int main(void) {
> write(1, "ERROR\n", 6);
> write(2, "FINE\n", 5);
> return 0;
> }
>
> :))