Проблема с временным безымянным каналом в скрипте bash - PullRequest
2 голосов
/ 11 февраля 2010

У меня следующий вопрос:

Когда я выполняю следующий скрипт прямо в окне терминала, команды ведут себя как положено.

$ diff <(echo tmp) <(echo tmp1)
1c1
< tmp
---
> tmp1

Однако, когда я пишу ту же команду в сценарии оболочки

#! /bin/bash
diff <(echo tmp) <(echo tmp1)

Я получаю следующее сообщение об ошибке:

$ sh test.sh
test.sh: line 2: syntax error near unexpected token `('
test.sh: line 2: ` diff <(echo tmp) <(echo tmp1)'

Первоначально я думал, что это проблема с diff, но это также происходит с другими командами. У кого-нибудь есть идея, что вызывает проблему?

Ответы [ 3 ]

5 голосов
/ 11 февраля 2010

Попробуйте

bash test.sh

или

chmod ugo+x test.sh
./test.sh

Хорошо работает для меня, когда я делаю либо.

Похоже, синтаксис не поддерживается оболочкой Bourne (ш).

1 голос
/ 11 февраля 2010

Когда bash вызывается с помощью sh, он запускается в специальном, POSIX-совместимом режиме. Это имеет другой синтаксис, который, я думаю, объясняет разные результаты.

См. bashref режима POSIX , # 22: «подстановка процесса недоступна».

0 голосов
/ 11 февраля 2010

Этот синтаксис не выглядит знакомым. Вы уверены, что используете bash в своем терминале? Вы можете проверить, набрав echo $SHELL.

...