Основной вопрос здесь: существует ли стандартный метод написания сценариев оболочки UNIX, который будет работать на нескольких платформах UNIX.
Например, у нас много хостов, работающих под разными версиями UNIX (Solaris, Linux)и в разных версиях все с немного разными схемами файловой системы.Некоторые хосты имеют whoami в / usr / local / gnu / bin /, а некоторые в /usr/bin/.
Кажется, что все наши скрипты справляются с этим немного по-другому.У некоторых есть операторы case в архитектуре:
case "`/script/that/determines/arch`" in
sunos-*) WHOAMI=`/usr/local/gnu/bin/whoami` ;;
*) WHOAMI=`/usr/bin/whoami` ;;
esac
При таком подходе вы точно знаете, какой двоичный файл выполняется, но довольно громоздко, если выполняется много команд.
Некоторые простоустановите PATH
(на основе скрипта arch выше) и вызывайте команды только по их имени.Это удобно, но вы теряете контроль над тем, какую команду вы выполняете, например, если у вас есть:
/bin/foo
/bin/bar
/other/bin/foo
/other/bin/bar
Вы не сможете использовать и /bin/foo
, и /other/bin/bar
.
Другой подход, который я мог бы придумать, - иметь локальный каталог на каждом хосте с символическими ссылками на каждый двоичный файл, который будет необходим на каждом хосте.Например:
Хост Solaris:
/local-bin/whoami -> /usr/local/gnu/bin/whoami
/local-bin/ps -> /usr/ucb/ps
Хост Linux:
/local-bin/whoami -> /usr/bin/whoami
/local-bin/ps -> /usr/ps
Какие другие подходы используют люди?Пожалуйста, не говорите, напишите сценарий на Python ... есть некоторые задачи, где bash является наиболее лаконичным и практичным средством выполнения простой задачи.