Вопрос

Я использую bash и делаю это уже более десяти лет, но иногда мне интересно, произошли ли какие-либо существенные новые разработки в мире оболочек Linux.

Несколько лет назад Microsoft выпустила PowerShell, который показался очень интересным.Есть ли какие-либо аналогичные инновации в оболочках Linux?

Это было полезно?

Решение

Вы можете запустить PowerShell в Linux через Паш.Он использует Mono так же, как PowerShell использует .NET.

Другие советы

Ты понимаешь bash 4 совсем недавно был выпущен с множеством новых функций и языковых дополнений?

  • Варианты оболочки globstar (**/foo) выполняет рекурсивный поиск, dirspell исправляет опечатки при раскрытии пути.
  • Ассоциативные массивы преобразуют строки в строки, а не просто числа в строки.
  • А autocd Опция оболочки позволяет изменять каталоги, просто вводя путь к каталогу вместо необходимости вводить 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 имя_загрузочного_файла.

В нашем случае включите -f /opt/bash/loadables/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.

Я думаю, что "оригинальная улучшенная оболочка" - это кш93.bash появился в то время, когда исходный код ksh был проприетарным;если бы тогда ksh был с открытым исходным кодом, возможно, не было бы сочтено необходимым иметь новую оболочку (хотя с FSF мало ли что).ksh стоит изучить, особенно из-за его возможности расширения с помощью модулей C, но это не явная победа над bash.Автодополнение bash явно лучше, и этого может быть достаточно, чтобы сделать bash победителем в целом.В любом случае bash и ksh приложили значительные усилия для сближения, поэтому различия незначительны.

Другая интересная оболочка зш, который пытается быть всем, чем является ksh, но в то же время включает csh.Поскольку я никогда не видел никакого смысла или использования в csh, я не тот человек, который будет защищать zsh.Отмечу одну необычную несовместимость:по умолчанию в zsh переменная $var всегда расширяется до одного токена, даже если он содержит пробелы.Такое поведение несовместимо со всеми другими оболочками, производными от sh, и иногда оно неудобно, но на самом деле оно имеет гораздо больше смысла, чем оригинал, и позволяет сэкономить массу цитирований.

csh была первой оболочкой, в которой было управление заданиями, но, на мой взгляд, ее (и ее преемников) заменили bash и ksh.Писать сценарии никогда не было особенно весело.

Наконец, существует множество крошечных оболочек, предназначенных для спасательных дискет (!) и других спартанских сред, но похоже, что они вас мало интересуют.

(Что касается инноваций, я должен добавить, что более половины скриптов, которые я раньше писал как сценарии оболочки, теперь Луа сценарии.Другие могли бы сказать то же самое о Python или Ruby, а когда-то о Perl или Tcl.Поэтому я думаю, что настоящая инновация — это переход от оболочки к программируемому взаимодействию в командной строке.)

IIRC, Powershell является объектно-ориентированным, тогда как большинство оболочек и утилит Unix работают с текстом.В связи с этим, Беличья скорлупа может вас заинтересовать.Хотя я никогда им не пользовался.

Если ты готов проиграть sh совместимости, вы можете рассмотреть возможность использования языка сценариев, такого как Python или Tcl, в качестве оболочки. rlwrap может быть очень удобно, если интерпретатор не обеспечивает редактирование строк, историю команд, завершение и т. д.

Одна из философий относительно оболочек заключается в том, что их следует использовать в первую очередь только для соединения процессов с файлами (вот одна страница, которая поддерживает этот подход).Тем не менее, люди написали с их помощью удивительно сложное программное обеспечение.

Ракушки не являются более инновационными, чем Схема Шелла.Вся мощь Scheme в сочетании с возможностью запуска команд Unix. и встроенный интерпретатор awk (конечно, написанный на Scheme).Единственный недостаток - нужно немного исправление для сборки на 64-битной Linux.

Это не совсем Bourne-Shell, но это другое.Конечно, вам придется выучить Scheme – бонус!

если вам нравится Ruby, вы можете использовать Rush (оболочка Ruby-Unix, а не IRB)

посмотреть презентацию здесь

http://www.slideshare.net/adamwiggins/rush-the-ruby-shell-and-unix-integration-library

или официальный сайт, чтобы увидеть больше примеров

http://rush.heroku.com/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top