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

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

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

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

  • Как условно сделать что-то, если команда выполнена успешно или не выполнена
  • Остановить cron-скрипт от уничтожения моего зеркального списка неверными данными
  • Получение удаленной информации о системе Windows с Linux Server
  • Алиасы Bash не подхватили первоначальный логин
  • Окраска синтаксиса Bash
  • Ошибка с именем файла, содержащим круглые скобки
  • Однако это приводит к ошибке, и я получаю:

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

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

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

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

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

    благодаря

  • Любой способ создать здесь документы, которые заменяют некоторые переменные, но не другие в bash?
  • Какое влияние имеет приоритет на выполнение фоновой задачи?
  • Экспортировать или не экспортировать переменную bash PS1
  • Bash: для цикла с двоичным диапазоном, сохраняющим контрольное значение двоичным
  • в сценарии bash; процесс stdout как аргумент имени файла терпит неудачу, когда вы открываете его более одного раза
  • Обработка дубликатов имен программ bash
  • 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 сигнализирует об ошибке (по умолчанию).

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