it-swarm-pt.com

Equivalente Unix do PowerShell?

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

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

Existe algum shell Unix que seja baseado em objeto em vez de texto, como o PowerShell?

21
Wim Coenen

Não, é o contrário. Não há dados estruturados de ^ H ^ H ^ H colher. Existe apenas texto.

Uma grande parte da filosofia Unix é baseada na ideia de enviar texto e aceitar texto como entrada. Você pode querer considerar a leitura de " The Art of Unix Programming ", que tem uma bela explicação sobre isso.

Não me entenda mal: eu entendo o que você quer dizer e sei onde você está tentando chegar. Existem coisas como os interpretadores interativos de Ruby e Python, que podem ser usados ​​como um Shell, mas eles não são tão amigáveis ​​para tarefas básicas quanto o Bash. Tente e altere o diretório, por exemplo.

Além disso, usar objetos em um Shell não é tudo isso. Se apenas o seu Shell suporta isso, no Unix, você não teria. 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 alguns anos atrás, mas não me lembro o nome e não ouço falar dele há muito tempo. Provavelmente não vai decolar.

24
wzzrd

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

10
Mark Probst

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

4
user147505

Há um projeto, cujo objetivo é semelhante ao PowerShell: Hotwire . Ele combina sh regular com python e ambiente de janela/gráfico. Você poderia dar uma olhada nele.

É baseado em pipeline orientado a objetos que você pode estender com seus próprios objetos envolvendo programas existentes ou usando Python).

4
elmarco

Eu acho que você poderia realizar a maior parte disso escrevendo um monte de scripts interpretados (ou compilados) e, em seguida, invocando-os no Shell do interpretador, que retornará ou preservará seus objetos e assim por diante, se desejar.

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

1
Kevin Cantu

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

Um problema com o uso de um modelo de tipo de objeto para programas * NIX clássicos como AWK é que eles realmente não têm suporte para OO. Por exemplo, embora AWK tenha matrizes associativas, as matrizes não são múltiplas -dimensional (cada elemento em uma matriz AWK deve ser um número ou uma string; uma matriz não pode ser um objeto de matriz em AWK).

1
samiam