6 votes

Comment puis-je déterminer la version de mon csh ?

J'ai un code qui fonctionne pour moi, mais quand je l'ai donné à des collègues, il s'est cassé. Ils utilisent tcsh alors que, d'après ce que j'ai compris, j'utilise csh .

J'ai essayé :

csh -v
csh --version
csh -V
csh --help
csh -h

sans succès (ils m'amènent tous directement à l'invite de l'interprète). J'ai également cherché la chaîne "version" dans la page du manuel, mais je n'ai rien trouvé d'utile non plus. Existe-t-il un moyen de déterminer la version de csh que j'ai installé ?

-- Editer --

En suivant les liens symboliques de /bin/csh ils semblent se terminer à /bin/bsd-csh ce qui semble impliquer que j'utilise un shell csh à la sauce BSD si cela peut aider quelqu'un. De plus, j'utilise ubuntu linux.

5voto

Keith Thompson Points 85120

Dans les commentaires, vous avez indiqué que vous êtes sous Ubuntu, et que /bin/csh est un lien symbolique vers /etc/alternatives/csh qui est un lien symbolique vers /bin/csh .

En csh coquille a vu le jour sur BSD Unix, il n'est donc pas surprenant que csh est un lien symbolique indirect vers /bin/bsd-csh . Cela remonte à 1978 environ, avant qu'il ne devienne courant pour les programmes Unix de communiquer leurs propres numéros de version.

Puisque vous êtes sur Ubuntu, ceci :

dpkg -l csh

devrait vous indiquer la version que vous avez - bien que le numéro de version du paquet Debian/Ubuntu ne soit probablement pas plus utile que les informations que vous avez déjà. Et la relation entre le numéro de version du paquet et la version de l'interpréteur de commandes n'est pas tout à fait claire.

Je suppose que c'est le bon nom de paquet. Si ce n'est pas le cas, essayez dpkg -S /bin/bsd-csh .

Vous pouvez savoir si vous exécutez tcsh ou pas, comme ceci :

if ($?tcsh) then
    echo This is tcsh
else
    echo This is csh, not tcsh
endif

tcsh es supposée pour être rétrocompatible avec csh, avec quelques fonctionnalités supplémentaires, principalement pour une utilisation interactive. Un script écrit pour tcsh pourrait facilement échouer sous csh s'il utilise des fonctionnalités spécifiques à tcsh, mais je m'attendrais à ce que tcsh soit capable de gérer un script csh. Comme le tcsh(1) La page de manuel dit :

tcsh est une version améliorée mais complètement compatible du shell C de Berkeley UNIX, csh(1) .

Je comprends que vous ne pouvez probablement pas poster l'intégralité du script défaillant, mais pouvez-vous poster un petit exemple représentatif qui fonctionne pour vous et échoue pour vos collègues ?

Une solution pourrait être de demander à vos collègues d'installer vanilla csh sur leurs systèmes ; ils peuvent toujours utiliser /bin/tcsh comme shell interactif s'ils le souhaitent, mais #!/bin/csh ferait alors en sorte que le script soit exécuté par l'ancien csh, et non par tcsh.

Enfin, je ne peux pas répondre à une question sur le scripting [t]csh sans ajouter un lien vers este .

Addendum : J'ai accès à un système Solaris avec une /bin/csh qui n'est pas tcsh ; je peux y faire des tests simples si vous le souhaitez. Un point de données : les deux /bin/tcsh y /bin/csh accepter : comme une commande nulle, mais avec /bin/csh il n'accepte pas les arguments :

% :
% arg
:: Too many arguments

3voto

VonC Points 414372

csh --version ne fonctionnerait que si csh est en fait un lien symbolique vers... /bin/tcsh ( !)

Sinon, un csh ne semble pas définir de version, sauf dans ce qui suit MKSToolkit où que csh es censé définir une variable $csh_version .

Variables prédéfinies

Les variables suivantes ont une signification particulière pour le shell C.
Parmi ceux-ci, argv , csh_version , cwd , home , path , prompt , ROOTDIR , shell , status , COMSPEC et TMPDIR sont toujours définis par le shell.
Sauf pour cwd y status ce réglage n'intervient qu'à l'initialisation ; ces variables ne sont ensuite plus modifiées, sauf si l'utilisateur le fait explicitement.

Voir ce fichier point par exemple :

shell_is_csh  () { return [ -n "$csh_version"  ]; }

/bin/csh liens vers /etc/alternatives/csh qui renvoie à /bin/bsd-csh .
Apparemment, c'est bsd-csh

... alors bsd-csh ne semble pas prendre en charge une quelconque fonction de version.

2voto

Petesh Points 29374

Si vous utilisez Ubuntu, alors votre csh es el OpenBSD version, avec quelques correctifs. Il n'a absolument aucun support pour obtenir sa version, étant donné qu'il ne code sa version nulle part. Je ne peux pas vous aider au-delà de ça, cependant.

Si vous n'avez pas installé csh sur ubuntu, mais j'ai installé tcsh alors il utilisera tcsh comme un alias de csh . Ils sont, comme vous l'avez découvert, en grande partie compatibles.

Pour votre part, vous pouvez probablement déboguer le problème en utilisant update-alternatives pour rediriger csh a tcsh (à condition que vous ayez également installé tcsh).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X