- sh, stdout stderr, Pahanivo, 19:35 , 19-Июн-12 (1)
> как вывод с stdout и stderr некой команды записать в переменные? > что-то одно без проблем: > so=$(date) > se=$(date 2>&1) > но как и stdout и stderr?запиши в файлы, загрузи файлы в переменные
- sh, stdout stderr, Аноним, 02:34 , 20-Июн-12 (4)
> запиши в файлы, загрузи файлы в переменные красоты нет :)
- sh, stdout stderr, ACCA, 20:35 , 19-Июн-12 (2)
> se=$(date 2>&1) Вот так. Ты перенаправил 2>&1, при этом 1 остался. Получаешь обоих в $se.
- sh, stdout stderr, Аноним, 02:31 , 20-Июн-12 (3)
>> se=$(date 2>&1) > Вот так. Ты перенаправил 2>&1, при этом 1 остался. Получаешь обоих в > $se.ну да, но это не вопрос же: se=`(date >/dev/null) 2>&1`
- sh, stdout stderr, Andrey Mitrofanov, 09:35 , 20-Июн-12 (5)
>>> 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-а в _одном контексте-шеле -- чтоб обе переменные получили видимые в одном месте значения... У меня за две-три минуты не вышло.
- sh, stdout stderr, Аноним, 10:42 , 20-Июн-12 (6)
>>>> 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 }
- sh, stdout stderr, Andrey Mitrofanov, 13:31 , 21-Июн-12 (7)
>>> 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+ Но проблемы двух риидов в одном контексте это не решает, да.
- sh, stdout stderr, Аноним, 20:05 , 21-Июн-12 (8)
>>>> 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 в скобки брать придется? Чего я в этом мире не знаю?
- sh, stdout stderr, Andrey Mitrofanov, 16:03 , 22-Июн-12 (10)
>>>> ( и ) лишние.:> >> $ se="`date ddd 3>&1 2>&1 >/dev/null `"; echo +$se+ >> Но проблемы двух риидов в одном контексте это не решает, да. > Медитировал-медитировал, но так и не вымедитировал зачем кавычки нужны (se="...") Ага, сам такой, именно. Я не _знаю последовательности экспаншенов и подстановок, поэтому пишу лишние кавычки. Недостаток образования <В)))
- sh, stdout stderr, Аноним, 19:02 , 22-Июн-12 (12)
>>> $ se="`date ddd 3>&1 2>&1 >/dev/null `"; echo +$se+ >>> Но проблемы двух риидов в одном контексте это не решает, да. >> Медитировал-медитировал, но так и не вымедитировал зачем кавычки нужны (se="...") > Ага, сам такой, именно. Я не _знаю последовательности экспаншенов и подстановок, поэтому > пишу лишние кавычки. Недостаток образования <В))) А... перестраховка всегда хорошо, да :)
- sh, stdout stderr, pavlinux, 06:23 , 22-Июн-12 (9)
> как вывод с stdout и stderr некой команды записать в переменные?Чёй-то я не фкурю... Надо разделить выходной поток из команды на два и каждый записать в свою переменную, за одну команду?
- sh, stdout stderr, Аноним, 19:01 , 22-Июн-12 (11)
>> как вывод с stdout и stderr некой команды записать в переменные? > Чёй-то я не фкурю... > Надо разделить выходной поток из команды на два и > каждый записать в свою переменную, за одну команду?хотелось бы. в разные файлы же одновременно можно.
- sh, stdout stderr, pavlinux, 07:03 , 24-Июн-12 (13)
>>> как вывод с stdout и stderr некой команды записать в переменные? >> Чёй-то я не фкурю... >> Надо разделить выходной поток из команды на два и >> каждый записать в свою переменную, за одну команду? > хотелось бы. в разные файлы же одновременно можно.В две переменные - нельзя! В два файла - нельзя! В переменную и файл - нельзя! В переменную и на консоль - можно! { se=$(date ddd 2>&1 1>&3-) ;} 3>&1; echo $se;
- sh, stdout stderr, Pahanivo, 11:38 , 24-Июн-12 (14)
> В два файла - нельзя!some_sript.sh > /tmp/stdout_file 2>/tmp/stderr_file - sh, stdout stderr, Аноним, 12:02 , 24-Июн-12 (15)
> В два файла - нельзя!date >/1.log 2>/2.log > В переменную и файл - нельзя! se=$(date 2>/2.log)
- sh, stdout stderr, pavlinux, 16:47 , 24-Июн-12 (16)
>> В два файла - нельзя! > date >/1.log 2>/2.log >> В переменную и файл - нельзя! > se=$(date 2>/2.log) Ну хрен знает, в две переменные точно низя.
- sh, stdout stderr, Pahanivo, 21:39 , 24-Июн-12 (17)
> Ну хрен знает, в две переменные точно низя.:) fail за'shit'ан
- sh, stdout stderr, pavlinux, 03:03 , 25-Июн-12 (18)
>> Ну хрен знает, в две переменные точно низя. > :) fail за'shit'ан Не всё так просто :)
- sh, stdout stderr, LSTemp, 01:28 , 26-Июн-12 (20)
>>>> как вывод с 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 непонятно чем Вы руководствовались, когда перенаправление вывода на консоль, отделили от той же операции с файлами.
- sh, stdout stderr, pavlinux, 01:47 , 26-Июн-12 (21)
> непонятно чем Вы руководствовались, когда перенаправление вывода на консоль, отделили > от той же операции с файлами.Тема начиналась про две переменные, запутали меня вы тут...
- sh, stdout stderr, LSTemp, 02:51 , 26-Июн-12 (24)
>> непонятно чем Вы руководствовались, когда перенаправление вывода на консоль, отделили >> от той же операции с файлами. > Тема начиналась про две переменные, запутали меня вы тут...это мы могём. всегда видно, когда подустал человек. и тут мы его на взлете - бах!!! блин.. че это я.... )))) PS кстати задачка по определению периода в длинном числе только на шеле вроде от Вас была? очень понравилась.
- sh, stdout stderr, Pahanivo, 06:37 , 26-Июн-12 (25)
res=`$cmd 1>succ`и что будет в переменной? :)
- sh, stdout stderr, LSTemp, 01:14 , 28-Июн-12 (27)
> res=`$cmd 1>succ` > и что будет в переменной? :) ничего. в файл весь стандартный вывод попрет. )
- sh, stdout stderr, LSTemp, 01:25 , 28-Июн-12 (29)
>> res=`$cmd 1>succ` >> и что будет в переменной? :) > ничего. в файл весь стандартный вывод попрет. ) зато вывод ошибок попрет на консоль - уже разделение. именно это и хотел показать. просто ненужную в данном случае переменную забыл убрать - каюсь ).
- sh, stdout stderr, Pahanivo, 23:01 , 29-Июн-12 (32)
>>> res=`$cmd 1>succ` >>> и что будет в переменной? :) >> ничего. в файл весь стандартный вывод попрет. ) зато вывод ошибок попрет на консоль - уже разделение. именно это и хотел показать. просто ненужную в данном случае переменную забыл убрать - каюсь ).падла ... падла ... падлавил (С)
- sh, stdout stderr, pavlinux, 23:13 , 26-Июн-12 (26)
> PS > кстати задачка по определению периода в длинном числе только на шеле вроде > от Вас была? очень понравилась.Чё, решил?
- sh, stdout stderr, LSTemp, 01:20 , 28-Июн-12 (28)
>> PS >> кстати задачка по определению периода в длинном числе только на шеле вроде >> от Вас была? очень понравилась. > Чё, решил?Не. Ссылку как на зло потерял (там же задача в продолжении какой-то темы была - найти сейчас сложно). Когда читал - с дня рождения возвращался - решил на завтра отложить. Сейчас точные условия задачи не вспомню. Линканешь? Мне правда интересно.
- sh, stdout stderr, Аноним, 18:45 , 28-Июн-12 (30)
>>> PS >>> кстати задачка по определению периода в длинном числе только на шеле вроде >>> от Вас была? очень понравилась. >> Чё, решил? > Не. Ссылку как на зло потерял (там же задача в продолжении какой-то > темы была - найти сейчас сложно). Когда читал - с дня > рождения возвращался - решил на завтра отложить. Сейчас точные условия задачи > не вспомню. Линканешь? Мне правда интересно.сиё? https://www.opennet.ru/openforum/vsluhforumID9/9467.html Павлуша тут отжег как надо, да.
- sh, stdout stderr, LSTemp, 21:22 , 29-Июн-12 (31)
>>>> PS >>>> кстати задачка по определению периода в длинном числе только на шеле вроде >>>> от Вас была? очень понравилась. >>> Чё, решил? >> Не. Ссылку как на зло потерял (там же задача в продолжении какой-то >> темы была - найти сейчас сложно). Когда читал - с дня >> рождения возвращался - решил на завтра отложить. Сейчас точные условия задачи >> не вспомню. Линканешь? Мне правда интересно. > сиё? https://www.opennet.ru/openforum/vsluhforumID9/9467.html > Павлуша тут отжег как надо, да.Оно! Спасибо.
- sh, stdout stderr, Pahanivo, 23:02 , 29-Июн-12 (33)
парни, вы меня пугаете своими странными фетишами!
- sh, stdout stderr, LSTemp, 01:09 , 30-Июн-12 (34)
> парни, вы меня пугаете своими странными фетишами!при чем тут фетишизм? ) я хотел просто мозги в кучу собрать. 2Аноним (еще раз спасибо за ссылку) - ИМХО задача не решаема чисто по мат определению исходных условий. PS а так найти: - период десятичной дроби чисто на bash не проблема. - к решению второго пункта задачи при реальных реальных условиях я бы подошел с того, что степени 10 в знаменатель ставил для начала (для простоты). деление на bash столбиком уже показали - останется только реализация вычисления интегралов в общем случае) - sh, stdout stderr, Andrey Mitrofanov, 09:29 , 30-Июн-12 (35)
> 2Аноним (еще раз спасибо за ссылку) - ИМХО задача не решаема чисто > по мат определению исходных условий.Нет. Решаема. //Я б рассказал как, но :D поля этого трактата... (И делимое-делитель я б ограничил _базовым целым bash-а. Дописывать _на _bash-e gmplib для решения более общей задачи было бы... Хотя... :)Павлины среди нас.)
- sh, stdout stderr, LSTemp, 05:18 , 03-Июл-12 (38)
>> 2Аноним (еще раз спасибо за ссылку) - ИМХО задача не решаема чисто >> по мат определению исходных условий. > Нет. Решаема. //Я б рассказал как, но :D поля этого трактата...if поля then трактаРа else echo 'error' endif > (И делимое-делитель я б ограничил _базовым целым bash-а. Дописывать _на _bash-e gmplib > для решения более общей задачи было бы... Хотя... :)Павлины среди > нас.) Сколково по тебе плачет).
- sh, stdout stderr, Аноним, 13:17 , 01-Июл-12 (36)
> парни, вы меня пугаете своими странными фетишами!Ну причем тут фитишизм, просто ведь интересное решение задачи, разве нет? LSTemp, пожалуйста :)
- sh, stdout stderr, LSTemp, 04:43 , 03-Июл-12 (37)
- sh, stdout stderr, LSTemp, 01:02 , 26-Июн-12 (19)
> как вывод с stdout и stderr некой команды записать в переменные? > что-то одно без проблем: > so=$(date) > se=$(date 2>&1) > но как и stdout и stderr?для bash так кпримерно проще будет: temp=`command 2>&1` [ $? -eq 0 ] && echo "result: $temp" || echo "error: $temp" анализируем код возврата предыдущей комады и решаем - ошибка или нет. после этого выполняем соотвействующие действия.
- sh, stdout stderr, pavlinux, 01:50 , 26-Июн-12 (22)
> анализируем код возврата предыдущей комады и решаем - ошибка или нет. int main(void) { write(1, "ERROR\n", 6); write(2, "FINE\n", 5); return 0; }
:)
- sh, stdout stderr, LSTemp, 02:50 , 26-Июн-12 (23)
>> анализируем код возврата предыдущей комады и решаем - ошибка или нет. > > int main(void) { > write(1, "ERROR\n", 6); > write(2, "FINE\n", 5); > return 0; > } > > :) )
|