GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi j'aime toujours tcsh après toutes ces années

Je me considère comme un utilisateur heureux de Bash. Cependant, lorsque j'ai commencé à explorer Unix, c'était sur un système Unix propriétaire qui fournissait tcsh par défaut, donc mes premières expériences de shell étaient sur une version moderne du shell C (csh). Cela s'est avéré être un heureux accident car tcsh était également la coque de choix du studio de cinéma où j'ai travaillé plus tard dans ma carrière.

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

À ce jour, j'associe plusieurs tâches à tcsh, même s'il n'y a pas de corrélation logique. J'utilise encore tcsh sur au moins un système, ne serait-ce que pour rester dans la pratique. Je le garde également installé sur tous mes systèmes pour maintenir la compatibilité avec mes propres scripts tcsh et pour m'assurer de pouvoir le lancer lorsque j'ai besoin d'écrire un script que je préfère avoir dans tcsh.

La différence entre C shell et Bash

Tcsh est la suite moderne de csh. Lorsque le shell C est sorti en 1978, les utilisateurs étaient enthousiasmés par sa syntaxe de type C. C était un nouveau langage de programmation à l'époque, et plus important encore, c'était ce dans quoi Unix était écrit, de sorte que la plupart des utilisateurs d'Unix étaient plus à l'aise avec C qu'avec un langage de script arbitraire. Par exemple, dans Bash, ce if loop fait un appel "secret" au test binaire pour évaluer l'instruction conditionnelle (la partie entre parenthèses) :

v=1

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

Voici la même instruction dans csh ou tcsh, sans appel externe à test car l'instruction conditionnelle (le code entre parenthèses) utilise l'évaluation intégrée de csh :

set v=1

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

Cela démontre quelques choses, à la fois bonnes et mauvaises. Par exemple, il est naturel pour un programmeur C de taper une condition entre parenthèses, et il est souhaitable, du point de vue d'un programmeur, d'avoir une évaluation mathématique intégrée à l'exécutable. Par contre, le if La syntaxe de boucle a plus en commun avec Lua qu'avec C, qui utilise des accolades comme délimiteurs :

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

D'une certaine manière, cela résume bien csh :c'est propre, efficace et familier pour certains, mais décalé et incohérent.

Alors pourquoi l'utiliser ?

Tcsh pour la précision

J'écris plus de C++ et de Java que de code C, donc mon intérêt pour tcsh partage peu avec sa renommée historique. Cependant, j'aime Lua, et d'une certaine manière, je pense à tcsh et à d'autres shells comme je pense à Lua et Python ou même Markdown et Docbook. Les deux coquilles ont du mérite, et il est facile de désigner celle qui est la plus populaire, mais il y a une clarté stricte pour l'autre. En fait, j'ai l'impression que tcsh a une précision qui manque à beaucoup d'autres shells.

Variables

Vous n'avez pas le luxe de variables typées dans les shells, mais avec tcsh, vous pouvez au moins les déclarer avec un mot-clé. Étrangement, il existe plusieurs mots-clés que vous pouvez utiliser pour la tâche, mais celui que j'ai choisi était set :

> set var=foo
> echo $var
foo

Vous pouvez développer des variables en tapant le nom de la variable (var dans cet exemple) puis en appuyant sur Ctrl+X suivi de $ (dollar). L'exemple ci-dessus définit var à foo .

Comme avec de nombreux autres shells, vous pouvez lister toutes les variables définies en utilisant set seul sans argument :

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

Vous pouvez désactiver une variable en utilisant le unset commande :

> unset var
> set | grep var
>

Les fonctionnalités manquantes sont une fonctionnalité

Peut-être avez-vous déjà vu des lignes comme celle-ci dans un script :

var=GitLab
${var,,}

La deuxième ligne est une fonction intégrée pour transformer le contenu de var en minuscules.

Bien que des fonctions supplémentaires comme celles-ci soient infiniment utiles, j'ai parfois l'impression qu'elles sont une invitation à l'obscurcissement. Les scripts shell sont comme le HTML de la programmation; c'est l'un des rares langages sérieux que vous pouvez apprendre vous-même simplement en lisant le code des autres. Ce n'est pas nécessairement une bonne raison d'abandonner des fonctions utiles, mais c'est la raison pour laquelle j'essaie d'éviter certaines des sténographies cryptiques populaires dans diverses langues. Lorsque j'écris en tcsh, je n'ai pas la possibilité d'utiliser autant de raccourcis, donc les opérations de chaîne complexes doivent être effectuées avec des outils Unix de base plutôt qu'avec des raccourcis intégrés. Je pense que cela se traduit par un code plus facile à lire, et cela fait une grande différence pour les futurs contributeurs - et pour le futur moi oublieux .

Mathématiques intégrées

L'une des choses que j'aime à propos de tcsh est son @ intégré raccourci mathématique. Comme la plupart des utilisateurs autodidactes d'Unix, je suis tombé sur bc, et je le regrette depuis. Sans faute de sa part, bc est souvent enseigné aux utilisateurs en tant que calculatrice en ligne de commande alors qu'il est en fait mieux adapté en tant que langage de calcul . Les solutions de contournement incluent une incroyable calculatrice de 300 lignes en pur Bash, ou le let commande dans Bash, ou le @ commande dans tcsh.

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

Pour les mathématiques très complexes, cela peut valoir la peine d'apprendre bc ou une bonne bibliothèque mathématique Python.

Tous les essentiels

Pour moi, tcsh établit un équilibre parfait entre simplicité et fonctionnalités essentielles. Ce n'est pas un shell pour tous les utilisateurs, ni même pour tous les usages, mais si vous cherchez à simplifier votre vision de votre monde textuel, tcsh pourrait constituer une alternative intéressante.


Linux
  1. Pourquoi un long délai après la commande introuvable ?

  2. Pourquoi Systemd arrête-t-il le service immédiatement après son démarrage ?

  3. Pourquoi y a-t-il une sortie de Ping après qu'il a été terminé ?

  4. Pourquoi le numéro de lecteur/partition est-il toujours utilisé ?

  5. Comment remplacer tous les points-virgules après le 1er ?

Pourquoi j'aime KDE pour mon bureau Linux

Pourquoi j'aime utiliser bspwm pour mon gestionnaire de fenêtres Linux

Pourquoi les fans de Vim aiment le gestionnaire de fenêtres Herbstluftwm Linux

Pourquoi j'aime toujours Alpine pour le courrier électronique sur le terminal Linux

Pourquoi je suis tombé amoureux d'Antergos Linux

Dd Vs Cat - Dd est-il toujours pertinent de nos jours ?