Запуск bash-скрипта на нескольких оболочках - PullRequest
0 голосов
/ 27 марта 2019

Итак, я пытался создать скрипт на оболочке bash, я узнал, что скрипт не работает на оболочках ksh или dash. Поэтому мой вопрос заключается в том, как создать скрипт для запуска на всех 3 оболочках (bash, dash & ksh).

Ответы [ 3 ]

0 голосов
/ 29 марта 2019

Некоторые команды или утилиты доступны не во всех оболочках, или они могут вести себя по-разному в разных оболочках. Если вы знаете, какой Coomand работает на какой оболочке или выдает желаемый результат, вы можете написать специфичные для оболочки команды, как показано ниже

bash -c 'echo bash'

ksh -c 'echo ksh'

Все остальные команды, которые являются общими для всей оболочки, могут быть написаны обычным способом.

0 голосов
/ 29 марта 2019

Чтобы написать сценарий, который гарантированно будет переносимым между различными оболочками, сценарий должен быть POSIX Shell совместимым. POSIX - это минимальный набор встроенных команд и команд, которые должны поддерживать все соответствующие оболочки. Ash, Dash, Zsh, Bash, Ksh и т. Д. - все это оболочки, способные выполнять сценарии, совместимые с POSIX.

Что делает оболочка типа Bash, так это добавляет приятные функции, которые делают оболочку более способной, например, дополнительные расширения параметров для преобразования в верхний / нижний регистр, замены подстрок и т. Д. И новые встроенные функции, такие как [[ ... ]] которые предоставляют возможности сопоставления регулярным выражениям и т. д. Хотя это делает Bash более способным, это также означает, что сценарии, написанные с использованием « Bashisms », больше не могут работать под всеми другими оболочками. Ash, Dash и другие минимальные оболочки не знают, как обращаться с функциями, добавленными Bash, Ksh или Zsh, и поэтому терпят неудачу.

Чтобы написать действительно переносимые сценарии, вы должны ограничить содержимое тем, что предоставляется языком команд POSIX.

0 голосов
/ 27 марта 2019

Вам нужен файл, подобный этому:

#!/bin/bash   #isn't a simple comment 
echo "hello bash"

#!/bin/sh     #isn't a simple comment 
echo "hello sh"

#!/bin/ksh    #isn't a simple comment 
echo "hello ksh"

(#!) Он называется shebang сообщает оболочке, какая программа интерпретирует скрипт

, который называет этот файлкак вы предпочитаете (file.bsk), но не забудьте дать ему разрешение на выполнение:

chmod +x file.bsk

, затем выполните ./file.bsk

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...