Я делаю это в скрипте:
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.
Почему ошибка?
Ответы:
Ваш скрипт ссылается
/bin/bash
или/bin/sh
в его строке хеширования? Системной оболочкой по умолчанию в Ubuntu является dash , а не bash , так что если у вас есть,#!/bin/sh
тогда ваш скрипт будет использовать другую оболочку, чем вы ожидаете. В Dash нет<<<
оператора перенаправления.источник
Докер:
Я получал эту проблему из моего Dockerfile, как у меня было:
Однако по этому вопросу решено было:
Решение:
Обратите внимание на кавычки вокруг каждого параметра.
источник
Если для запуска сценария вы используете следующее:
Тогда вы захотите использовать вместо этого следующее:
Причина этого в том, что Bash не является оболочкой по умолчанию для Ubuntu. Итак, если вы используете «sh», то он просто будет использовать оболочку по умолчанию; который на самом деле Dash. Это произойдет независимо от того, есть ли у вас
#!/bin/bash
верхняя часть вашего скрипта. В результате вам нужно будет явно указать использование,bash
как показано выше, и ваш скрипт должен работать в ожидаемом режиме.Dash не поддерживает перенаправления так же, как Bash.
источник
Вы можете получить результат этой команды и поместить его в переменную. тогда используйте
heredoc
. например:можно написать так:
и вот так (это то, что вы хотите):
Практический пример в
busybox
нижнемdocker
контейнере:источник
echo 'text' | nc
что еще короче.сделай это проще,
Или используйте оболочку
источник
Другая причина ошибки может заключаться в том, что вы запускаете задание cron, которое обновляет рабочую копию Subversion, а затем пытаетесь запустить сценарий с поддержкой версий, который после обновления находился в конфликтном состоянии ...
источник
На моем компьютере, если я запускаю скрипт напрямую, по умолчанию используется
bash
.Если я запустил его
sudo
, по умолчанию будетsh
.Вот почему я столкнулся с этой проблемой, когда использовал
sudo
.источник
В моем случае ошибка связана с тем, что я дважды поставил ">>"
я просто исправляю это как
источник
Перед запуском скрипта вы должны проверить первую строку скрипта для интерпретатора.
Например: если сценарии начинаются с / bin / bash, запустите сценарий, используя команду ниже "bash имя_сценария.sh"
если скрипт начинается с / bin / sh, запустите скрипт с помощью следующей команды "sh script_name.sh"
./sample.sh - это обнаружит интерпретатор из первой строки скрипта и запустится.
Разные дистрибутивы Linux имеют разные оболочки по умолчанию.
источник