Bash: ошибка синтаксиса: непредвиденное перенаправление

Я делаю это в script:

read direc <<< $(basename `pwd`)

и я получаю:

Syntax error: redirection unexpected

в машине ubuntu

/bin/bash --version
GNU bash, version 4.0.33(1)-release (x86_64-pc-linux-gnu)

пока я не получаю эту ошибку в другой машине suse:

/bin/bash --version
GNU bash, version 3.2.39(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.

Почему ошибка?

Ответ 1

Имеется ли ссылка script /bin/bash или /bin/sh в строке хеширования? Системная оболочка по умолчанию в Ubuntu dash, а не bash, поэтому, если у вас есть #!/bin/sh, то ваш script будет использовать другую оболочку, чем вы ожидаете. У Dash нет оператора перенаправления <<<.

Ответ 2

Docker:

Я получал эту проблему из своего файла Docker, как и у меня:

RUN bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

Однако, согласно этот вопрос, он был решен:

Форма exec позволяет избежать перебора строк оболочки и to RUN, используя базовое изображение, которое не содержит /bin/sh.

+ > Примечание: + > Чтобы использовать другую оболочку, отличную от '/bin/sh', используйте форму exec + > , проходящей в нужной оболочке. Например, + > RUN ["/bin/bash", "-c", "echo hello"]+ Кэш для инструкций RUN автоматически не отменяется во время следующей сборки. Кэш для команды типа RUN apt-get dist-upgrade -y будет использоваться повторно во время следующей сборки. Кэш для

Решение:

RUN ["/bin/bash", "-c", "bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)"]

Обратите внимание на кавычки вокруг параметра each.

Ответ 3

сделать это проще,

direc=$(basename `pwd`)

Или используйте оболочку

$ direc=${PWD##*/}

Ответ 4

Другая причина ошибки может заключаться в том, что вы выполняете задание cron, которое обновляет рабочую копию subversion, а затем попыталось запустить версию script, которая была в конфликтующем состоянии после обновления...

Ответ 5

В моем случае ошибка заключается в том, что я дважды добавил " → "

mongodump --db=$DB_NAME --collection=$col --out=$BACKUP_LOCATION/$DB_NAME-$BACKUP_DATE >> >> $LOG_PATH

Я просто исправлю его как

mongodump --db=$DB_NAME --collection=$col --out=$BACKUP_LOCATION/$DB_NAME-$BACKUP_DATE >> $LOG_PATH

Ответ 6

На моей машине, если я запускаю script напрямую, по умолчанию используется bash.

Если я запустил его с помощью sudo, по умолчанию будет sh.

Вот почему я столкнулся с этой проблемой, когда использовал sudo.