2015-10-28 2 views
2

У меня есть список скриптов, написанных в Bash, и теперь мне нужно их преобразовать в сценарии Shell. Я знаю, что bash - это расширенная реализация спецификации Shell, и поэтому я ищу некоторую спецификацию расширения, реализованного в Bash, а именно, что находится в Bash, который не является частью спецификации Shell, поэтому я мог бы просматривать мои скрипты и внести соответствующие изменения. Есть ли такой документ? В качестве альтернативы, любое другое предложение о том, как сделать преобразование, будет с благодарностью оценено.Конвертировать скрипты Bash в оболочку

+3

[shellcheck] (http://shellcheck.net) с символом '#!/Bin/sh' shebang должен улавливать многие башизмы. Насколько велики эти сценарии? Насколько переносимы, именно они вам нужны? –

+0

Что вы подразумеваете под «спецификацией оболочки»? Существует много разных оболочек, из которых 'bash' является одним. Вы говорите о совместимости с Bourne Shell ('sh'), в частности? – Phylogenesis

+2

Он, вероятно, ссылается на [спецификацию оболочки POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/idx/xcu.html). – chepner

ответ

3

Чтобы изменить скрипты Bash на POSIX compatible shell код, вы должны удалить bashisms. Хотя я не думаю, что есть какой-либо инструмент, который может надежно обрабатывать все bashisms можно начинать с checkbashisms.

2

При использовании распределения, основанного на Debian, вы можете использовать checkbashisms команда, которая обеспечивается devscripts пакета.

Ниже приведен пример конкретной конструкции Баша (а bashism) highlighed от checkbashisms: == использования вместо = в тесте.

 
$ cat b.sh 
#!/bin/sh 

VAR=foo 
if [ $VAR == bar ]; then 
    echo 'bar!' 
fi 
 
$ checkbashisms b.sh 
possible bashism in b.sh line 4 (should be 'b = a'): 
if [ $VAR == bar ]; then 
+0

Я просто попробовал checkbashisms с приведенным выше примером скрипта и не получил никаких результатов. любая идея, что я делаю неправильно? вот команда, которую я запускаю: $ checkbashisms test.sh, а затем cli не возвращает вывод, где test.sh содержит приведенный выше сценарий. – zuckermanori

+0

@zuckermanori, вы использовали '/ bin/sh' вместо'/bin/bash' в shebang? –

+0

да я сделал @ Christophe Vu-Brugier – zuckermanori

1

shellcheck инструмента (с притон из #!/bin/sh) будет поймать много Баша-измов.

Любые, которые не были пойманы, вероятно, должны быть поданы как ошибки против проекта. Если они не являются запретительными для реализации, они должны быть добавлены в разумные сроки. Автор довольно отзывчив.

Смежные вопросы