gelraen 15.10.2012 16:31 work-laptop

Посоны, надо распарсить одну строчку в пачку переменных. Делаю вот так:
cmd | read var1 var2 var3
Ожидаемо, получаю фейл, потому что на pipeline оно spawn'ит отдельный subshell, который не может менять переменные в родительском процессе. Как кошернее всего это обходить?
cmd | while read var1 var2 var3; do
do_something_with_vars
done
?
Или как-то ещё можно?

linux, gay, sh, ?
1. Ky6uk 15.10.2012 16:32 desu

xargs

2. 0xd34df00d 15.10.2012 16:32 Azoth_primary

Башеебы и фанаты юниксвея снова поели говна.

3. 0xd34df00dKy6uk /1 15.10.2012 16:32 Azoth_primary

xargs — комбайн
!

4. Ky6uk0xd34df00d /3 15.10.2012 16:32 desu

sosi

5. gelraenKy6uk /1 15.10.2012 16:32 work-laptop

что xrags? мне переменные надо

6. Ky6ukgelraen /5 15.10.2012 16:33 desu

xargs — утилита для формирования списка аргументов и выполнение команды в UNIX-подобных операционных системах. Команда xargs объединяет зафиксированный набор заданных в командной строке начальных аргументов с аргументами, прочитанными со стандартного ввода, и выполняет указанную команду один или несколько раз.

7. gelraenKy6uk /6 15.10.2012 16:33 work-laptop

ты вообще вопрос читал?

8. Ky6ukgelraen /7 15.10.2012 16:33 desu

нет

9. gelraenKy6uk /8 15.10.2012 16:33 work-laptop

тогда съеби нахуй

10. Ky6ukgelraen /9 15.10.2012 16:34 desu

сам съеби

11. 0xd34df00dKy6uk /10 15.10.2012 16:34 Azoth_primary

Давай посъебемся? ;]

12. gelraen0xd34df00d /11 15.10.2012 16:35 work-laptop

да, давайте, съёбывайтесь, один уже в BL съебался, тебя туда же?

13. gelraengelraen /12 15.10.2012 16:36 work-laptop

нет, @Ky6uk, не butthurt, а неприязнь к генераторам шума

14. 0xd34df00dgelraen /12 15.10.2012 16:36 Azoth_primary

