У меня есть сценарий оболочки, который я хотел бы запускать на нескольких платформах, поддерживающих bash. Моя проблема в том, что некоторые команды ведут себя по-разному в Linux, FreeBSD, OS X и Cygwin.Каков наилучший способ написания кросс-платформенных сценариев оболочки
Моя мысль до сих пор являются:
- Создание реализации по умолчанию для всех операций OS конкретных в главном скрипте, а затем проверьте
$OSTYPE
иsource
файл реализации конкретных, которые (возможно) заменяет команды, ведут себя по-другому. И если я это сделаю, как мне обрабатывать команды с несколькими аргументами? Четыре позиционных аргумента, переданных функции, не являются самым чистым подходом. - Поместите все реализации в мой скрипт, каждый с аффиксом в имени, проверьте
$OSTYPE
и создайте переменнуюOPSUFFIX
, а затем вызовитеoperation$OPSUFFIX
для каждой операции. ./configure
магия?- Перенос на что-то вроде Python — может быть самым разумным, но требует большинства изменений кода. И если это идиоматический сценарий инициализации, это не вариант.
Если вы хотите что-то действительно перекрестная платформа, вам нужно перейти от сценариев к программированию - есть много языков, которые абстрагируют реализацию ОС от кода; Python, Ruby, Java, чтобы назвать несколько. Если вы заставляете пользователей Windows устанавливать Cygwin (eew), то для их установки один из других не нужен. –
Многие стандартные команды имеют стандартизованное поведение для большей части того, что они делают. Если вам удастся остаться в этой зоне (и вы можете утверждать 'bash', что не обязательно то, что вы можете обоснованно утверждать), вы обычно можете написать в основном переносимый скрипт. –
@BoristheSpider Нет ничего плохого в использовании Cygwin или UWin как части собственного рабочего процесса, особенно для использования ваших кросс-платформенных скриптов. Я понятия не имею, как обойтись без Cygwin. – ormaaj