UNIX, измените строку интерпретатора во всех сценариях оболочки - PullRequest
2 голосов
/ 17 ноября 2010

Может кто-нибудь подсказать, пожалуйста, как узнать путь к KornShell (ksh) на моей машине, а затем изменить строку интерпретатора во всех сценариях оболочки (.sh) в текущем каталоге, которые показывают другое имя пути для ksh?

Ответы [ 5 ]

7 голосов
/ 17 ноября 2010

Это даст вам путь к оболочке Корна:

which ksh

И это заменит шебанг во всех сценариях оболочки:

sed -i 's/#!\/bin\/bash/#!insert escaped ksh path here/' *.sh 
3 голосов
/ 17 ноября 2010

Чтобы узнать, где живет ksh:

whence -a ksh

Чтобы изменить все сценарии оболочки в текущем каталоге для использования ksh:

sed -i '1{/^#!\/[^ ]*\/\(ba\|\)sh\( *\)/s||#!/bin/ksh\2|}' *.sh

Это будет соответствовать sh или bash и сохранит все пробелы (и аргументы), которые появятся после. Он действует только в первой строке, поэтому не затрагивает похожие строки, которые могут появиться позже в файле.

Замените фактическое местоположение вашего исполняемого файла ksh или используйте /usr/bin/env ksh.

Используйте sed -i .bak, если вы хотите сделать резервную копию измененных файлов.

3 голосов
/ 17 ноября 2010

Поместите это в первую строку каждого файла (строка Шебанга):

#!/usr/bin/env ksh

Если вам нужно заменить, вы можете использовать sed / awk: find -name '*.sh' | xargs perl -pi -e "s{^#!/usr/bin/sh}{#!/usr/bin/env ksh}"

0 голосов
/ 30 октября 2017

На моей машине только это работает sed -i "s/^#\!.*/#\!\/usr\/bin\/perl/" *.sh Каждый выдает ошибку.

0 голосов
/ 17 ноября 2010

Эта команда найдет исполняемый файл оболочки korn в вашей среде UNIX:

which ksh

Если выходные данные не возвращаются, оболочка korn отсутствует.(По крайней мере, не найден в вашей среде PATH.) Вы можете получить его с сайта KornShell или установить через систему менеджера пакетов программного обеспечения.

Чтобы заменить строку интерпретатора во всехсценарии оболочки (* .sh), вы можете запустить что-то вроде этого:

sed -i "s/^#\!.*$/#\!\/bin\/ksh/" *.sh

Опция -i - редактировать файлы на месте.(Предупреждение: сначала протестируйте эту команду без -i, чтобы избежать изменения файла.)

Аргумент в кавычках - это шаблон для соответствия всем строкам, начинающимся с "#!"и замените их на "#! / bin / ksh".(Обратите внимание, что некоторые специальные символы необходимо экранировать с помощью «\».) Вам может потребоваться настроить этот аргумент, если он не является именно той заменой, которую вы ищете.

...