Запуск сценария 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 терпит неудачу? Регулярное выражение выглядит правильно для меня.

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

благодаря

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 сигнализирует об ошибке (по умолчанию).

  • mv * (исключение ошибки «can not move»)
  • Что проверяет ?
  • Удалить keymap и полностью отключить ключ в zsh
  • Как я могу применить `cut` к нескольким файлам, а затем« вставить »результаты?
  • zsh и xfce4-terminal
  • Отправить копию вывода скрипта в файл
  • Пробелы как разрывы строк из команды inline for loop
  • Как заставить `less -FX 'играть хорошо с помощью командной строки с двумя строками
  • Что означает «следовая ловушка», когда сообщается zsh?
  • Как определить, работает ли программа при запуске оболочки и запустить эту программу, если она еще не запущена?
  • Могу ли я выборочно отключить завершение zsh?
  • сбой команды ожидания
  • Linux и Unix - лучшая ОС в мире.