|
2.4, xguru (?), 19:46, 14/07/2009 [^] [^^] [^^^] [ответить]
| +1 +/– |
>я лучше POSIX[1] почитаю. В этой статье даже не упоминается простой способ
>избавиться от нежелательного вывода/ввода путем *закрытия* дескриптора. Напр,
> $ ls >&- 2>&-
>
>А также, что 'команда >&файл' и 'команда1 |& команда2' являются расширением в tcsh, bash, zsh и отсутствует в ash (almquist shell) и posix shell'е.
>
>[1] http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_1
>&- нормальная вещь, спасибо,
но как по мне, неправильно использовать >&- там, где логичнее использовать > /dev/null
Сравните
ls >&-
и
ls > /dev/null
| |
|
3.6, аноним (?), 19:51, 14/07/2009 [^] [^^] [^^^] [ответить]
| +/– |
Это уже дело вкуса. С одной стороны, зачем писать, если можно не писать? Это аргумент за >&-. Ведь devfs может быть вообще не смонтирован (в chroot/jail например). Кроме того, так короче.
С другой стороны, /dev/null нагляднее и проще понять где /dev/null заменить на не /dev/null.
Я в общем всецело за /dev/null.
| |
|
4.7, xguru (?), 20:01, 14/07/2009 [^] [^^] [^^^] [ответить]
| +/– |
>Это уже дело вкуса. С одной стороны, зачем писать, если можно не писать? Это аргумент за >&-. Ведь devfs может быть вообще не смонтирован (в chroot/jail например). Кроме того, так короче.
>С другой стороны, /dev/null нагляднее и проще понять где /dev/null заменить на
>не /dev/null.
>Я в общем всецело за /dev/null.
Дело не в том даже, а в том, что когда вы используете >&-,
то в общем случае добавляется ещё одна ошибка в поток:
$ ls >&-
ls: write error: Bad file descriptor
| |
|
|
6.13, xguru (?), 22:48, 14/07/2009 [^] [^^] [^^^] [ответить]
| +/– |
>Нет.
>
>% ls >&-
>%
А скажите, пожалуйста, какая ось у вас?
У меня на GNU/Linux:
% ls >&-
ls: write error: Bad file descriptor
book% bash
$ ls >&-
ls: write error: Bad file descriptor
| |
|
7.14, Аноним (-), 00:18, 15/07/2009 [^] [^^] [^^^] [ответить]
| +/– |
> $ ls >&-
> ls: write error: Bad file descriptor
на FreeBSD все пучком - нет ошибки.
$ ls >&-
$
Linux'у такое поведение с ошибкой можно было б простить, если бы сия функция не была одной из базовых в posix shell'е.
| |
|
|
|
10.21, xguru (?), 10:39, 15/07/2009 [^] [^^] [^^^] [ответить] | +/– | Ну не проблема, а скорее особенность По крайней мере это именно из-за ls ну и ... текст свёрнут, показать | |
|
|
12.31, xguru (?), 21:42, 16/07/2009 [^] [^^] [^^^] [ответить] | +/– | Мне вот интересно, ls и проч вылетает, когда видит, что STDOUT закрыт, или про... текст свёрнут, показать | |
|
|
|
|
|
|
|
|
|
3.23, Andrey Mitrofanov (?), 12:05, 15/07/2009 [^] [^^] [^^^] [ответить]
| +/– |
>Сравните
$ /bin/echo 'Ага.' >&- && echo "Таки-ага." || echo 'Не-а!'
/bin/echo: ошибка записи: Bad file descriptor
Не-а!
$ /bin/echo 'Ага.' > /dev/null && echo "Таки-ага." || echo 'Не-а!'
Таки-ага.
$ _
| |
|
4.24, Andrey Mitrofanov (?), 12:28, 15/07/2009 [^] [^^] [^^^] [ответить]
| +/– |
И эти люди запрещают мне^W^Wрассказывают о кроссплатформенности, переносимоти, позиксвейности и не-баш-измости... http:/openforum/vsluhforumID3/47017.html#7
И ведь каждый раз одно, блин, и то же: "-Вы в шеле? -Нет, мы в шеле! -А, я думал, вы в шеле..."
| |
|
5.30, xguru (?), 21:41, 16/07/2009 [^] [^^] [^^^] [ответить]
| +/– |
>И эти люди запрещают мне^W^Wрассказывают о кроссплатформенности, переносимоти, позиксвейности и не-баш-измости... http:/openforum/vsluhforumID3/47017.html#7
>
>
>И ведь каждый раз одно, блин, и то же: "-Вы в шеле?
>-Нет, мы в шеле! -А, я думал, вы в шеле..."
_ОНИ_ это кто?
Я, наверное, пропустил какую-то жестокую тему
| |
|
|
|
|
1.5, аноним (?), 19:48, 14/07/2009 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
> почему не работает echo text | read val и ряд других
Один написал бред, другой подхватил. Указанная конструкция замечателно работает:
% echo text | read var; echo $var
text
вероятно имелось в виду (echo text | read var); echo $var
В общем статья хорошая, но тема скобок совершенно не раскрыта.
| |
|
2.8, xguru (?), 20:02, 14/07/2009 [^] [^^] [^^^] [ответить]
| +/– |
>> почему не работает echo text | read val и ряд других
>
>Один написал бред, другой подхватил. Указанная конструкция замечателно работает:
>
>% echo text | read var; echo $var
>text
>
У вас какой shell?
tcsh?
В sh/bash это не работает, проверьте, если не лень
>вероятно имелось в виду (echo text | read var); echo $var
>
>В общем статья хорошая, но тема скобок совершенно не раскрыта.
Тема скобок это да
| |
|
3.9, xguru (?), 20:08, 14/07/2009 [^] [^^] [^^^] [ответить]
| +/– |
>[оверквотинг удален]
>>Один написал бред, другой подхватил. Указанная конструкция замечателно работает:
>>
>>% echo text | read var; echo $var
>>text
>>
>
>У вас какой shell?
>
>tcsh?
>
Хотя однако, какой tcsh, там же read нет.
Так что таки bash у вас.
Покажите как работает, пожалуйста
| |
|
4.11, аноним (?), 22:36, 14/07/2009 [^] [^^] [^^^] [ответить]
| +/– |
>Хотя однако, какой tcsh, там же read нет.
>Так что таки bash у вас.
У меня zsh.
| |
4.17, Аноним (-), 00:29, 15/07/2009 [^] [^^] [^^^] [ответить]
| +/– |
> Хотя однако, какой tcsh, там же read нет.
в tcsh есть $< для чтения значения переменной из стандартного ввода
> set foo=$<
blah
> echo Here is my answer: $foo
Here is my answer: blah
| |
|
5.22, xguru (?), 10:44, 15/07/2009 [^] [^^] [^^^] [ответить]
| +/– |
>> Хотя однако, какой tcsh, там же read нет.
>
>в tcsh есть $< для чтения значения переменной из стандартного ввода
>
> > set foo=$<
>
> blah
> > echo Here is my answer: $foo
>
> Here is my answer: blah
Это немножечко не то.
Нужно же было прочитать строку из вывода другого процесса.
%> echo value | set foo=$<
%> echo $foo
%>
Не выводит.
Как сделать чтобы работало?
Вариант с командной подстановкой не предлагать,
нужно чтобы читалась одна строка.
| |
|
|
7.27, Аноним (-), 20:10, 15/07/2009 [^] [^^] [^^^] [ответить]
| +/– |
> foo=$(echo value|head -n 1)
в случае tcsh скорее
> set foo='echo value' | |
|
8.29, xguru (?), 21:39, 16/07/2009 [^] [^^] [^^^] [ответить] | +/– | Не, ребята, это всё не то нужно чтобы read читал только одну строку, а остально... текст свёрнут, показать | |
|
|
|
|
|
|
2.15, Аноним (-), 00:22, 15/07/2009 [^] [^^] [^^^] [ответить]
| +/– |
>> почему не работает echo text | read val и ряд других
>
>Один написал бред, другой подхватил. Указанная конструкция замечателно работает:
Note that unlike some other shells, sh executes each process in the pipe‐
line as a child of the sh process. Shell built‐in commands are the
exception to this rule. They are executed in the current shell, although
they do not affect its environment when used in pipelines.
т.е. команды в конвеере (каналы) не влияют на окружение, в коем они запущены. Кстати, как правильно имплементировать конвееры не оговорено в POSIX. Так что zsh себя тоже правильно ведет.
| |
|
1.25, Блуд (ok), 16:02, 15/07/2009 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Спасибо, очень полезно. Большинство знал, но некоторые моменты облегчат работу в дальнейшем.
| |
|