The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"Раздел полезных советов: Устранение ошибки redirection unexpected в bash-скриптах"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Устранение ошибки redirection unexpected в bash-скриптах"  +/
Сообщение от auto_tips (?), 26-Ноя-23, 11:12 
На системе с bash 5.2.15(1)-release совершенно невинное выражение

   read id rest < <(qm list)

вызывает ошибку "Syntax error: redirection unexpected"

Лечится заменой shebang с #!/bin/bash на #!/usr/bin/bash
Вроде бы потому, что whois bash отдаёт /usr/bin/bash.

Но ирония в том, что /bin/bash и /usr/bin/bash - две идентичные копии, даже не симлинк. /usr/bin в PATH стоит перед /bin.

URL:
Обсуждается: http://www.opennet.ru/tips/info/3235.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Устранение ошибки redirection unexpected в bash-скриптах"  –1 +/
Сообщение от onanim (?), 26-Ноя-23, 11:12 
что за конструкция "<(qm list)"?
может, там должно быть "$(qm list)", от того башу и непонятен второй редирекшон?

Ответить | Правка | Наверх | Cообщить модератору

2. "Устранение ошибки redirection unexpected в bash-скриптах"  +2 +/
Сообщение от gg (??), 26-Ноя-23, 15:39 
The <(list) syntax is supported by both, bash and zsh. It provides a way to pass the output of a command (list) to another command when using a pipe (|) is not possible. For example when a command just does not support input from STDIN or you need the output of multiple commands:

diff <(ls dirA) <(ls dirB)

Ответить | Правка | Наверх | Cообщить модератору

7. "Устранение ошибки redirection unexpected в bash-скриптах"  +1 +/
Сообщение от ACCA (ok), 27-Ноя-23, 06:29 
Там проблема не в том, что pipe is not possible, а в том, что


qm list | read id rest

приведёт к дикой проблеме. qm list исполняется в текущем shell. А то, что после pipe - в его форке. Поэтом $id и $rest никак не вернутся в текущий shell.

Ответить | Правка | Наверх | Cообщить модератору

15. "Устранение ошибки redirection unexpected в bash-скриптах"  +/
Сообщение от Омномно (?), 19-Дек-23, 15:53 
read -r id rest <<__EODATA__
$(qm list)
__EODATA__
Ответить | Правка | Наверх | Cообщить модератору

16. "Устранение ошибки redirection unexpected в bash-скриптах"  +/
Сообщение от Аноним (16), 19-Дек-23, 18:07 
> исполняется в текущем shel

shopt -s lastpipe

Ответить | Правка | К родителю #7 | Наверх | Cообщить модератору

3. "Устранение ошибки redirection unexpected в bash-скриптах"  +/
Сообщение от OpenEcho (?), 26-Ноя-23, 18:16 
Может это qm list хулиганит, a не bash?


```
#!/bin/bash

read id rest < <( echo "a b"; )

echo "=== as expected ==="
echo "[${id}]"
echo "[${rest}]"

```

Ответить | Правка | Наверх | Cообщить модератору

8. "Устранение ошибки redirection unexpected в bash-скриптах"  –1 +/
Сообщение от ACCA (ok), 27-Ноя-23, 06:33 
Это тебе повезло, что /bin/bash оказался первым в $PATH.

Ответить | Правка | Наверх | Cообщить модератору

4. "Устранение ошибки redirection unexpected в bash-скриптах"  +/
Сообщение от Аноним (4), 26-Ноя-23, 21:07 
чёт не работает:

bash: /tmp/1.sh: cannot execute: required file not found

но, вообще, я находил регрессии в баше (пришлось заменять $() на обратные кавычки в коде чтобы extglob с ?() не отваливался), по-моему, это только в 5.2 на каком-то патче началось.

а, вот, комментарий гласит it's impossible to use ?() inside $() in 5.2_p12 так что могут быть баги баша

Ответить | Правка | Наверх | Cообщить модератору

9. "Устранение ошибки redirection unexpected в bash-скриптах"  +/
Сообщение от ACCA (ok), 27-Ноя-23, 12:02 
Про этот баг говорят с 2008 года - https://unixforum.org/viewtopic.php?t=74172
Ответить | Правка | Наверх | Cообщить модератору

5. "Устранение ошибки redirection unexpected в bash-скриптах"  –1 +/
Сообщение от Аноним (5), 26-Ноя-23, 21:48 
> ирония в том, что /bin/bash и /usr/bin/bash
> - две идентичные копии, даже не симлинк.

