it-swarm.dev

¿Qué shell de Linux debo usar?

He usado bash, csh, y tcsh. Pero pregunté esta pregunta , y Jonathan me informó que no se puede confiar en csh. Entonces, qué Linux Shell es bueno para el desarrollo. ¿y por qué?

54
Scottie T

El Shell más común, con diferencia, en Linux es bash. A menos que tenga una buena razón para usar una alternativa, sugeriría que se apegue a bash, o al Shell más utilizado por su equipo de proyecto (o que la mayor parte de los scripts de Shell con los que tiene que trabajar) los usos.

El único otro contendiente muy común es el tablero, que es cada vez más utilizado por el proyecto Ubuntu.

Esta es realmente una preferencia personal, bueno, excepto por csh .

62
Kyle Burton

Prefiero zsh.

La tabulación solo vale la pena:

  • Expande los comodines si lo desea (útil cuando desea eliminar todos los archivos excepto uno en un directorio)
  • Le dará una lista de interruptores después de especificar un programa
  • Ofrece opciones para completar la pestaña debajo de la línea en la que estás trabajando, lo cual es bastante útil.

http://zsh.sourceforge.net/

61
SomeDork

Para la interactividad, use Zsh. Por un tiempo fui el mantenedor del puerto FreeBSD de los scripts de finalización de pestañas de Bash, pero lo abandoné tan pronto como probé Zsh por primera vez. Puede hacer todo lo que Bash puede hacer, pero con más facilidad y elegancia. También tiene la propiedad de Niza de tener pulsaciones del teclado extremadamente similares a Bash, por lo que si estás en un sistema sin Zsh, podrás hacerlo (incluso si no se "siente" como Niza).

Para las secuencias de comandos, utilice Bourne Shell (sh). Es el lenguaje de secuencias de comandos estándar POSIX y sus secuencias de comandos están prácticamente garantizadas para que funcionen en todas partes. Bash, Zsh y otros shells tienen extensiones Nice que te perderás, pero te vinculan con una configuración específica. Ignore ese consejo para los scripts de uso personal que está seguro de que nunca ejecutará en otros lugares, pero recuerde que es un compromiso real que debe considerar.

Pero en resumen, Zsh. No conozco a nadie que lo haya probado que no haya cambiado de forma inmediata y permanente. Es realmente así de bueno.

27
Kirk Strauser

Fish (Friendly Interactive Shell) es una buena alternativa a la mayoría de las otras conchas. Tiene una sintaxis coherente, la finalización de Niza pestaña y el resaltado de sintaxis, es fácil de recoger y usar (especialmente si no tiene hábitos de otros shells) y tiene una excelente ayuda en tiempo de ejecución.

El inconveniente es que está desarrollado erráticamente, tiene una base de usuarios pequeña (pero útil) y es muy diferente a otros shells. La compatibilidad hacia atrás con los modismos de Shell no era una prioridad.

En muchos casos, esto es bueno ... muchos shells estándar tienen formas realmente estúpidas de hacer las cosas, solo porque siempre se ha hecho de esa manera. "do/done", "case/esac", "if/fi"? Esta es la locura que el pez elimina.

Vale la pena echarle un vistazo.

22
Myrddin Emrys

Ya que creo que soy la persona que sugirió que debería usar algo que no sea C Shell, tal vez debería calificar mis comentarios un poco, y luego apoyar a aquellos que dijeron 'bash en Linux, Korn Shell en otras plataformas (a menos que bash esté instalado ahí también)'.

Más bien, como los editores (prefieres vim o emacs), la elección de Shell es en parte una cuestión de familiaridad y en parte una cuestión de preferencia. Hay muchos a quienes les gusta C Shell, aunque creo que es menos programable que Bourne Shell y sus derivados. Lo que tengo en mi .cshrc es, de hecho, equivalente a exec /bin/ksh (no es idéntico a eso porque quiero ejecutar un Shell de inicio de sesión - uno que lee el perfil y así sucesivamente), pero no condenaría a nadie por usar C Shell o un derivado si es una decisión informada.

Si decides que quieres usar algo que no sea C Shell, entonces estás básicamente en el campo de Bourne Shell, para el cual el estándar POSIX especifica más o menos el comportamiento esperado y luego los diferentes shells, es decir, el Bourne, Korn o carcasas Born Again: agrega (o, en el caso del clásico Bourne Shell, resta) algunas características. Si es posible que su código necesite pasar de Linux a HP-UX, Solaris o AIX (el trío sobreviviente de las variantes clásicas de Unix derivadas de AT&T), debería considerar asegurarse de escribir sus scripts de Shell en el clásico Bourne Shell, aunque Korn Shell también es bastante seguro. Sin embargo, tenga en cuenta que en Linux puede escribir #!/bin/sh y obtener Bash, en las otras plataformas, obtendrá Bourne Shell.

Cambio entre Korn Shell y Bash sin mayores problemas, y rara vez con problemas menores. Tiendo a permanecer alejado de esos rincones de cualquiera de los dos idiomas que no están bien definidos, lo que tiende a significar 'definido en ambos'. Otro problema para aquellos que usan Linux es que las herramientas GNU tienen más opciones que las versiones Unix clásicas, y puede perder la portabilidad no debido a las construcciones de programación de Shell que usa, sino a las opciones de comando que usa. La experiencia y el fácil acceso a las páginas de manuales de otros sistemas ayudan enormemente.

