
Мне всегда было неловко, когда сложные команды оболочки включали анализ текстового вывода с помощьюАВК. По сути, мы преобразуем структурированные данные в текст, а затем снова анализируем текст, чтобы получить структурированные данные.
PowerShell— это оболочка Windows, которая позволяет обойти эту проблему, позволяя передавать между командами оболочки введенные объекты, а не просто текст.
Существуют ли оболочки Unix, основанные на объектах, а не на тексте, как PowerShell?
решение1
Нет, все наоборот. Нет spoon^H^H^Hструктурированных данных. Есть только текст.
Большая часть философии Unix основана на идее вывода текста и принятия текста в качестве входных данных. Возможно, вам стоит почитать "Искусство программирования Unix", в котором есть хорошее объяснение по этому поводу.
Не поймите меня неправильно: я понимаю вашу точку зрения и знаю, что вы пытаетесь получить. Есть такие вещи, как интерактивные интерпретаторы Ruby и Python, которые можно использовать как оболочку, но они не так дружелюбны для базовых задач, как Bash. Попробуйте сменить каталог, например.
Также использование объектов в оболочке — это еще не все. Если только вашоболочкаподдерживает это, на Unix вы бы растерялись. Все стандартные инструменты для работы с текстом Unix пришлось бы изменить, например grep, awk, sed и т. д.
Я думаю, что была попытка создать что-то подобное несколько лет назад, но я не помню названия и давно о нем не слышал. Вероятно, это не взлетит.
решение2
На самом деле есть проект под названиемПашцелью которого является реализация PowerShell (поверх Mono), но, похоже, проект застопорился.
решение3
PowerShell стал open-source в 2016 году. С тех пор он становится все более и более многоплатформенным. Исходный код доступен наGitHubа также установочные пакеты для ряда UNIX-подобных систем.
решение4
Я думаю, что большую часть этого можно было бы сделать, написав кучу интерпретируемых (или скомпилированных) скриптов, а затем вызывая их в оболочке интерпретатора, которая вернет или сохранит ваши объекты и так далее, если вы этого захотите.
Это можно сделать как минимум на Ruby, Perl, Python, Haskell (например, GHCi), JavaScript (например, node.js), Matlab и, конечно же, на других языках...