Comment un script peut-il déterminer son chemin quand il est provenant de ksh? IE
$ cat k.ksh #!/bin/ksh . j.ksh $ cat j.ksh #!/bin/ksh a=$(history | tail -1) echo $a $ ./k.ksh 270 ./k.ksh
4 Réponses :
Vous devriez le trouver comme dernière commande de l'histoire. P>
Bonne idée, mais cela ne fonctionne pas comme prévu (pour moi au moins) ... Je vais ajouter mon exemple de code à la question car je ne peux pas poster le code facilement ici.
Je crois que la seule solution portable consiste à remplacer la commande source: puis utilisez la source au lieu de. (Le nom du script sera en $ source). P> p>
Si c'est l'AT & T Invocation: p> ksh93 code>, ces informations sont stockées dans l'espace de noms code> code>, dans la variable
.sh.file code>.
Exemple h3>
Sourced.sh code>: p>
$ echo ${.sh.file:?}
-ksh: .sh.file: parameter not set
La différence de cours entre l'approvisionnement et le forking est que l'approvisionnement entraîne le script invoqué étant exécuté dans le processus d'appel. Henk a montré une solution élégante à Ksh93, mais si, comme moi, vous êtes coincé avec KSH88, vous avez besoin d'une alternative. Je préférerais ne pas changer la méthode KSH par défaut d'approvisionnement en utilisant la syntaxe C-Shell et au travail, ce serait à l'encontre de nos normes de codage, la création et l'utilisation d'une fonction source () ne seraient pas impraticable pour moi. PS, 0 $ et $ _ ne sont pas fiables, voici une alternative:
$ chat b.sh; chat c.sh; ./b.sh
PID:21665 COMMAND (from ps -o args of the PID): /bin/ksh ./b.sh COMMAND (from c.sh's $_ ) : SCRIPT=c.sh $SCRIPT variable: c.sh dirname: . PPID: 21665 FORKING c.sh PID:21669 COMMAND (from ps -o args of the PID): /bin/ksh ./c.sh COMMAND (from c.sh's $_ ) : ./c.sh $SCRIPT variable: c.sh dirname: .
Cette page < / a> b> semble avoir une solution de travail.
@Anson, j'ai vu cela, mais cela ne fonctionne pas pour moi si je recherche le fichier, seulement si j'exécute le script.