Я заметил, что часто существуют тонкие и часто раздражающие различия между версиями по умолчанию определенных инструментов командной строки, таких как paste
и sed
в современных дистрибутивах Linux по сравнению с OSX
. Это приводит кответыкоторые не работают, OS X
хотя они будут работать практически на любом дистрибутиве Linux.
Поэтому мне интересно, существует ли стандартный способ получить полный набор OS X
версий стандартных инструментов Unix в современных дистрибутивах Linux, чтобы мы могли протестировать решения на корректную функциональность в OSX, не имея копии?
решение1
Как упоминалось в комментарии, Apple делаетисходный кодиз его версий этих инструментов доступны. Многие общие команды находятся вПакет "shell_cmds", в то время как paste и sed находятся в "текстовые_команды". Вы можете получить исходный код и скомпилировать.
Практически все они прекрасно работают в системах Linux, хотя вам часто приходится заходить в исходный код и удалять явно специфичные для FreeBSD тесты, в частности строку, __FBSDID("...");
которая есть почти в каждом файле. Я не знаю ни одного дистрибутива, который упаковывает их. Многие дистрибутивы упаковывают BSD-версии некоторых распространенных инструментов, которые очень близки (часто идентичны) версиям OS X, хотя они обычно не включают такие вещи, как paste и sed. Например, Debian включаетвосемь пакетов называютсяbsdX
(ни в одной из которых нет ни одной из этих команд). Что касается версий Apple, или многих инструментов, которые в них не включены, их несложно создать самостоятельно, когда они вам понадобятся, следуя инструкциям выше.
При всем при этом общим подмножеством инструментов GNU и BSD являетсяСпецификация POSIX, где определены все основные команды. Вы можете посмотретьвставить командуилиседи посмотрите, какие аргументы он гарантированно примет везде. Это «морально правильный» способ написания переносимого кода: и инструменты GNU, и инструменты BSD имеют расширения, но если вы остаетесь в рамках POSIX, ваш код будет работать в обоих вариантах. Так чтоубедитесь, что вы всегда используете только аргументы POSIXи тогда то, что вы говорите, должно работать и на OS X, и на других системах в равной степени.
решение2
В то время как большинствоИнструменты Unixy для OSX имеют открытый исходный код, исходный код многих инструментов опирается на функции библиотеки и ядра, которые отсутствуют в Linux (и которые не являются открытыми и не могут работать на оборудовании, отличном от Apple, без дополнительных усилий и, возможно, нарушений лицензии). Я сомневаюсь, что вы сможете запустить их в Linux без значительных усилий.
Уровень Unix OSX перенесен изFreeBSDи многие программы очень похожи на ту, что была в релизе FreeBSD, который был актуален на момент релиза OSX. Вы можете запустить FreeBSD на виртуальной машине и протестировать все там. Вы также можете запуститьOpenBSD; OpenBSD ориентирован на безопасность и гораздо более консервативен, чем FreeBSD, когда дело доходит до принятия новых функций. Если вы хотите протестировать скрипты на переносимость, вы также можете установитьОткрытьИндиана, который является ответвлением с открытым исходным кодомСолярисоснованный на ныне снятой с производства версии OpenSolaris. Поскольку SolarisСистема V- Solaris плюс OpenBSD на основе ОС Unix дает вам достаточно широкое представление о переносимости Unix.
Вы также можете ознакомиться с документацией по многим вариантам Unix в Интернете: