Unix еквівалент PowerShell?


21

Мені завжди було незручно, коли складні команди оболонки передбачають розбір тексту з AWK . В основному ми перетворюємо структуровані дані в текст, потім знову аналізуємо текст, щоб повернутися до структурованих даних.

PowerShell - це оболонка Windows, яка дозволяє уникнути цієї проблеми, дозволяючи передавати об'єкти між командами оболонки, а не просто текстом.

Чи є оболонки Unix, які є об'єктними, а не текстовими, як PowerShell?

Відповіді:


24

Ні, це навпаки. Немає ложки ^ Н ^ Н ^ Структуровані дані. Є лише текст.

Значна частина філософії Unix заснована на ідеї виведення тексту та прийнятті тексту як вхідного. Ви можете подумати про те, щоб прочитати " Мистецтво програмування Unix ", де є приємне пояснення цього.

Не зрозумійте мене неправильно: я розумію вашу думку, і я знаю, що ви намагаєтесь досягти. Є такі речі, як інтерактивні інтерпретатори Ruby і Python, які можна використовувати як оболонку, але вони не такі дружні для основних завдань, як Bash. Спробуйте, наприклад, змініть каталог.

Також використання об'єктів у оболонці - це не все. Якби тільки ваша оболонка підтримувала це, на Unix ви б втратили збиток. Усі стандартні інструменти для обробки тексту Unix повинні були бути змінені, наприклад, grep, awk, sed тощо.

Я думаю, що була спроба створити щось подібне кілька років тому, але я не можу запам'ятати ім'я, і ​​я не чув про нього давно. Мабуть, не зніматиметься.


2
Цікаво, що заміна текстових потоків (або власне потоків байтів) потоками об'єктів даних не суперечить загальним принципам, сформульованим у книзі. Навіть, здається, краще грати з "правилом представництва". Просто Unix обрав текстові потоки як інтерфейс між програмами.
Вім Коен

1
Але під "об'єктом даних" ви маєте на увазі фактичний об'єкт Python / Ruby / C ++ або щось на зразок структури C?
wzzrd

3
+1 "Не намагайтеся зігнути ложку, це неможливо. Натомість лише намагайтеся усвідомити правду ... ложки немає". Це не стільки текст як інтерфейс, а потоки даних, як інтерфейс. Об'єкти приємні для програмування, але іноді вони стають трохи крихітною в'язницею, щоб поставити свій розум у ...
Avery Payne

2
zsh> bash. Моя думка, але насправді, якщо ви ще не пробували zsh, вам слід
xenoterracide

2
@WimCoenen, перевезення навколо "структурованих даних" означає, що всі і тітка Тіллі повинні погодитися, що таке "структура". Навіть такі речі, як ls(1). Зовсім марно.
vonbrand


4

Є проект, мета якого поділяє схожість з PowerShell: Hotwire . Він поєднує звичайний ш з сценарієм пітона та віконним / графічним середовищем. Ви могли б це подивитися.

Він заснований на об'єктно-орієнтованому конвеєрі, який ви можете розширити власними об'єктами, загортаючи існуючі програми або використовуючи бібліотеки Python.


1
Це той проект, який я намагався запам'ятати ім'я! Останній
вчинок

4

PowerShell став відкритим кодом у 2016 році. З тих пір він набуває все більше і більше платформ. Вихідний код доступний на GitHub, тому встановлюються пакети для кількох UNIX-подібних систем.


1

Я думаю, ви могли б досягти більшої частини цього, написавши купу інтерпретованих (або складених) скриптів, а потім викликати їх у оболонці інтерпретатора, яка поверне або збереже ваші об'єкти тощо, якщо ви хочете.

Ви можете зробити це принаймні в Ruby, Perl, Python, Haskell (наприклад, GHCi), JavaScript (наприклад, node.js), Matlab і, звичайно, іншими мовами ...


Об'єкти труби означають, що ви можете ледаче оцінювати і т. Д. Тож, якщо ви передаєте набір файлових об’єктів вниз по трубі .. можливо, ви дбаєте про ім’я або модифіковану дату, але можливо вміст. Які дані ви передаєте в JSON? Відповідь: це залежить. Якщо споживач труби витягує дані, він може запитати потрібні дані. Проблема вирішена.
Найджел Торн

1

Інша думка через три роки: Можна зобразити об’єкт текстовим потоком за допомогою XML або JSON. Я віддаю перевагу JSON (простіший), і, дійсно, є проекти, щоб надати класичну * NIX-утиліти JSON підтримку. Наприклад: https://github.com/step-/JSON.awk

Одна з проблем використання моделі об’єктного типу для класичних програм * NIX, таких як AWK, полягає в тому, що вони дійсно не мають підтримки OO. Наприклад, хоча AWK має асоціативні масиви, масиви не є багатовимірними (кожен елемент масиву AWK повинен бути числом або рядком; масив не може бути об'єктом масиву в AWK).


Clojure пропонує edn, який дозволяє серіалізувати / десеріалізувати всі види введених даних, поки JSON обмежений.
Маріо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.