Да, это возможно. Пожалуйста, взгляните на страницу ad-hoc network в вики-сайте Arch. Там вы найдете пошаговое руководство для этого с wpa_supplicant
.
В этом случае я использую переменные
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
таким образом у меня есть только один скрипт, но используемый на всех хостах.
Правильный подход - придерживаться 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