Переменные среды, содержащие функции, являются взломом удара. Zsh ничего не имеет подобным. Можно сделать что-то похожее с несколькими строками кода. Переменные среды содержат строки; более старые версии удара, прежде чем Контузия была обнаружена, сохранил код функции в переменной, имя которой является именем функции и чье значение () {
сопровождаемый кодом функции, сопровождаемым }
. Можно использовать следующий код, чтобы импортировать переменные с этим кодированием и попытаться выполнить их с подобными удару настройками. Обратите внимание, что zsh не может эмулировать все функции удара, все, что можно сделать, становятся немного ближе (например, сделать $foo
разделите значение и разверните подстановочные знаки и сделайте массивы 0).
bash_function_preamble='
emulate -LR ksh
'
for name in ${(k)parameters}; do
[[ "-$parameters[name]-" = *-export-* ]] || continue
[[ ${(P)name} = '() {'*'}' ]] || continue
((! $+builtins[$name])) || continue
functions[$name]=$bash_function_preamble${${${(P)name}#"() {"}%"}"}
done
(Как Stéphane Chazelas, исходный исследователь Контузии, отметил, более ранняя версия этого ответа могла выполнить произвольный код в этой точке, если бы функциональное определение было уродливо. Эта версия не делает, но конечно как только Вы выполняете любую команду, это могла быть функция, импортированная из среды.)
Версии постконтузии удара кодируют функции в среде с помощью недопустимых имен переменной (например. BASH_FUNC_myfunc%%
). Это делает их тяжелее для парсинга надежно, поскольку zsh не обеспечивает интерфейс для извлечения таких имен переменной из среды.
Я не рекомендую делать это. Доверие экспортируемым функциям в сценариях является плохой идеей: это создает невидимую зависимость в Вашем сценарии. Если Вы когда-нибудь будете запускать свой скрипт в среде, которая не имеет Вашей функции (на другой машине, в задании крона, после изменения Ваших файлов инициализации оболочки, …), то Ваш сценарий не будет больше работать. Вместо этого сохраните все свои функции в одном или нескольких отдельных файлах (что-то как ~/lib/shell/foo.sh
) и запустите свои сценарии путем импорта функций, которые это использует (. ~/lib/shell/foo.sh
). Таким образом, если Вы изменяете foo.sh
, можно легко искать, какие сценарии полагаются на него. При копировании сценария можно легко узнать, в каких вспомогательных файлах он нуждается.
Zsh (и ksh перед ним) делает это более удобным, позволяя автоматически загружать функции в сценариях, где они используются. Ограничение состоит в том, что можно только поместить одну функцию на файл. Объявите функцию, как автоматически загружено и поместите функциональное определение в файл, имя которого является названием функции. Поместите этот файл в каталог, перечисленный в $fpath
(который можно настроить через FPATH
переменная среды). В Вашем сценарии объявите автоматически загруженные функции с autoload -U foo
.
Кроме того, zsh может скомпилировать сценарии, для сохранения времени парсинга. Звонить zcompile
скомпилировать сценарий. Это создает файл с .zwc
расширение. Если этот файл присутствует затем autoload
загрузит скомпилированный файл вместо исходного кода. Можно использовать zrecompile
функционируйте к компиляции (ре) все функциональные определения в каталоге.
Существует дорожная карта Соляриса на странице 33 этого slideware от https://blogs.oracle.com/openomics/entry/solaris_day_27nov2013_slides
Взгляните к правовой оговорке страницы 2 сначала.
"Главная" версия затем неограниченно долго останется в 11 и будет Oracle Солярис 11.next обновления.
Это описано на этой странице блога: https://blogs.oracle.com/solaris/entry/new_solaris_sparc_roadmap
Обратите внимание также, что наряду с тем объявлением, Солярисом 11 долгосрочной главной поддержки была расширена на 10 лет, переместившись с 2021 до 2031 (и даже 2034 для расширенной поддержки).
Update2: Oracle Солярис 11.4 Бет была просто выпущена.
Да. Будет Солярис 12. Он будет выпущен в таймфрейме, показанном на публичной дорожной карте SPARC/Solaris здесь: http://www.oracle.com/us/products/servers-storage/servers/sparc/oracle-sparc/sparc-roadmap-slide-2076743.pdf .
К сожалению, в данный момент я не могу сказать больше о Солярисе 12.
Чтобы ответить на вопрос о развитии Соляриса, мы (Oracle) увеличили число инженеров, работающих на Солярисе, более чем в 2 раза с момента приобретения.
Мы активно работаем над улучшением Solaris каждый день, и каждая последующая версия Solaris добавляет новые, уникальные инновации, основываясь на последней версии. Мы только что запустили Solaris 11.2 31 июля, который мы почти назвали 12 из-за количества больших функций, которые мы в него включили.
Solaris 11.2 включает более 500 новых функций, в том числе:
Для получения дополнительной информации, вы можете посмотреть выступление Джона Фаулера на презентации Solaris 11.2 здесь: http://www.oracle.com/events/us/en/solaris-11-2/index.html#vid=3521205463001
Я недавно видел ошибки, ссылающиеся на v12. Скорее всего, они ждут развертывания нового оборудования, чтобы представить Solaris 12 (или любое другое название, которое ей дает Oracle).
Согласно последней информации от Oracle, они будут продолжать добавлять точечные выпуски в Solaris 11, каждый из которых добавляет новые функции / улучшения. Извините, мне лень найти ссылку.
Похоже, ответ будет отрицательным, но я уверен, что в будущем они выпустят более позднюю версию. Продавцы действительно наслаждаются тем, у кого номер выпуска выше. Просто посмотрите на Chrome и Firefox ...