[devel] bash4

Sergey Vlasov vsu на altlinux.ru
Пт Авг 13 18:30:16 UTC 2010


On Fri, Aug 13, 2010 at 07:43:21PM +0400, Alexey Tourbin wrote:
> Есть ещё одна нехорошая засада - у нас /bin/sh и /bin/bash собраны
> в очень разной конфигурации: у них отличается синтаксис.  Я ставил
> этот вопрос ещё 6 лет назад!
> 
> $ sh -c 'diff <(echo a) <(echo b)'
> sh: -c: line 0: syntax error near unexpected token `('
> sh: -c: line 0: `diff <(echo a) <(echo b)'
> $ bash -c 'diff <(echo a) <(echo b)'
> 1c1
> < a
> ---
> > b
> $ 

Это не конфигурация, а документированная зависимость поведения bash от
имени, использованного при вызове, и отключение поддержки process
substitution в режиме совместимости с POSIX (документировано только в
info bash, в man в явном виде не описано):

$ bash --posix -c 'diff <(echo a) <(echo b)'
bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `diff <(echo a) <(echo b)'
$ ln -s /bin/bash sh; ./sh -c 'diff <(echo a) <(echo b)'
./sh: -c: line 0: syntax error near unexpected token `('
./sh: -c: line 0: `diff <(echo a) <(echo b)'
$ sh -c 'set +o posix
diff <(echo a) <(echo b)'
1c1
< a
---
> b

(в последнем случае нужно именно \n в строке, через разделитель ';'
не сработает - видимо, переключение опции posix происходит только при
разборе следующей строки).
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 198 байтов
Описание: Digital signature
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20100813/f1ba43d8/attachment.bin>


Подробная информация о списке рассылки Devel