
Siempre me ha resultado incómodo cuando comandos complejos de shell implican analizar la salida de texto conAWK. Básicamente, convertimos datos estructurados en texto y luego analizamos el texto nuevamente para volver a los datos estructurados.
Potencia Shelles un shell de Windows que evita ese problema al permitirle canalizar objetos escritos entre comandos del shell en lugar de solo texto.
¿Existen shells de Unix que estén basados en objetos en lugar de texto, como PowerShell?
Respuesta1
No, es al revés. No hay datos estructurados tipo cuchara^H^H^H. Sólo hay texto.
Una gran parte de la filosofía Unix se basa en la idea de generar texto y aceptar texto como entrada. Quizás quieras considerar leer "El arte de la programación Unix", que tiene una bonita explicación sobre esto.
No me malinterpretes: entiendo tu punto y sé a dónde intentas llegar. Hay cosas como los intérpretes interactivos de Ruby y Python, que se pueden usar como shell, pero no son tan amigables para tareas básicas como lo es Bash. Intente cambiar de directorio, por ejemplo.
Además, usar objetos en un shell no es todo eso. Si solo tucaparazónadmite esto, en Unix, estarías perdido. Se tendrían que modificar todas las herramientas estándar de manipulación de texto de Unix, como grep, awk, sed, etc.
Creo que hubo un intento de crear algo como esto hace unos años, pero no recuerdo el nombre y no he oído hablar de ello en mucho tiempo. Probablemente no despegue.
Respuesta2
En realidad hay un proyecto llamadopashque tiene como objetivo implementar PowerShell (además de Mono), pero parece haberse estancado.
Respuesta3
PowerShell se convirtió en código abierto en 2016. Desde entonces, se ha vuelto cada vez más multiplataforma. El código fuente está disponible enGitHuby también lo son los paquetes de instalación para varios sistemas tipo UNIX.
Respuesta4
Creo que podría lograr la mayor parte de eso escribiendo un montón de scripts interpretados (o compilados) y luego invocándolos dentro del shell del intérprete, que devolverá o preservará sus objetos, etc., si lo desea.
Puedes hacer esto al menos en Ruby, Perl, Python, Haskell (por ejemplo, GHCi), JavaScript (por ejemplo, node.js), Matlab y, ciertamente, en otros lenguajes...