Pull to refresh

Comments 20

Разумеется. Тогда зачем же себя ограничивать? Можно было бы взять 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.

Баш-то чем не угодил? Автору хотелось бы интерфейс командной строки на базе ТикТок что ли?
UFO just landed and posted this here
UFO just landed and posted this here
Sign up to leave a comment.

Articles