Необходимо обновить сценарии оболочки, чтобы они могли работать в разных вариантах * nix.

Да, это возможно. Пожалуйста, взгляните на страницу ad-hoc network в вики-сайте Arch. Там вы найдете пошаговое руководство для этого с wpa_supplicant .

1
09.09.2018, 21:07
2 ответа

В этом случае я использую переменные

AWK=awk
GREP=grep

затем проверяю операционную систему

if [ $(uname -s) == "SunOS" ]
then
  AWK=/usr/bin/nawk
  GREP=/usr/xpg4/bin/grep
fi

(повторяю для redhat, suse, hp-ux, aix)

и использую переменную после

if $GREP -q whatever /some/file
then
   $AWK -F: '{....}' /some/file
fi

таким образом у меня есть только один скрипт, но используемый на всех хостах.

1
27.01.2020, 23:25

Правильный подход - придерживаться POSIX совместимых команд (т.е. использовать awk, а не nawk или gawk, grep, а не /usr/xpg4/bin/grep), опций и синтаксиса и задавать свой PATH таким образом:

PATH=$(getconf PATH):$PATH

или на Solaris, если используется устаревшая оболочка Bourne shell:

PATH=`getconf PATH`:$PATH

и все, ваши скрипты, запущенные оттуда, должны выполняться без изменений. Однако избегайте использования #!/bin/sh shebang, который, несмотря на распространенное мнение, не соответствует POSIX. Просто не используйте шебанг вообще. Вы можете использовать command -v sh, чтобы посмотреть, какая POSIX оболочка доступна на вашей машине.

Однако, похоже, что вы хотите сохранить ваши не переносимые сценарии без изменений. Тогда вы можете сохранить ранее предложенный подход для команд, использующих синтаксис POSIX, и добавить фронт-энд для работы с непереносимыми командами в других ОС. Поскольку ваши скрипты используют оболочки в стиле Bourne или Csh, псевдонимы и функции не будут переносимыми, поэтому лучше использовать собственную библиотеку скриптов-оберток, которую вы поместите перед PATH. Например:

sh / ksh / bash / ... :

PATH=~/bin:`getconf PATH`:$PATH 

csh :

set path = ( ~/bin `getconf PATH` $path)

-

mkdir -p ~/bin
cd ~/bin
cat > awk <<%
#!/bin/sh
PATH=`getconf PATH`:$PATH awk "$@"
%
ln -s awk nawk
ln -s awk gawk
2
27.01.2020, 23:25

Теги

Похожие вопросы