2010-12-02 100 views
4

J'ai un script qui est utilisé pour définir des variables d'environnement dans le shell csh appelant. Certaines de ces variables dépendent de l'emplacement du script.Comment puis-je obtenir __FILE__ lors de l'approvisionnement d'un script csh?

Si le fichier est un bon script csh, je peux utiliser $ 0 pour accéder à __FILE__ mais si j'exécute le script en utilisant source, il me dit simplement csh ou tcsh.

Puisque j'utilise ceci pour définir des vars dans le shell parent, je dois utiliser source.

Que faire?

+0

Voir aussi https://serverfault.com/questions/ 139285/tcsh-path-of-sourced-file – oliver

Répondre

2

Si vous accédez à $_ sur la première ligne du fichier, il contiendra le nom du fichier si celui-ci provient. Si c'est exécuté directement alors $0 contiendra le nom.

#!/bin/tcsh 
set called=($_) 
if ($called[2] != "") echo "Sourced: $called[2]" 
if ($0 != "tcsh") echo "Called: $0" 
+1

C'est facile à casser: Si vous enchaînez les commandes avec ";", alors appelé retournera la mauvaise info. 'echo BONJOUR; la source test.csh' '' HELLO' Provenant: BONJOUR, '' appelé:/bin/tcsh' ' – engtech

+0

@engtech: C'est parce que' _' $ vraiment "Substituts la ligne de commande de la dernière commande exécutée." –

0

Ceci est difficile à lire, mais fonctionne réellement:

Si votre script est nommé test.csh

/usr/sbin/lsof +p $$ | \grep -oE /.\*test.csh

+0

J'aime mieux que la réponse acceptée. L'utilisation de $ \ _ _only_ fonctionne si vous pouvez contrôler exactement comment le script est créé. –