Qué es csh y cómo usar esta shell de Unix

Autor: Publicado

En breve: csh, o C shell, es una shell del sistema: un programa que interpreta los comandos que introduces y ejecuta otros programas en sistemas Unix y similares. Permite trabajar de forma interactiva y ejecutar scripts, y su sintaxis recuerda en parte al lenguaje C. Puedes encontrarla en entornos antiguos, herramientas técnicas y scripts existentes; para un nuevo script de administración, suele resultar más práctico usar Bash o sh.

¿Para qué sirve csh y en qué se diferencia del terminal?

El terminal es la interfaz de texto en la que introduces comandos y lees los resultados. La shell, o intérprete de comandos, funciona dentro de ese entorno: lee los comandos, expande las expresiones abreviadas, gestiona las redirecciones y ejecuta programas. Por tanto, abrir una ventana de terminal no significa que estés usando csh: en ella puede estar funcionando Bash, Zsh u otra shell.

C shell se creó en la Universidad de California en Berkeley, y su principal creador es Bill Joy. Su nombre alude al parecido de algunas estructuras de control con las del lenguaje C, no a la posibilidad de ejecutar código C. No puedes ejecutar un archivo de código fuente en C mediante csh como si fuera un script corriente.

Con csh puedes cambiar de directorio, ejecutar herramientas, conectarlas mediante tuberías y enviar sus resultados a archivos. La shell también permite usar un historial de comandos, alias —atajos personalizados para comandos— y gestionar tareas que se ejecutan en segundo plano.

Muchos comandos sencillos tienen el mismo aspecto en distintas shells. Por ejemplo, ls ejecuta un programa que muestra el contenido de un directorio. Las diferencias cobran importancia al trabajar con variables, condiciones, bucles y redirecciones de mensajes de error.

¿Cómo es la sintaxis de csh?

En csh, se asigna una variable normal con el comando set y una variable de entorno con setenv. Una variable de entorno se transmite a los programas que se ejecutan, por lo que puede influir en su comportamiento.

set nombre = "Ana"
echo "Hola, $nombre"

setenv APP_MODE test

Aquí, la primera variable se utiliza para construir un mensaje. La segunda pone el valor APP_MODE=test a disposición de los programas que se ejecutan; su efecto depende de si el programa en cuestión lo lee.

Un ejemplo de bucle en csh es el siguiente:

foreach color (rojo verde azul)
    echo "Color: $color"
end

Este bucle mostrará tres líneas. No funcionará en Bash sin modificaciones, porque Bash utiliza otra estructura para los bucles. Del mismo modo, una instrucción que encuentres en un tutorial de Bash, como export APP_MODE=test, no es la forma correcta de asignar una variable de entorno en csh.

No copies fragmentos enteros de scripts de una shell a otra sin comprobar la sintaxis. Que un comando concreto, como echo, sea compatible no significa que lo sea todo el script.

¿Cómo comprobar si tienes csh en el sistema?

En un sistema de tipo Unix, puedes comprobar si el programa está disponible en la ruta de búsqueda de comandos actual:

which csh

Si obtienes una ruta, por ejemplo /bin/csh, el sistema puede encontrar el comando con ese nombre. La ausencia de un resultado no siempre demuestra que no esté instalado: el programa puede estar fuera de los directorios en los que busca la shell. La disponibilidad de la herramienta which y el formato del mensaje también dependen del sistema.

El comando echo $SHELL suele mostrar la ruta de la shell de inicio de sesión, es decir, la shell predeterminada asignada al usuario. No es una prueba fiable de qué shell está funcionando en ese momento, porque el valor de esta variable puede permanecer sin cambios tras iniciar otra manualmente.

Si csh está disponible, al introducir csh iniciarás una sesión adicional de la shell. Con el comando exit volverás a la anterior. Es una forma más sencilla de probarla que cambiar la shell predeterminada de la cuenta; para instalarla, lo mejor es consultar la documentación del sistema concreto.

Csh, tcsh, Bash y sh: ¿cuál elegir?

tcsh es una evolución de csh, ampliamente compatible con ella, que ofrece funciones avanzadas para el trabajo interactivo, entre ellas la edición de la línea de comandos y el autocompletado de nombres. En algunos sistemas, el comando csh ejecuta precisamente tcsh. Por eso, al diagnosticar problemas importa la implementación real, no solo el nombre del comando.

ShellCuándo conviene usarla
cshPara mantener scripts y entornos que requieren la sintaxis de C shell.
tcshPara el trabajo interactivo en un entorno basado en la familia csh.
BashPara nuevos scripts cuando Bash está disponible en las máquinas de destino.
shPara scripts portables que utilizan una sintaxis compatible con el estándar POSIX.

POSIX es una familia de estándares que describe interfaces comunes de los sistemas de tipo Unix, incluido el comportamiento de la shell. Csh no es compatible con la sintaxis de la shell POSIX. La recomendación de usar Bash o sh para nuevos scripts se debe principalmente a la portabilidad y a la mayor facilidad para aprovechar herramientas habituales y ejemplos de administración, no a que csh sea incapaz de automatizar tareas.

¿Cómo ejecutar un archivo pensado para csh?

Un archivo con la extensión .csh suele contener un script de C shell, pero la extensión por sí sola no determina su contenido. La primera línea puede darte una pista, por ejemplo #!/bin/csh. Es el shebang: una línea que indica qué intérprete se utiliza al ejecutar directamente un archivo ejecutable.

Tras revisar el contenido de un archivo de confianza, puedes ejecutarlo indicando expresamente el intérprete:

csh skrypt.csh

Este método no requiere conceder al archivo permiso de ejecución, pero sí exige permiso de lectura. El script se ejecuta con los permisos del usuario que lo inicia, así que no pruebes un archivo desconocido mediante sudo.

Si las instrucciones del proyecto requieren csh, comprueba primero su disponibilidad y los requisitos del proyecto. No lo sustituyas automáticamente por el comando bash skrypt.csh: cambiar de intérprete no convierte la sintaxis del script.

Consulta también: ¿Qué ocurre cuando caduca un dominio?

Lee también

Descubre cómo PHP-FPM atiende peticiones PHP, en qué se diferencia de un servidor web y cómo ajustar sus procesos al tráfico y los recursos.
Conoce BIND, el software abierto de servidor DNS: sus funciones, cómo gestiona dominios y cuándo conviene instalarlo por tu cuenta.
Descubre qué son el registro REGON de Polonia y su número, en qué se diferencian de NIP y KRS y cómo verificar los datos de una empresa.