Запуск сценария bash из оболочки zsh

У меня возникают проблемы с запуском скрипта bash на zsh . Сценарий похож на приведенный ниже и должен работать под bash:

 #!/bin/bash echo "<235234>" | egrep -oe [0-9]+ 

Тем не менее, моя оболочка по умолчанию на zsh , поэтому для запуска вышеприведенного скрипта я использую type /bin/bash в моем приглашении zsh , а затем я запускаю . script.sh . script.sh .

Однако это приводит к ошибке, и я получаю:

 zsh: no matches found: [0-9]+ 

( 235234 этого я должен получить 235234 ).

На этом этапе я смущен и имею следующие вопросы:

  1. Если я в bash , почему я получаю сообщение об ошибке zsh ?
  2. Почему ошибка egrep regexp терпит неудачу? Регулярное выражение выглядит правильно для меня.

Примечание. Если это имеет значение, я не должен изменять сценарий (сценарий используется несколькими пользователями, и мы не должны вносить в него изменения).

благодаря

  • При использовании zsh tab-completion игнорируйте CDPATH, если локальный файл или каталог совпадают
  • Как увеличить историю в oh-my-zsh?
  • zsh хочет исправить vim для .vim
  • zsh: Что делает команда «время + номер» в zsh
  • zsh: завершение меню для glob
  • Показать содержимое символической ссылки
  • Как создать псевдоним для zsh?
  • Как тихо получить пустую строку из шаблона шара без совпадений
  • One Solution collect form web for “Запуск сценария bash из оболочки zsh”

    Если скрипт правильно начинается с #!/bin/bash (перед этим не может быть другого комментария), вы должны просто выполнить его, набрав /path/to/script.sh , без этого . в начале. . это оператор include, это означает «выполнить содержимое этого файла, как если бы оно было введено здесь в командной строке» (это называется «sourcing» в jargon оболочки unix).

    Запуск bash и поиск скрипта должны работать. Я предполагаю, что, поскольку в некоторых случаях вы автоматически запускали bash, но вы предпочитаете zsh, вы настроили bash, чтобы автоматически переключиться на zsh – возможно, с помощью exec zsh в ~/.bashrc . Не делайте этого: вместо этого вы должны переключиться на zsh в файле, который выполняется при входе в систему, то есть ~/.profile , и оставить только .bashrc . Чтобы выполнить zsh в терминалах, установите переменную окружения SHELL :

     # in ~/.profile export SHELL=/bin/zsh if [ -t 1 ]; then exec $SHELL; fi 

    К сожалению, вы не можете изменить сценарий, потому что он глючит. Скобки должны быть указаны даже в bash. Если в текущем каталоге есть файл с именем 3+ , вызов egrep будет искать одно или несколько вхождений цифры 3 вместо последовательности произвольных цифр. Если есть файл с именем 3+ и файл с именем 4+ , вызов egrep будет искать 3 с в файле 4+ . Здесь разница между bash и zsh вступает в игру только тогда, когда ни один файл не соответствует указанному шаблону: bash бесшумно запускает команду с незамкнутым шаблоном, тогда как zsh сигнализирует об ошибке (по умолчанию).

    Interesting Posts

    Tmux – Получить количество панелей в текущем окне в переменной bash?

    Каков канонический способ получения отдельного размера потока в видеофайле?

    " Имя источника данных не найдено, и драйвер по умолчанию не указан" при подключении к OracleDB с использованием ODBC

    Объединение файлов в каталог по заголовкам и исключение общего содержимого

    Как извлечь количество физических процессоров и потоков на ядро? (Нет текста, только номер для использования в качестве входных данных в другом месте)

    / usr / bin / env как shebang – и его последствия для безопасности

    Попытки унифицировать Linux и другие бесплатные Unix?

    «Login -qf», поскольку root приводит к ошибке «Ошибка входа в систему»

    Как напечатать раздел руководства (человек)?

    Ограничитель выходного звука для предотвращения всплесков громкости на рабочем столе Linux?

    Как перезагрузить файл в vim?

    Что считается изменением или изменением файла?

    PAM – необходимый и достаточный флаг управления

    Установка драйверов принтера Canon Pixma mg2400 на Manjaro / Arch?

    Перенаправление трафика с одного компьютера на другой

    Linux и Unix - лучшая ОС в мире.