GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué todavía amo a tcsh después de todos estos años?

Me considero un usuario feliz de Bash. Sin embargo, cuando comencé a explorar Unix, estaba en un sistema propietario de Unix que proporcionaba tcsh de forma predeterminada, por lo que mis primeras experiencias con el shell fueron en una versión moderna del shell C (csh). Eso resultó ser un accidente afortunado porque tcsh también era el caparazón elegido en el estudio de cine donde trabajé más adelante en mi carrera.

Más recursos de Linux

  • Hoja de trucos de los comandos de Linux
  • Hoja de trucos de comandos avanzados de Linux
  • Curso en línea gratuito:Descripción general técnica de RHEL
  • Hoja de trucos de red de Linux
  • Hoja de trucos de SELinux
  • Hoja de trucos de los comandos comunes de Linux
  • ¿Qué son los contenedores de Linux?
  • Nuestros últimos artículos sobre Linux

Hasta el día de hoy, hay varias tareas que asocio con tcsh, aunque no hay una correlación lógica allí. Todavía uso tcsh en al menos un sistema, aunque solo sea para mantenerme en la práctica. También lo mantengo instalado en todos mis sistemas para mantener la compatibilidad con mis propios scripts tcsh y para asegurarme de poder iniciarlo cuando necesito escribir un script que prefiero tener en tcsh.

La diferencia entre C shell y Bash

Tcsh es la continuación moderna de csh. Cuando se lanzó el shell C en 1978, los usuarios estaban entusiasmados con su sintaxis similar a C. C era un nuevo lenguaje de programación en ese momento y, lo que es más importante, era en lo que estaba escrito Unix, por lo que la mayoría de los usuarios de Unix se sentían más cómodos con C que con un lenguaje de secuencias de comandos arbitrario. Por ejemplo, en Bash, este if loop hace una llamada "secreta" a test binario para evaluar la declaración condicional (la parte entre paréntesis):

v=1

if [ $v -gt 0 ]
  then
  echo "verbose"
fi

Aquí está la misma declaración en csh o tcsh, sin una llamada externa a test porque la declaración condicional (el código entre paréntesis) usa la evaluación integrada de csh:

set v=1

if ($v > 1) then
  echo "verbose"
endif

Esto demuestra algunas cosas, tanto buenas como malas. Por ejemplo, es natural que un programador de C escriba un condicional entre paréntesis, y es deseable desde la perspectiva de un programador tener una evaluación matemática integrada en el ejecutable. Por otro lado, el if la sintaxis de bucle tiene más en común con Lua que con C, que usa llaves como delimitadores:

// this does not work in Csh
if ( v>1 ) {
        printf("verbose");
}

En cierto modo, esto resume muy bien csh:es limpio, eficiente y familiar para algunos, pero peculiar e inconsistente.

Entonces, ¿por qué usarlo?

Tcsh para precisión

Escribo más C++ y Java que código C, por lo que mi interés en tcsh comparte poco con su fama histórica. Sin embargo, disfruto de Lua y, en cierto modo, pienso en tcsh y otros shells como pienso en Lua y Python o incluso en Markdown y Docbook. Ambos proyectiles tienen mérito, y es fácil señalar el que es más popular, pero el otro es estrictamente claro. De hecho, creo que tcsh tiene una precisión de la que carecen muchos otros proyectiles.

Variables

No puede darse el lujo de escribir variables en shells, pero con tcsh, al menos puede declararlas con una palabra clave. Extrañamente, hay varias palabras clave que puede usar para la tarea, pero la que me decidí fue set :

> set var=foo
> echo $var
foo

Puede expandir las variables escribiendo el nombre de la variable (var en este ejemplo) y luego presionando Ctrl+X seguido del $ (dólar) clave. El ejemplo anterior establece var a foo .

Al igual que con muchos otros shells, puede enumerar todas las variables establecidas usando set solo sin argumentos:

> set
term    xterm
tty     pts/2
uid     1000
user    seth
var     foo
[...]

Puede desarmar una variable usando unset comando:

> unset var
> set | grep var
>

Las funciones que faltan son una función

Tal vez hayas visto líneas como esta en un script:

var=GitLab
${var,,}

La segunda línea es una función integrada para transformar el contenido de var en minúsculas.

Si bien las funciones adicionales como estas son infinitamente útiles, a veces siento que son una invitación a la ofuscación. Shell scripting es como el HTML de la programación; es uno de los pocos lenguajes serios que puedes aprender solo leyendo el código de otras personas. Esa no es necesariamente una buena razón para renunciar a funciones útiles, pero es la razón por la que trato de evitar algunas de las taquigrafías crípticas populares en varios idiomas. Cuando escribo en tcsh, no tengo la opción de usar tanta taquigrafía, por lo que las operaciones de cadenas complejas deben realizarse con herramientas básicas de Unix en lugar de atajos integrados. Creo que da como resultado un código que es más fácil de leer, y eso marca una gran diferencia para los futuros contribuyentes, y para el futuro yo olvidadizo. .

Matemáticas integradas

Una de las cosas que me encantan de tcsh es su @ integrado. atajo de matemáticas. Como la mayoría de los usuarios autodidactas de Unix, me topé con bc y me he arrepentido desde entonces. Sin culpa propia, bc a menudo se enseña a los usuarios como una calculadora de línea de comandos cuando en realidad es más adecuado como un lenguaje de cálculo. . Las soluciones alternativas incluyen una increíble calculadora de 300 líneas en Bash puro, o let comando en Bash, o @ comando en tcsh.

> @ n = ( 1 + 1 / 2 )
> echo $n
1

Para matemáticas muy complejas, puede valer la pena aprender bc o una buena biblioteca matemática de Python.

Todo lo esencial

Para mí, tcsh logra un equilibrio perfecto entre la simplicidad absoluta y las características esenciales. No es un shell para todos los usuarios, ni siquiera para todos los propósitos, pero si está buscando simplificar su visión de su mundo basado en texto, tcsh podría proporcionarle una alternativa interesante.


Linux
  1. Por qué a los programadores les encanta el empaquetado de Linux

  2. 5 razones por las que me encanta programar en Linux

  3. Dd Vs Cat:¿Dd sigue siendo relevante en estos días?

  4. ¿Por qué un largo retraso después de que no se encuentra el comando?

  5. ¿Por qué Systemd detiene el servicio inmediatamente después de iniciarlo?

Por qué amo KDE para mi escritorio Linux

Por qué me encanta usar bspwm para mi administrador de ventanas de Linux

Por qué a los fans de Vim les encanta el administrador de ventanas Herbstluftwm Linux

Feliz cumpleaños, GNU:por qué sigo amando a GNU 35 años después

Por qué todavía me encanta Alpine para el correo electrónico en la terminal de Linux

¿Por qué Centos todavía no usa el kernel más reciente?