2009-06-01 13 views
27

Uso bash, y lo he hecho durante más de una década, pero ocasionalmente me pregunto si ha habido nuevos desarrollos significativos en el mundo de los shells de Linux.¿Un mejor shell de Linux?

Hace unos años, Microsoft lanzó PowerShell, que parecía muy interesante. ¿Hay alguna innovación comparable en Linux shells?

+9

¿Qué características extrañas en bash vs están disponibles en otras conchas que consideras innovadoras? Más importante aún, ¿ves características que crees que te ayudarían a hacer lo que está escrito? P.ej. desde mi punto de vista, bash es una interfaz de línea de comando para acceder a los recursos del sistema operativo, desde ese punto de vista, ¿qué funcionalidad te falta? – stefanB

+0

Quizás es una manera de mantenerse dentro de la filosofía de Unix de usar herramientas pequeñas que hacen cosas muy específicas (en lugar de herramientas grandes que hacen todo mal). –

+2

esta es una lata de lombrices ... ábrala con cuidado ... – sybreon

Respuesta

6

Puede ejecutar PowerShell en Linux a través del Pash. Utiliza Mono del modo en que PowerShell usa .NET.

8

Echaré un vistazo a zsh o fishshell.

+0

Una consideración sobre zsh y fishshell es que no podemos usarla en el trabajo. Y no parezco estar solo. Así que, aunque son agradables, no son tan valiosos como bash en el lugar de trabajo, a menos que puedas elegir por ti mismo. –

+5

Parece que cambiar las conchas sería fácil. No tiene que tenerlo como shell de inicio de sesión, puede ejecutarlo una vez que haya iniciado sesión. – stimms

6

Creo que el "shell original mejorado" es ksh93. bash entró en existencia en un momento en que el código fuente ksh era propietario; si ksh hubiera sido de código abierto entonces, podría no haberse considerado necesario tener un nuevo caparazón (aunque con el FSF nunca se sabe). ksh vale la pena estudiarlo, especialmente por su capacidad de extenderse a través de módulos C, pero no es una victoria clara sobre bash. El autocompletado de bash es claramente superior, lo que puede ser suficiente para hacer que bash sea una victoria en general. En cualquier caso, bash y ksh han hecho un esfuerzo considerable para converger, por lo que las diferencias son menores.

El otro shell interesante es zsh, que intenta ser todo lo que es ksh y también incluye csh. Como nunca vi ningún punto o uso para csh, no soy la persona adecuada para abogar por zsh. Señalaré una incompatibilidad inusual: por defecto, en zsh una variable $varsiempre se expande a un único token, incluso si contiene espacios. Este comportamiento es incompatible con todas las otras shells derivadas de sh, y ocasionalmente es inconveniente, pero realmente tiene mucho más sentido que el original, y ahorra un montón de citas.

csh fue el primer shell en tener control de trabajo, pero en mi opinión (y sus sucesores) ha sido reemplazado por bash y ksh. Nunca fue divertido escribir scripts.

Finalmente, hay muchas pequeñas conchas diseñadas para los discos de rescate (!) Y otros entornos Spartan, pero parece que tienes poco interés en eso.

(En materia de innovación, debo añadir que más de la mitad de los scripts que solía escribir como scripts de shell ahora son Lua. Otros podrían decir lo mismo de Python o Ruby, o de vuelta en el día, Perl o Tcl. Así que creo que la verdadera innovación es la migración desde el shell para la interacción programable en la línea de comandos.)

+1

ksh (o pdksh) es muy fácil de hackear, de hecho, puede vincularlo con el mismo editor de líneas y la biblioteca de autocompletado ese bash usa. Lo que no va a obtener son todas las extensiones de GNU más allá de POSIX (es decir, matrices asociativas en bash 4.0). Con cualquier shell, es fácil cambiar el analizador/gramática para usar un lenguaje moderno en la línea de comandos. Si buscas en google "lenguaje de programación azul", verás lo fácil que es caer en bash. –

3

IIRC, Powershell está orientado a objetos, mientras que la mayoría de las shells y utilidades de Unix operan en texto. En ese sentido, Squirrel Shell podría interesarte. Aunque nunca lo he usado.

20

¿Sabía que bash 4 ha sido lanzado recientemente con un montón de nuevas funciones y adiciones de idiomas?

  • opciones Shell globstar (**/foo) hace una búsqueda recursiva, dirspell correcciones de errores tipográficos durante la expansión ruta.
  • Conjuntos asociativos, cadenas de mapa para cadenas, en lugar de simplemente números para cadenas.
  • La opción de shell autocd permite cambiar directorios simplemente escribiendo la ruta del directorio en lugar de tener que poner cd al frente.
  • Coprocesses
  • &>> y |& operadores de redirección que redirigen ambos stdout y stderr
  • Cargas de adiciones a órdenes internas existentes para mejorar la comodidad de script.

Salida:

3

Si ’ está dispuesto a pierda la compatibilidad con sh, podría usar un lenguaje de scripts como Python o Tcl como su caparazón. rlwrap puede ser muy útil si el intérprete no proporciona edición de línea, historial de comandos, finalización, etc.

Una de las filosofías de las shells es que solo deben usarse principalmente para conectar procesos con archivos (here is one page that espouses that approach). Dicho esto, la gente ha escrito un software notablemente complejo usándolos.

7

Una de las características menos promocionadas de Bash (y varias otras shells) es la capacidad de escribir sus propias instrucciones cargables, y hacer que el shell las ejecute como construcciones internas.

digamos que se escribe el cargable 'on' .. y que desea que funcione de esta manera:

on node 123 run some command 
on class nodes run some command 
on all nodes run some command 

... etc ..

Puede seguir ejemplos sencillos sobre cómo escribir un cargable, a continuación, active como una fiesta construida en medio de permitir -f/ruta/a/cargable loadable_name

lo tanto, en nuestro caso, permiten -f/opt/bash/cargables/ON en

... en tu bashrc y lo tienes.

Por lo tanto, si desea que bash interprete su nuevo y sofisticado idioma de forma nativa, debería escribir un nombre cargable llamado 'use' o 'switch_to', luego modifique el analizador para cargar una gramática/tiempo de ejecución diferente si una determinada variable de entorno conjunto.

es decir .:

#/bin/bash 

switch_to my-way-cool-language 

funkyfunc Zippy(int p) [[ 
    jive.wassup(p) ]] 

mayoría de las personas son no va a querer cortar su cáscara, sin embargo. Quería señalar que existen instalaciones para tomar Bash y hacerlo de la manera que lo desee, sin tocar demasiado el código central.

Consulte/path-to-bash-source/examples/loadables, es posible que pueda conseguir que vuele en su trabajo, ya que todavía está utilizando Bash.

+2

Un buen ejemplo del poder de esto es René Rebe [Lua Bash] (http://freshmeat.net/projects/luabash/), que es una carga que define un 'luabash' incorporado que ejecuta Lua, y algo de infraestructura para agregando más builtins, & c. El [ejemplo] (http://svn.exactcode.de/t2/trunk/misc/luabash/example/example.sh) da una idea de lo que está sucediendo. –

+0

@Charles - ¡De hecho, es un excelente ejemplo! –

2

Los proyectiles no son mucho más innovadores que el Scheme Schell. Toda la potencia de Scheme combinada con la capacidad de ejecutar comandos de Unix y un intérprete awk incrustado (escrito en Scheme, por supuesto). El único inconveniente es que necesita un poquito de patching para compilar Linux de 64 bits.

No es exactamente Bourne-shell, pero es diferente. Por supuesto, tienes que aprender Esquema - ¡bonificación!

Cuestiones relacionadas