Чо ты злой такой :(

15. gelraen0xd34df00d /14 15.10.2012 16:36 work-laptop

/13

16. 0xd34df00dgelraen /15 15.10.2012 16:36 Azoth_primary

Ну и хуй с тобой, пойду код ебашить.

17. gelraen0xd34df00d /16 15.10.2012 16:36 work-laptop

иди

18. gelraen0xd34df00d /16 15.10.2012 16:36 work-laptop

а хуй таки со мной, да

19. arts 15.10.2012 16:37

awk, не?

20. gelraenarts /19 15.10.2012 16:38 work-laptop

а что awk? мне хотелось бы на выходе получить переменные, awk же на переменные parent process точно также никак повлиять не может

21. gelraen 15.10.2012 16:39 work-laptop

хм, можно таки обойтись и без этого, сразу сформировав нужное и записав в переменную, но решение для общего случая все равно интересует

22. 238328 15.10.2012 16:46

http://www.commandlinefu.com/commands/vi... погуглил, везде как в /0, пердоликам не надо удобных средств же!

23. mva 15.10.2012 16:48 N900

mva@note ~ % echo 1 2 3 | read a b c
mva@note ~ % echo A: ${a} B: ${b} C: ${c}
A: 1 B: 2 C: 3
mva@note ~ % echo $0
/bin/zsh

24. ojab 15.10.2012 16:49 YGG!

хуёвая какая-то постановка задачи. В файле 3 переменных, разделённых пробелом, и нужно выполнить команду с каждой их переменных в качестве аргумента?

25. 238328ojab /24 15.10.2012 16:52 39975689031350310691605538

карочи аффтар ниасили перл, КГ/АМ!!1!

26. gelraenojab /24 15.10.2012 16:56 work-laptop

не в файле, а в выхлопе команды. Потом эти переменные нужно использовать для построения аргументов для других комманд. В данном случае мне надо было только две из них и они используются только один раз, потому таки при помощи awk сразу сформировал нужный аргумент.

27. gelraenmva /23 15.10.2012 16:57 work-laptop

вопрос был о sh, если ты вдруг теги проглядел. Так-то проще сразу какой-нибудь ruby или python взять, чем zsh.

28. mvagelraen /27 15.10.2012 16:58 N900

ну, так-то, дело твоё. Вот только давно ли у тебя sh — не симлинк на другой шелл?

29. 238328gelraen /27 15.10.2012 16:59 39975689031350310691605538

лучше питон, у него есть

30. 238328mva /28 15.10.2012 16:59 39975689031350310691605538

другой != любой

31. gelraenmva /28 15.10.2012 16:59 work-laptop

вот лично у меня на моём личном ноуте — уже почти 5 лет

32. mva238328 /30 15.10.2012 17:00 N900

== почти везде

33. mvagelraen /31 15.10.2012 17:00 N900

что-то ты страсти какие-то рассказываешь

34. mvamva /33 15.10.2012 17:01 N900

и да:
mva@note ~ % sh
$ echo 1 2 3 | read a b c
$ echo A: ${a} B: ${b} C: ${c}
A: 1 B: 2 C: 3
$ echo $0
sh

35. gelraenmva /33 15.10.2012 17:01 work-laptop

какие страсти? у меня freebsd на нём стоит почти с самого момента покупки

36. mvagelraen /35 15.10.2012 17:01 N900

в freebsd /bin/sh → tcsh

37. gelraenmva /36 15.10.2012 17:03 work-laptop

ты freebsd никогда не видел что-ли?
# l /bin/*sh
-r-xr-xr-x 2 root wheel 336764 15 май 17:36 /bin/csh
-r-xr-xr-x 1 root wheel 116652 15 май 17:36 /bin/sh
-r-xr-xr-x 2 root wheel 336764 15 май 17:36 /bin/tcsh

38. mvagelraen /37 15.10.2012 17:03 N900

а теперь стрейсом посмотри, какие файлы sh грузит из хомяка и узри что это tcsh ;)

39. ojabmva /23 15.10.2012 17:06 YGG!

ппц ты лолка
bash-4.2$ X=($(echo "1 2 3"))
bash-4.2$ echo ${X[0]}
1
bash-4.2$ echo ${X[1]}
2
bash-4.2$ echo ${X[2]}
3

40. ojabojab /39 15.10.2012 17:06 YGG!

а на sh да, хуй проссыш

41. mvaojab /39 15.10.2012 17:06 N900

это башемагия, которая работает только в баше, так что нахуй

42. ojabmva /23 15.10.2012 17:06 YGG!

zsh уже совместим с posix sh, кстати?

43. mvaojab /42 15.10.2012 17:07 N900

>> уже
?

44. ojabmva /41 15.10.2012 17:07 YGG!

ничем не лучше zsh-магии

45. ojabmva /43 15.10.2012 17:07 YGG!

последний раз, когда я смотрел (года 4 назад) zsh не мог в posix sh

46. mvaojab /45 15.10.2012 17:07 N900

в чём именно это заключалось?

47. ojabmva /46 15.10.2012 17:08 YGG!

я не помню, ололо. Увидел → нагуглил → дропнул → забыл.

48. gelraenmva /38 15.10.2012 17:09 work-laptop

не вижу там никаких упоминаний tcsh. Отуда ты вообще эту ересь себе придумал?

49. ojabgelraen /48 15.10.2012 17:11 YGG!

под рутом работает пацан, судя по википедии
>The tcsh is the default root shell of FreeBSD (the default user shell is POSIX-based)

50. ojabmva /38 15.10.2012 17:12 YGG!

рекомендую учиться работать не под рутом. Сначала непривычно, но потом ок будет.

Do you really want to delete ?