Équivalent Unix de PowerShell?

21

Je l'ai toujours trouvé gênant lorsque les commandes de shell complexes impliquent l'analyse de la sortie de texte avec AWK . Fondamentalement, nous convertissons des données structurées en texte, puis analysons à nouveau le texte pour revenir aux données structurées.

PowerShell est un shell Windows qui évite ce problème en vous permettant de diriger des objets dactylographiés entre des commandes shell au lieu de simplement du texte.

Existe-t-il des shells Unix basés sur des objets plutôt que sur du texte, comme PowerShell?

Wim Coenen
la source

Réponses:

24

Non, c'est l'inverse. Il n'y a pas de données structurées ^ H ^ H ^ H. Il n'y a que du texte.

Une grande partie de la philosophie Unix est basée sur l'idée de sortir du texte et d'accepter du texte en entrée. Vous voudrez peut-être envisager de lire " L'art de la programmation Unix ", qui a une belle explication à ce sujet.

Ne vous méprenez pas: je comprends votre point et je sais ce que vous essayez de faire. Il y a des choses comme les interprètes interactifs de Ruby et Python, qui peuvent être utilisés comme un shell, mais ils ne sont pas aussi conviviaux pour les tâches de base que Bash. Essayez de changer de répertoire, par exemple.

De plus, utiliser des objets dans un shell n'est pas tout cela. Si seulement votre shell le supportait, sous Unix, vous seriez à perte. Tous les outils de manipulation de texte Unix standard devraient être modifiés, comme grep, awk, sed, etc.

Je pense qu'il y a eu une tentative de créer quelque chose comme ça il y a quelques années, mais je ne me souviens pas du nom et je n'en ai pas entendu parler depuis longtemps. Ça ne va probablement pas décoller.

wzzrd
la source
2
Fait intéressant, le remplacement des flux de texte (ou en fait, des flux d'octets) par des flux d'objets de données ne serait pas contraire aux principes généraux formulés dans le livre. Il semble même mieux jouer avec la "règle de représentation". C'est juste qu'Unix a choisi les flux de texte comme interface entre les programmes.
Wim Coenen
1
Mais par «objet de données», voulez-vous dire un véritable objet Python / Ruby / C ++ ou quelque chose comme une structure C?
wzzrd
3
+1 "N'essayez pas de plier la cuillère, c'est impossible. Essayez plutôt de réaliser la vérité ... il n'y a pas de cuillère." Ce n'est pas tant du texte en tant qu'interface, mais des flux de données en tant qu'interface. Les objets sont sympas pour la programmation, mais parfois ils deviennent une toute petite prison pour mettre votre esprit dans ...
Avery Payne
2
zsh> bash. Mon avis mais vraiment si vous n'avez pas essayé zsh vous devriez
xenoterracide
2
@WimCoenen, l'expédition autour de «données structurées» signifie que tout le monde et tante Tillie doivent s'entendre sur la «structure». Même des trucs comme ls(1). Complètement inutile.
vonbrand
10

Il y a en fait un projet appelé Pash qui vise à implémenter PowerShell (en plus de Mono), mais il semble avoir calé.

Mark Probst
la source
2
les pirates unix passent du temps sur des projets basés sur microsoft = c'est à nouveau la fourmi et la sauterelle
ixtmixilix
4
Nous sommes de retour d'entre les morts: github.com/JayBazuzi/Pash , twitter.com/PashProject
Jay Bazuzi
4

Il y a un projet, dont l'objectif partage la similitude avec PowerShell: Hotwire . Il combine sh normal avec des scripts python et un environnement fenêtre / graphique. Vous pourriez lui donner un coup d'oeil.

Il est basé sur un pipeline orienté objet que vous pouvez étendre avec vos propres objets en encapsulant des programmes existants ou en utilisant des bibliothèques Python.

elmarco
la source
1
C'est le projet dont j'essayais de me rappeler le nom! Dernier commit dans le coffre: il y a deux ans ...
wzzrd
4

PowerShell est devenu open-source en 2016. Depuis lors, il devient de plus en plus multi-plateforme. Le code source est disponible sur GitHub et sont donc des packages d'installation pour un certain nombre de systèmes de type UNIX.

Tomasz
la source
1

Je pense que vous pourriez accomplir la plupart de cela en écrivant un tas de scripts interprétés (ou compilés), puis en les invoquant dans le shell de l'interpréteur, qui retournera ou préservera vos objets et ainsi de suite si vous le souhaitez.

Vous pouvez le faire dans au moins Ruby, Perl, Python, Haskell (par exemple, GHCi), JavaScript (par exemple, node.js), Matlab et certainement d'autres langues ...

Kevin Cantu
la source
Le tuyau étant des objets, vous pouvez faire une évaluation paresseuse, etc. Donc, si vous passez un ensemble d'objets de fichier dans un tuyau ... peut-être que vous vous souciez du nom ou de la date modifiée, mais peut-être du contenu. Quelles données transmettez-vous dans JSON? Réponse: cela dépend. Si le consommateur du tuyau tire des données, il peut demander les bonnes données. Problème résolu.
Nigel Thorne
1

Une autre réflexion trois ans plus tard: il est possible de représenter un objet avec un flux de texte en utilisant XML ou JSON. Je préfère JSON (plus simple), et, en effet, il existe des projets pour fournir le support JSON des utilitaires * NIX classiques. Par exemple: https://github.com/step-/JSON.awk

Un problème avec l'utilisation d'un modèle de type objet pour les programmes NIX classiques comme AWK est qu'ils ne prennent vraiment pas en charge OO. Par exemple, alors qu'AWK possède des tableaux associatifs, les tableaux ne sont pas multidimensionnels (chaque élément d'un tableau AWK doit être un nombre ou une chaîne; un tableau n'est pas autorisé à être un objet tableau dans AWK).

samiam
la source
Clojure propose edn qui permet de sérialiser / désérialiser toutes sortes de données typées alors que JSON est limité.
Mario