Ответ 1
Вы можете запустить PowerShell в Linux через Pash. Он использует Mono, как PowerShell использует .NET.
Я использую bash и делаю это уже более десяти лет, но иногда я задаюсь вопросом, были ли какие-либо значительные новые разработки в мире оболочек Linux.
Несколько лет назад Microsoft выпустила PowerShell, что казалось очень интересным. Есть ли сопоставимые инновации в оболочках Linux?
Вы можете запустить PowerShell в Linux через Pash. Он использует Mono, как PowerShell использует .NET.
Вы понимаете, что bash 4
был недавно выпущен с загрузкой новых функций и языковых дополнений?
globstar
(**/foo
) выполняет рекурсивный поиск, dirspell
исправляет опечатки при расширении имени пути.autocd
shell позволяет изменять каталоги, просто набрав путь к каталогу, вместо того, чтобы поставить перед ним cd
.&>>
и |&
операторов перенаправления, которые перенаправляют как stdout
, так и stderr
Отъезд:
Я бы посмотрел на zsh или fishshell.
Одна из наименее рекламируемых функций Bash (и нескольких других оболочек) - это возможность писать свои собственные загружаемые файлы, а оболочка запускает их как встроенные.
Предположим, вы пишете загружаемый 'on'.. и хотите, чтобы он работал следующим образом:
on node 123 run some command
on class nodes run some command
on all nodes run some command
... и т.д.
Вы можете проследить простые примеры написания загружаемого файла, затем включить его как Bash с помощью enable -f/path/to/loadable loadable_name
Итак, в нашем случае включите -f/opt/ bash/loadables/on on
... в вашем bashrc, и у вас его есть.
Итак, если вы хотите, чтобы Bash интерпретировал ваш новый новый язык изначально, вы должны написать загружаемое имя "use" или "switch_to", а затем модифицировать парсер для загрузки другой грамматики/времени выполнения, если определенная переменная среды был установлен.
то есть:.
#/bin/bash
switch_to my-way-cool-language
funkyfunc Zippy(int p) [[
jive.wassup(p) ]]
Однако большинство людей не захотят взломать свою оболочку. Я хотел бы указать, что существуют средства, чтобы принять Bash и сделать так, как вы этого хотите, без чрезмерного использования кода ядра.
Смотрите/path-to- bash -source/examples/loadables, вы можете получить это, чтобы летать там, где вы работаете, поскольку вы все еще используете Bash.
Я думаю, что "оригинальная улучшенная оболочка" ksh93. bash возникла в то время, когда исходный код ksh был запатентован; если бы ksh был открытым исходным кодом, тогда, возможно, не было бы нужным иметь новую оболочку (хотя с FSF вы никогда не знаете). ksh заслуживает изучения, особенно за его способность расширяться через C-модули, но это не явный выигрыш над bash. bash autocompletion явно превосходит, чего может быть достаточно, чтобы сделать bash выигрышем в целом. В любом случае bash и ksh прилагают значительные усилия для сближения, поэтому различия незначительны.
Другая интересная оболочка zsh, которая пытается быть всем, что ksh, а также включает csh. Поскольку я никогда не видел никакого смысла или не использовал csh, я не тот человек, который защищал zsh. Я укажу на одну необычную несовместимость: по умолчанию в zsh переменная $var
всегда расширяется до одного токена, даже если она содержит пробелы. Это поведение несовместимо со всеми другими sh-производными оболочками, и это иногда неудобно, но на самом деле оно имеет гораздо больше смысла, чем оригинал, и это экономит чертовски много цитат.
csh была первой оболочкой, которая имела контроль над работой, но, на мой взгляд, ее (и ее преемники) заменяли на bash и ksh. Мне никогда не было весело писать сценарии.
Наконец, существует множество крошечных оболочек, предназначенных для спасательных флоппи (!) и других спартанских сред, но похоже, что вы мало интересуетесь ими.
(Что касается инноваций, я должен добавить, что более половины скриптов, которые я использовал для написания сценариев оболочки, теперь Lua скрипты. Другие могут сказать то же самое для Python или Ruby, или в тот же день, Perl или Tcl. Поэтому я считаю, что настоящие инновации - это переход от оболочки для программируемого взаимодействия в командной строке.)
IIRC, Powershell является объектно-ориентированным, тогда как большинство оболочек и утилит unix работают с текстом. В связи с этим Squirrel Shell может вас заинтересовать. Я никогда не использовал его.
Если вы захотите потерять совместимость sh
, вы можете посмотреть на использование языка сценариев, такого как Python или Tcl, в качестве оболочки. rlwrap
может быть очень удобно, если интерпретатор не предоставляет редактирование строк, историю команд, завершение и т.д.
Одна философия относительно оболочек заключается в том, что они должны в первую очередь использоваться для соединения процессов с файлами (вот одна страница, которая поддерживает этот подход), Тем не менее, люди написали очень сложное программное обеспечение, используя их.
Корпуса не намного полезнее, чем Scheme Schell. Вся мощь Схемы в сочетании с возможностью запуска команд Unix и встроенного awk-интерпретатора (написано на Схеме, конечно). Единственный недостаток заключается в том, что для создания на 64-разрядной версии Linux требуется крошечный бит patching.
Это не совсем Bourne-shell, но это другое. Конечно, вам нужно узнать Scheme - bonus!
Если вам нравится ruby, вы можете использовать спешку (ruby-unix shell, а не irb)
см. презентацию здесь
http://www.slideshare.net/adamwiggins/rush-the-ruby-shell-and-unix-integration-library
или официальный сайт, чтобы увидеть больше примеров