А что за система такая чудесатая? Конечно круто глобальные выводы сделать - но например в Debian 12 (и деривативах типа убунт, минтов и проч) - вы не создадите "/bin/bash" даже если бы и сильно захотели. Просто потому что "merged USR" где /bin это symlink -> /usr/bin и соответственно вот именно файлом, вот именно в том пути оно ну никак быть не может, чисто технически.

А вот что за дистро так прикалывается с копиями интерпретеров - имена героев в студию.

Ответить | Правка | Наверх | Cообщить модератору

6. "Устранение ошибки redirection unexpected в bash-скриптах"  +/
Сообщение от ACCA (ok), 27-Ноя-23, 06:25 
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"

ProxMox 8.0.3

Ответить | Правка | Наверх | Cообщить модератору

17. "Устранение ошибки redirection unexpected в bash-скриптах"  +/
Сообщение от Аноним (16), 19-Дек-23, 18:09 
А точно копия? Может, одна версия статически собрана, а другая раздельно?

Ответить | Правка | Наверх | Cообщить модератору

10. "Устранение ошибки redirection unexpected в bash-скриптах"  +/
Сообщение от Аноним (10), 28-Ноя-23, 01:53 
> Лечится заменой shebang с #!/bin/bash на #!/usr/bin/bash

В шебанге шелл-скриптов позволительны всего две вещи:

  #!/bin/sh -- если это кроссплатформенный скрипт,
  #!/usr/bin/env bash -- если нужен именно баш.

/bin/sh прямо упоминается в документации к стандартной библиотеке языка си, поэтому он будет гарантированно существовать. А про /bin/bash таких гарантий нет. Как и для /usr/bin/bash. Поэтому следует использовать /usr/bin/env.

Далее. NixOS для абсолютно минимальной совместимости со скриптами именно эти два файла и оставляет: в папке /bin нет ничего, кроме /bin/sh, а в папке /usr (да, именно в /usr, а не в /usr/bin) нет ничего, кроме /usr/bin/env.

Ответить | Правка | Наверх | Cообщить модератору

11. "Устранение ошибки redirection unexpected в bash-скриптах"  +1 +/
Сообщение от ACCA (ok), 03-Дек-23, 06:37 
Вот же жопа. Когда-то мы были бандой маргиналов, протестующий против засилья NetWare и MS-DOS.

А теперь стали старыми пердунами. Ты прав, мой собрат препод. Только никто не хочет вспоминать про /usr/bin/env.

Ответить | Правка | Наверх | Cообщить модератору

14. "Устранение ошибки redirection unexpected в bash-скриптах"  –1 +/
Сообщение от Аноним (14), 09-Дек-23, 14:22 
> Только никто не хочет вспоминать про /usr/bin/env.

Всё кто серьезно с системой работает знают как делать нужно.
Но всё больше "ыкспертов из отрасли", которые получают знания через посты в телеграмме, а не чтение документации.

Ответить | Правка | Наверх | Cообщить модератору

18. "Устранение ошибки redirection unexpected в bash-скриптах"  –1 +/
Сообщение от Аноним (16), 19-Дек-23, 18:12 
Эту байку любят рассказывать только в NixOS. Где забили на FHS, и все пути превратили в кашу из хэшей. И теперь страдают. У нормальных людей работает и /usr/bin/bash. И всё гарантируется - правилами пакетирования для сопроводителей и разработчиков дистрибутива.
Ответить | Правка | К родителю #10 | Наверх | Cообщить модератору

19. "Устранение ошибки redirection unexpected в bash-скриптах"  +/
Сообщение от Аноним (4), 03-Янв-24, 02:05 
У нормальных людей сработает только /bin/bash, ты палишься. А так, конечно, зависит от того, где планируется запускать, с env не в пример универсальнее.
Ответить | Правка | Наверх | Cообщить модератору

12. "Устранение ошибки redirection unexpected в bash-скриптах"  +2 +/
Сообщение от glad_valakas (?), 07-Дек-23, 20:23 
> whois bash

which bash

> read id rest < <(qm list)

не знаю что это.
можно в терминах /bin/sh пояснить, для тупых и wannabe-кроссплатформенных ?

Ответить | Правка | Наверх | Cообщить модератору

13. Скрыто модератором  +/
Сообщение от Электрон (?), 09-Дек-23, 06:49 
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру