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
?
Или как-то ещё можно?
xargs
Башеебы и фанаты юниксвея снова поели говна.
xargs — комбайн
!
sosi
что xrags? мне переменные надо
xargs — утилита для формирования списка аргументов и выполнение команды в UNIX-подобных операционных системах. Команда xargs объединяет зафиксированный набор заданных в командной строке начальных аргументов с аргументами, прочитанными со стандартного ввода, и выполняет указанную команду один или несколько раз.
ты вообще вопрос читал?
нет
тогда съеби нахуй
сам съеби
Давай посъебемся? ;]
да, давайте, съёбывайтесь, один уже в BL съебался, тебя туда же?
нет, @Ky6uk, не butthurt, а неприязнь к генераторам шума
Чо ты злой такой :(
/13
Ну и хуй с тобой, пойду код ебашить.
иди
а хуй таки со мной, да
awk, не?
а что awk? мне хотелось бы на выходе получить переменные, awk же на переменные parent process точно также никак повлиять не может
хм, можно таки обойтись и без этого, сразу сформировав нужное и записав в переменную, но решение для общего случая все равно интересует
http://www.commandlinefu.com/commands/vi... погуглил, везде как в /0, пердоликам не надо удобных средств же!
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
хуёвая какая-то постановка задачи. В файле 3 переменных, разделённых пробелом, и нужно выполнить команду с каждой их переменных в качестве аргумента?
карочи аффтар ниасили перл, КГ/АМ!!1!
не в файле, а в выхлопе команды. Потом эти переменные нужно использовать для построения аргументов для других комманд. В данном случае мне надо было только две из них и они используются только один раз, потому таки при помощи awk сразу сформировал нужный аргумент.
вопрос был о sh, если ты вдруг теги проглядел. Так-то проще сразу какой-нибудь ruby или python взять, чем zsh.
ну, так-то, дело твоё. Вот только давно ли у тебя sh — не симлинк на другой шелл?
лучше питон, у него есть
другой != любой
вот лично у меня на моём личном ноуте — уже почти 5 лет
== почти везде
что-то ты страсти какие-то рассказываешь
и да:
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
какие страсти? у меня freebsd на нём стоит почти с самого момента покупки
в freebsd /bin/sh → tcsh
ты 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
а теперь стрейсом посмотри, какие файлы sh грузит из хомяка и узри что это tcsh ;)
ппц ты лолка
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
а на sh да, хуй проссыш
это башемагия, которая работает только в баше, так что нахуй
zsh уже совместим с posix sh, кстати?
>> уже
?
ничем не лучше zsh-магии
последний раз, когда я смотрел (года 4 назад) zsh не мог в posix sh
в чём именно это заключалось?
я не помню, ололо. Увидел → нагуглил → дропнул → забыл.
не вижу там никаких упоминаний tcsh. Отуда ты вообще эту ересь себе придумал?
под рутом работает пацан, судя по википедии
>The tcsh is the default root shell of FreeBSD (the default user shell is POSIX-based)
рекомендую учиться работать не под рутом. Сначала непривычно, но потом ок будет.