18
Jonathan Leffler

Por lo general me atengo a bash, porque es más amigable que el sh-up directo, y es el valor predeterminado en todas las distribuciones que he usado de forma semipreparable (SuSE, RHEL, Ubuntu, Slackware).

Sin embargo, si planea escribir scripts de Shell portátiles, asegúrese de que todos se ejecuten en real sh.

8
warren

Golpetazo. Es estandar.

6
Paul Nathan

El problema con csh es que es una mierda para scripting, como se explica aquí . No hay una razón real por la que no deba usarlo como Shell interactivo, pero a la mayoría de las personas les resulta confuso tener que aprender dos shells diferentes y no poder probar partes de sus scripts en la línea de comandos, por lo que es más fácil usar Lo mismo para todo.

Los candidatos obvios para un Shell interactivo son bash, dash, zsh y {pd,} ksh. Todos estos implementan el estándar posix Shell, con algunas extensiones menores. Escoja lo que quiera para uso interactivo, tiendo a usar bash solo porque es el estándar en Linux pero todos tienen sus méritos y, en particular, zsh parece popular.

Si está escribiendo un script que pretende ser portable, use #!/Bin/sh, y asegúrese de usar la sintaxis de Shell de posix estándar. Si funciona tanto en bash como en ksh es probable que sea estándar. Hay algunas versiones antiguas de Unix que no son estándar/bin/sh, pero no me molestaría en eso a menos que sepas que debes hacerlo. Más de un problema para la portabilidad son todas las herramientas de línea de comandos que llama desde su script.

6
Mark Baker

Nadie mencionó el estándar basado en Debian para sh, es el Debian Almquist Shell dash. Es totalmente compatible con POSIX y tiene un inicio muy rápido, por lo que Debian/Ubuntu lo usa para /bin/sh.

Así que uso bash para mi Shell interactivo, pero solo dash para las secuencias de comandos. De esa manera, sé que mis scripts son al menos compatibles con POSIX y se ejecutarán en cualquier otro shell POSIX. ... Sé que la portabilidad es más que Shell, pero es donde trazo la línea.

4
J. M. Becker

No soy un gran usuario de Ruby pero http://Rush.heroku.com/ parece interesante

3
Soft

Probablemente sea mejor seguir con bash simplemente porque es el más utilizado como Shell y cualquier tutorial o ayuda que pueda recibir de alguien probablemente usará bash. Sin embargo, he comenzado a usar zsh para todos mis scripts y he encontrado que es muy superior a bash en términos de scripting.

3
user34292

Simplemente no uses Korn Shell (ksh).

A menos que tenga una escritura perfecta y nunca necesite usar la tecla de retroceso.

2
TM.

Me gusta ksh en realidad. Es un poco más consistente que bash porque no intenta admitir ninguna construcción csh. En mi experiencia, tcsh es menos compatible con otros shells, y lo evito. Intento escribir scripts a sh, pero ksh tiene algunas características agradables como exportar y configurar una variable en una línea. También trato de preservar la compatibilidad con bash, ya que es completo y común. Para escribir scripts de Shell portátiles, que es más importante que seleccionar el "mejor" Shell, puede consultar este libro.

Programación de shell portátil: una extensa colección de ejemplos de shell Bourne (HP Professional Series) por Bruce Blinn (Libro de bolsillo - 29 de octubre de 1995) Amazon.com

1
Jason Catena

Para las secuencias de comandos, intente usar el tablero por un tiempo para tener una buena idea de lo que es portátil. Si alguna vez usa bash para escribir un script de Shell, declare explícitamente bash en los scripts Shebang.

Para el uso de su consola personal, experimente con lo que hay ahí fuera. Encuentra algo con lo que te sientas cómodo. Sé excéntrico y molesta a todos tus amigos de administrador de sistemas al elegir un Shell que se debe compilar desde la fuente para cada máquina en la que quieras usarlo.

1
Sam Rodgers

Uso pdksh todo el tiempo sin tener nada parecido a la tipificación perfecta (¿quizás necesite arreglar su termcap?).

ksh es el estándar, csh es un estándar y bash es 'estándar', pero solo en Linux. Mejor apuntar a ksh.

1
james2vegas

Para escribir scripts reales, prefiero ksh, que tiene varias extensiones útiles para la programación y correcciones na de mis molestias para mascotas .

bash es mi preferencia por las sesiones interactivas, pero eso es más una cuestión de preferencia personal que cualquier otra cosa. Solo asegúrate de que sea un shell tipo Bourne.

1
Jon Ericson

También vine de csh, tcsh a bash. Es diferente, pero después de un tiempo, al menos tan agradable como las conchas.

Para las secuencias de comandos recomendaría ksh, ya que está disponible en la mayoría de los Unixes (Solaris, HP-UX, OSF/1 (el mejor UNIX de todos los tiempos)) y tiene buenas funciones. Con Korn puedes programar la mayoría de los scripts. Esporádicamente, le gustaría obtener más de un número, como valor de retorno de una función, o tiene algunos datos que no puede colocar en una matriz simple o necesita algo que tenga mejores capacidades en caso de regegs, o lo que sea, Entonces propondría Perl.

1
user224243

Creo que FISH es el mejor, tiene resaltado de sintaxis (para comandos que no existen) y puede autocompletarse. Y es muy fácil de aprender.

0
luke's programmer