Запуск сценария 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 в bash
  • Round / truncate digit в строке в zsh (или с внешним инструментом)
  • Изменение цвета при смене каталога
  • как я могу назвать команды git без «git» впереди?
  • Как заставить мои функции оболочки использовать существующую автозаполнение в zsh?
  • как различать пользовательские сервисы и системные службы в systemd?
  • zsh с аргументами
  • Как я могу программно получить доступ к завершению 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

    Создание сценария оболочки внутри текстового редактора

    Как установить кодировку VIM по умолчанию в UTF-8?

    Настройте firwall с помощью iptables, чтобы разрешать только VPN

    Ограничение частоты использования / частоты использования энергии

    Как поймать нажатия клавиш в среде Linux

    Обработка текста и экспорт содержимого на лист Excel

    что это означает по адресу электронной почты в качестве метки генерирования лобковой / частной пары ключей rsa?

    Изменение цвета PS1 при подключении к другому хосту через SSH

    Как я могу подавить диалоговое окно pinentry, если нет пароля gpg?

    echo $ PATH не отражает «экспорт PATH», который я сделал в сценарии оболочки

    операция tar '-u'

    Перезапустить GNOME без перезагрузки Xorg?

    Так как Ubuntu persistent USB разбился, он не загружается с черным экраном перед входом в систему, что делать?

    Файлы Rsync – из проблемы

    vim – открыть файл и номер строки goto с помощью <filename>: <строка nbr>:

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