Equivalente ao Unix do PowerShell?

21

Eu sempre achei estranho quando comandos complexos do shell envolvem a análise da saída de texto com o AWK . Basicamente, estamos convertendo dados estruturados em texto e analisando o texto novamente para voltar aos dados estruturados.

O PowerShell é um shell do Windows que evita esse problema, permitindo que você canalize objetos digitados entre comandos do shell em vez de apenas texto.

Existem shells do Unix baseados em objetos e não em texto, como o PowerShell?

Wim Coenen
fonte

Respostas:

24

Não, é o contrário. Não há dados estruturados. Existe apenas texto.

Grande parte da filosofia do Unix é baseada na idéia de produzir texto e aceitar texto como entrada. Você pode querer ler " A Arte da Programação Unix ", que tem uma boa explicação sobre isso.

Não me interpretem mal: entendo seu ponto de vista e sei o que você está tentando entender. Existem coisas como os intérpretes interativos de Ruby e Python, que podem ser usados ​​como shell, mas eles não são tão amigáveis ​​para tarefas básicas quanto o Bash. Tente alterar o diretório, por exemplo.

Além disso, o uso de objetos em um shell não é tudo isso. Se apenas o seu shell suportar isso, no Unix, você estará perdido. Todas as ferramentas padrão de manipulação de texto do Unix teriam que ser alteradas, como grep, awk, sed, etc.

Acho que houve uma tentativa de criar algo assim há alguns anos, mas não me lembro do nome e não ouvi falar dele há muito tempo. Provavelmente não vai decolar.

wzzrd
fonte
2
Curiosamente, a substituição de fluxos de texto (ou, na verdade, fluxos de bytes) por fluxos de objetos de dados não contraria os princípios gerais formulados no livro. Parece até jogar melhor com a "regra da representação". É que o unix escolheu fluxos de texto como a interface entre os programas.
Wm Coenen
1
Mas por 'objeto de dados' você quer dizer um objeto Python / Ruby / C ++ real ou algo parecido com uma estrutura C?
Wzzrd 12/08/10
3
+1 "Não tente dobrar a colher, isso é impossível. Em vez disso, tente apenas perceber a verdade ... não há colher." Não é tanto o texto como uma interface, mas fluxos de dados como uma interface. Objetos são agradáveis para a programação, mas às vezes eles se tornam um pouco pequena prisão para colocar sua mente em ...
Avery Payne
2
zsh> bash. Minha opinião, mas realmente, se você ainda não experimentou zsh você deve
xenoterracide
2
@WimCoenen, enviar "dados estruturados" significa que todos e tia Tillie precisam concordar com o que é a "estrutura". Até coisas do tipo ls(1). Completamente inútil.
vonbrand
10

Na verdade, existe um projeto chamado Pash que visa implementar o PowerShell (em cima do Mono), mas parece ter parado.

Mark Probst
fonte
2
hackers Unix gastar tempo em projetos microsoft-com base = que é a formiga e da cigarra tudo de novo
ixtmixilix
4
Estamos de volta dos mortos: github.com/JayBazuzi/Pash , twitter.com/PashProject
Jay Bazuzi
4

Há um projeto, cujo objetivo compartilha a semelhança com o PowerShell: Hotwire . Combina sh regular com scripts python e janela / ambiente gráfico. Você poderia dar uma olhada.

É baseado no pipeline orientado a objetos que você pode estender com seus próprios objetos, agrupando programas existentes ou usando bibliotecas Python.

elmarco
fonte
1
Esse é o projeto que eu estava tentando lembrar do nome! Última confirmação no porta-malas: há dois anos ...
wzzrd 12/08
4

O PowerShell tornou-se de código aberto em 2016. Desde então, está se tornando cada vez mais multiplataforma. O código fonte está disponível no GitHub e também os pacotes de instalação para vários sistemas semelhantes ao UNIX.

Tomasz
fonte
1

Eu acho que você poderia conseguir a maior parte disso escrevendo vários scripts interpretados (ou compilados) e depois os chamando no shell do intérprete, que retornará ou preservará seus objetos e assim por diante, se desejar.

Você pode fazer isso em pelo menos Ruby, Perl, Python, Haskell (por exemplo, GHCi), JavaScript (por exemplo, node.js), Matlab e certamente em outros idiomas ...

Kevin Cantu
fonte
O pipe sendo objetos significa que você pode fazer uma avaliação lenta etc. Então, se você estiver passando um conjunto de objetos de arquivo por um pipe .. talvez você se preocupe com o nome ou a data da modificação, mas talvez com o conteúdo. Quais dados você passa no JSON? Resposta: depende. Se o consumidor do tubo extrai dados, ele pode solicitar os dados corretos. Problema resolvido.
Nigel Thorne
1

Outro pensamento três anos depois: é possível representar um objeto com um fluxo de texto usando XML ou JSON. Eu prefiro o JSON (mais simples) e, de fato, existem projetos por aí para dar suporte clássico ao JSON dos utilitários * NIX. Por exemplo: https://github.com/step-/JSON.awk

Um problema com o uso de um modelo de tipo de objeto para programas clássicos do NIX * como o AWK é que eles realmente não têm suporte a OO. Por exemplo, enquanto o AWK possui matrizes associativas, as matrizes não são multidimensionais (cada elemento em uma matriz AWK deve ser um número ou uma sequência; uma matriz não pode ser um objeto de matriz no AWK).

samiam
fonte
O Clojure oferece edn, que permite que todos os tipos de dados digitados sejam serializados / desserializados enquanto o JSON é limitado.
19714 Mario Mario