Equivalente Unix di PowerShell?


21

L'ho sempre trovato imbarazzante quando comandi di shell complessi comportano l'analisi dell'output di testo con AWK . Fondamentalmente stiamo convertendo i dati strutturati in testo, quindi analizziamo di nuovo il testo per tornare ai dati strutturati.

PowerShell è una shell di Windows che evita questo problema consentendo di reindirizzare gli oggetti digitati tra i comandi della shell anziché solo il testo.

Esistono shell Unix basate su oggetti anziché su testo, come PowerShell?

Risposte:


24

No, è il contrario. Non ci sono cucchiai ^ H ^ H ^ Dati strutturati. C'è solo testo.

Una grande parte della filosofia Unix si basa sull'idea di emettere testo e accettarlo come input. Potresti prendere in considerazione la lettura di " The Art of Unix Programming ", che ha una bella spiegazione al riguardo.

Non fraintendermi: capisco il tuo punto e so a cosa stai cercando di arrivare. Ci sono cose come gli interpreti interattivi di Ruby e Python, che possono essere usati come shell, ma non sono così amichevoli per le attività di base come lo è Bash. Prova e cambia directory, per esempio.

Inoltre, l'uso di oggetti in una shell non è tutto. Se solo la tua shell lo supporta, su Unix, rimarrai in perdita. Tutti gli strumenti standard di manipolazione del testo Unix dovrebbero essere modificati, come grep, awk, sed, ecc.

Penso che ci sia stato un tentativo di creare qualcosa del genere qualche anno fa, ma non ricordo il nome e non ne ho sentito parlare da molto tempo. Probabilmente non decollerà.


2
È interessante notare che la sostituzione di flussi di testo (o effettivamente, flussi di byte) con flussi di oggetti di dati non andrebbe contro i principi generali formulati nel libro. Sembra persino che giochi meglio con la "regola della rappresentazione". È solo che unix ha scelto i flussi di testo come interfaccia tra i programmi.
Wim Coenen,

1
Ma per "oggetto dati" intendi un vero oggetto Python / Ruby / C ++ o qualcosa di simile a una struttura C?
wzzrd,

3
+1 "Non cercare di piegare il cucchiaio, è impossibile. Invece cerca solo di realizzare la verità ... non c'è cucchiaio." Non è tanto testo come interfaccia, ma flussi di dati come interfaccia. Gli oggetti sono belli per la programmazione, ma a volte diventano una piccola prigione per mettere la tua mente in ...
Avery Payne

2
zsh> bash. La mia opinione, ma davvero se non hai provato zsh dovresti
xenoterracide

2
@WimCoenen, spedendo "dati strutturati" significa che tutti e zia Tillie devono concordare quale sia la "struttura". Anche cose del genere ls(1). Completamente inutile.
vonbrand


4

Esiste un progetto, il cui obiettivo condivide la somiglianza con PowerShell: Hotwire . Combina sh regolare con script Python e ambiente finestra / grafico. Potresti dare un'occhiata.

È basato su una pipeline orientata agli oggetti che puoi estendere con i tuoi oggetti avvolgendo i programmi esistenti o usando le librerie Python.


1
Questo è il progetto che stavo cercando di ricordare il nome! Ultimo impegno nel bagagliaio: due anni fa ...
wzzrd,

4

PowerShell è diventato open-source nel 2016. Da allora sta diventando sempre più multipiattaforma. Il codice sorgente è disponibile su GitHub e quindi sono pacchetti di installazione per numerosi sistemi simili a UNIX.


1

Penso che potresti ottenere la maggior parte di ciò scrivendo un sacco di script interpretati (o compilati), quindi invocandoli all'interno della shell dell'interprete, che restituirà o preserverà i tuoi oggetti e così via se lo desideri.

Puoi farlo in almeno Ruby, Perl, Python, Haskell (ad es. GHCi), JavaScript (ad es. Node.js), Matlab e certamente altre lingue ...


La pipe essendo oggetti significa che puoi fare una valutazione pigra ecc. Quindi, se stai passando una serie di oggetti file in una pipe .. forse ti interessa il nome o la data modificata, ma forse il contenuto. Quali dati passi in JSON? Risposta: dipende. Se il consumatore della pipe estrae i dati, può richiedere i dati giusti. Problema risolto.
Nigel Thorne,

1

Un altro pensiero tre anni dopo: è possibile rappresentare un oggetto con un flusso di testo utilizzando XML o JSON. Preferisco JSON (più semplice) e, in effetti, ci sono progetti là fuori per fornire il classico supporto JSON per le utility * NIX. Ad esempio: https://github.com/step-/JSON.awk

Un problema con l'utilizzo di un modello a oggetti per i programmi classici * NIX come AWK è che in realtà non hanno il supporto OO. Ad esempio, mentre AWK ha array associativi, gli array non sono multidimensionali (ogni elemento in un array AWK deve essere un numero o una stringa; un array non può essere un oggetto array in AWK).


Clojure offre edn che consente a tutti i tipi di dati digitati di essere serializzati / deserializzati mentre JSON è limitato.
Mario,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.