Как стать автором
Обновить

Комментарии 20

.Net != C#
Как и JVM != Java

Разумеется. Тогда зачем же себя ограничивать? Можно было бы взять brainfuck для основы — все труЪ-программеры испытали бы немедленный оргазм и сделали Могучий Шелл своей единственной консолью.
Думал в статье будет разбор с кучей примеров. Я недоволен.
Примеры есть в статье "What I Hate About PowerShell". Более того, там есть ссылки на другие публикации, в которых примеров еще больше.
Покажите мне хоть один язык, на который нет хейтовой статьи. Всегда есть нюансы и ошибки, все кто достаточно в него погружается о них знают.

Данный же инструмент отлично решает множество проблем. Сильно проще и быстрее в разработке и поддержке чем многие скриптовые языки.

Плюс, лично я, предпочитаю получить список объектов через Get-ChildItem, а потом уже делать то что мне нужно передавая их по конвееру: отсортировать, отфильтровать, а затем у же перемещать, копировать, изменять или удалять. В данном случае сформировать перечень объектов и применить действие.

Это логичнее и проще при нарезании типовых задач. В вашем примере еще и нужно следить в каком каталоге оно выполняется. Выполнить скрипт посреди дефолтного C:\WINDOWS\system32 было бы печалькой.

зы
ошибку воспроизвести не смог на $host.Version 5.1.19041.1
  • Operators — <> уже заняты под редирект, выкрутились так


  • Escape Character — ` потому что \ в винде уже занято под разделитель файловых путей, а шелл предназначен во многом для работы с файлами


  • If Requires Curly Brackets — не знаю почему. Могу только добавить, что часто есть coding convention чтобы фигурные скобки ставили всегда, для читабельности.


  • Function Definitions — это достаточно часто в скриптовых языках потому, что определение функции это фактически команда добавить функцию в скоуп. Это можно сделать другой командой:


    new-item -Name hello -Value { "Hello" }

  • Function Calls — думаю, так сделано чтобы легко определять свои команды и работать в привычном синтаксисе без лишних символов.


  • Script Syntax Check — автор текста, судя по всему, не знает, что такое поверка синтаксиса — он написал синтаксически правильный код.


  • Lack of Mandatory Variable Declarations — тут я согласен, неплохо бы включать строгий режим который этого не допускает.


  • Scope of Variables — это, наверное, средство предыдущего пункта. Если есть наследование областей видимости, то как отличать доступ к переменной из глобальной области к доступу из локальной с таким же именем — вот и решили, что если есть локальное присваивание это определение новой переменной. Никакого копирования, кстати, не происходит, это совершенно новая переменная. В питоне поступили по другому — для доступа к шлобальному контексту — ключевое слово global, но в функции контекст наследутся но изменять просто нельзя.



Словом, человек с опытом больших статических языков программирования применяет свои привычки к шеллу.

Всё же я не зря потратил свое время на написание этого маленького куска текста — хоть кто-то его прочитал. С некоторыми вашими объяснениями указанных в статье «What I Hate About PowerShell» моментов я вполне согласен. Мог бы продолжить дискуссию, но сейчас я уже не рискну этого делать. Думаю, для вас не составит труда ответить на вопрос «почему». В любом случае, появление единственного стоящего коммента радует.
У нас уже есть VBScript, JScript.

Они не шеллы. Шелл был cmd. И синтаксис похож на него.

Да, это языки. И я спрашиваю, почему, имея в своем арсенале такое количество развитых и давно уже принятых программистским сообществом языков, они решили не брать один из них в качестве основы для своего скриптового языка, а создать свой вариант bash'а? Видимо, им на Windows очень bash'а не хватало.
Принципиальная разница: powershell работает с объектами и возвращает объекты, bash — форматированный текст.
Ещё причины нужны?
Remove-Item * -Force -Recurse -Include name1,name2,name3 -ErrorAction SilentlyContinue

Вы меня извините, но я тут вижу форматированный текст, а не объекты, и как оно там внутри устроено- на объектах, монадах, или у нее там неонка- совершенно не важно.

Языки программирования не очень удобны при работе из терминала. Всё же задачи совсем разные. Другое дело, что в пш с ключами команд несколько перемудрили — лучше бы больше ориентировались на конвеер.

Пайплайн довольно сильный у PS на самом деле. А учитывая, что можно писать свои команды, которые так же могут получать и разбирать вводные данные по пайплайну — так вообще красота.
Насчёт объектов — если активно использовать PS, то объекты — это очень полезная вещь, если знать "как их готовить".
Да, это не batch и не bash, тут немного другая философия, но это Win, что поделать, когда под капотом крутятся-вертятся WMI-объекты

Шелл — это весьма специфический скриптоый язык. Вероятно так сделали, чтобы было привычнее админам, которые работали с cmd, command.com, bash и т.д.


Можете для сравнения посмотреть, на попытку сделать шелл на основе питона — ipython — там, например, чтобы вызвать исполнимый файл надо писать! перед командой

Был когда-то такой 4DOS. Уж он то с CMD был более чем совместим. Но не срослось почему-то.
-Include
Specifies, as a string array, an item or items that this cmdlet includes in the operation.

Баш-то чем не угодил? Автору хотелось бы интерфейс командной строки на базе ТикТок что ли?
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории