Uniksowy odpowiednik PowerShell?


21

Zawsze wydawało mi się to niewygodne, gdy złożone polecenia powłoki wymagają analizowania tekstu za pomocą AWK . Zasadniczo przekształcamy dane strukturalne na tekst, a następnie ponownie analizujemy tekst, aby wrócić do danych strukturalnych.

PowerShell to powłoka systemu Windows, która pozwala uniknąć tego problemu, pozwalając na pisanie obiektów między poleceniami powłoki zamiast tekstu.

Czy są jakieś powłoki uniksowe oparte na obiektach zamiast tekstów, takie jak PowerShell?

Odpowiedzi:


24

Nie, jest na odwrót. Brak danych łyżkowych ^ H ^ H ^ Dane strukturalne. Jest tylko tekst.

Duża część filozofii uniksowej opiera się na idei wyprowadzania tekstu i akceptowania tekstu jako danych wejściowych. Warto rozważyć przeczytanie „ The Art of Unix Programming ”, które zawiera ładne wyjaśnienie na ten temat.

Nie zrozum mnie źle: rozumiem twój punkt widzenia i wiem, do czego dążysz. Są takie rzeczy, jak interaktywne interpretatory Ruby i Python, które mogą być używane jako powłoka, ale nie są tak przyjazne dla podstawowych zadań jak Bash. Spróbuj na przykład zmienić katalog.

Ponadto używanie obiektów w powłoce to nie wszystko. Jeśli tylko twoja powłoka to obsługuje, na Unixie byłbyś na straty. Wszystkie standardowe narzędzia do manipulacji tekstem w Uniksie musiałyby zostać zmienione, takie jak grep, awk, sed itp.

Myślę, że kilka lat temu podjęto próbę stworzenia czegoś takiego, ale nie pamiętam nazwy i od dawna o niej nie słyszałem. Prawdopodobnie nie wystartuje.


2
Co ciekawe, zastąpienie strumieni tekstowych (lub w rzeczywistości strumieni bajtów) strumieniami obiektów danych nie byłoby sprzeczne z ogólnymi zasadami sformułowanymi w książce. Wydaje się nawet, że gra lepiej z „zasadą reprezentacji”. Po prostu Unix wybrał strumienie tekstu jako interfejs między programami.
Wim Coenen,

1
Ale przez „obiekt danych” masz na myśli rzeczywisty obiekt Python / Ruby / C ++ lub coś w rodzaju struktury C?
wzzrd

3
+1 „Nie próbuj zginać łyżki, to niemożliwe. Zamiast tego spróbuj zrozumieć prawdę ... nie ma łyżki.” To nie tyle interfejs tekstowy, co interfejs, ale strumienie danych jako interfejs. Obiekty są miłe w programowaniu, ale czasami stają się małym więzieniem, w które można wpaść ...
Avery Payne

2
zsh> bash. Moja opinia, ale naprawdę, jeśli nie próbowałeś zsh, powinieneś
ksenoterracid

2
@WimCoenen, przesyłka wokół „danych strukturalnych” oznacza, że ​​wszyscy i ciotka Tillie muszą uzgodnić, co to jest „struktura”. Nawet rzeczy takie jak ls(1). Kompletnie bezużyteczny.
vonbrand


4

Istnieje projekt, którego cel ma podobne podobieństwo do programu PowerShell: Hotwire . Łączy zwykłe sh z skryptami Pythona i środowiskiem okienno-graficznym. Możesz rzucić na to okiem.

Opiera się na potoku obiektowym , który można rozszerzyć o własne obiekty, zawijając istniejące programy lub używając bibliotek Python.


1
To projekt, który starałem się zapamiętać. Ostatnie zatwierdzenie w bagażniku: dwa lata temu ...
wzzrd

4

PowerShell stał się open-source w 2016 roku. Od tego czasu robi się coraz bardziej wieloplatformowy. Kod źródłowy jest dostępny na GitHub, a więc są pakiety instalacyjne dla wielu systemów typu UNIX.


1

Sądzę, że większość tego możesz osiągnąć, pisząc kilka zinterpretowanych (lub skompilowanych) skryptów, a następnie wywołując je w powłoce interpretera, która zwróci lub zachowa twoje obiekty i tak dalej, jeśli chcesz.

Możesz to zrobić przynajmniej w Ruby, Perl, Python, Haskell (np. GHCi), JavaScript (np. Node.js), Matlab i na pewno w innych językach ...


Rura będąca obiektami oznacza, że ​​możesz dokonywać leniwej oceny itp. Więc jeśli przekazujesz zestaw obiektów pliku w dół rury ... może zależy Ci na nazwie lub zmodyfikowanej dacie, ale może zawartości. Jakie dane przekazujesz w JSON? Odpowiedź: to zależy. Jeśli konsument potoku pobiera dane, może zażądać odpowiednich danych. Problem rozwiązany.
Nigel Thorne

1

Kolejna myśl trzy lata później: możliwe jest reprezentowanie obiektu za pomocą strumienia tekstowego za pomocą XML lub JSON. Wolę JSON (prościej) i rzeczywiście istnieją projekty zapewniające klasyczną obsługę * NIX narzędzi JSON. Na przykład: https://github.com/step-/JSON.awk

Jednym z problemów z użyciem modelu typu obiektowego w klasycznych programach * NIX, takich jak AWK, jest to, że tak naprawdę nie mają one obsługi OO. Na przykład, podczas gdy AWK ma tablice asocjacyjne, tablice nie są wielowymiarowe (każdy element w tablicy AWK musi być liczbą lub łańcuchem; tablica nie może być obiektem tablicy w AWK).


Clojure oferuje edn, który pozwala na serializację / deserializację wszelkiego rodzaju wpisanych danych, podczas gdy JSON jest ograniczony.
Mario,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.