Alors qu'un script est en cours d'évaluation (mais pas nécessairement tandis que ses procédures sont appelés) l'actuel nom du script (strictement, ce qui a été transmis à source ou de l'API C équivalent, Tcl_EvalFile() et liée) est le résultat de info script; il est fortement recommandé de normaliser qu'à un chemin absolu, de sorte que tous les appels à cd ne pas modifier l'interprétation.
Scripts qui ont besoin de l'information ont tendance à mettre quelque chose comme ceci à l'intérieur d'eux-mêmes:
# This is a *good* use of [variable]…
variable myLocation [file normalize [info script]]
Ils peuvent ensuite récupérer la valeur (ou les choses qui en découlent) facilement:
$::argv0 qui est le “principal” de script (et vous cherchez à déterminer le script principal, si elle est égale à info script)
[info nameofexecutable] qui est l'interpréteur Tcl programme lui-même (généralement le argv[0] au niveau C)
[info library] qui est l'endroit où Tcl sa propre bibliothèque de scripts sont situés
$::tcl_pkgPath qui est un Tcl liste de répertoires où les paquets sont installés
$::auto_path qui est un Tcl liste de répertoires où les scripts sont recherchés (y compris les forfaits! Le chemin d'accès au package est utilisé pour initialiser).
Un problème avec cette approche est que dans les scripts (où un script appelle une autre), les [info script] appel peut consulter le script en cours d'exécution, et non pas l'emplacement de cet appel. Voici un moyen de contourner cela: stackoverflow.com/questions/3838591/...
Vous pourriez avoir un coup d'oeil à http://wiki.tcl.tk/1710. La solution prend également soin de possible (plusieurs) des liens symboliques et des points à la physique de la racine de l'emplacement du script.
Alors qu'un script est en cours d'évaluation (mais pas nécessairement tandis que ses procédures sont appelés) l'actuel nom du script (strictement, ce qui a été transmis à
source
ou de l'API C équivalent,Tcl_EvalFile()
et liée) est le résultat deinfo script
; il est fortement recommandé de normaliser qu'à un chemin absolu, de sorte que tous les appels àcd
ne pas modifier l'interprétation.Scripts qui ont besoin de l'information ont tendance à mettre quelque chose comme ceci à l'intérieur d'eux-mêmes:
Ils peuvent ensuite récupérer la valeur (ou les choses qui en découlent) facilement:
Les autres endroits communs sont:
$::argv0
qui est le “principal” de script (et vous cherchez à déterminer le script principal, si elle est égale àinfo script
)[info nameofexecutable]
qui est l'interpréteur Tcl programme lui-même (généralement leargv[0]
au niveau C)[info library]
qui est l'endroit où Tcl sa propre bibliothèque de scripts sont situés$::tcl_pkgPath
qui est un Tcl liste de répertoires où les paquets sont installés$::auto_path
qui est un Tcl liste de répertoires où les scripts sont recherchés (y compris les forfaits! Le chemin d'accès au package est utilisé pour initialiser).[info script]
appel peut consulter le script en cours d'exécution, et non pas l'emplacement de cet appel. Voici un moyen de contourner cela: stackoverflow.com/questions/3838591/...OriginalL'auteur Donal Fellows
La meilleure façon que j'ai trouvé pour le faire:
OriginalL'auteur vasili111
Vous pouvez également essayer comme ceci:
pour obtenir entièrement normalisé nom
OriginalL'auteur Rahul Tripathi
Vous pourriez avoir un coup d'oeil à http://wiki.tcl.tk/1710. La solution prend également soin de possible (plusieurs) des liens symboliques et des points à la physique de la racine de l'emplacement du script.
OriginalL'auteur joheid