script shell.

Y a t-il un moyen de récupérer le chemin du script exécutable que je lance dans le script lui-même?


Le reste du script fonctionne, sauf ça!


 


Réponses

  • AliGatorAliGator Membre, Modérateur
    septembre 2014 modifié #2
    $0 te donne la commande qui a servi à  lancer le script.


    Après du coup c'est pas forcément juste le nom du script ou à  l'inverse pas forcément le chemin complet, ça peut être un chemin relatif.

    Donc du coup ta question se transforme en :

    "Comment obtenir en bash un chemin absolu à  partir d'un chemin relatif ?"


    Après il y a des fonctions bash pour demander le chemin complet à  partir d'un chemin relatif comme "realpath" mais c'est une commande externe qui se trouve ne pas être installée par défaut sous OSX.


    Il y'a aussi "readlink -e" qui doit je crois marcher sous OSX lui par contre.
  • Ok, je vais faire quelques essais, merci.


  • AliGatorAliGator Membre, Modérateur
    septembre 2014 modifié #4
    En ruby, la méthode File.realpath existe, du coup plutôt que de bidouiller des fonctions maison en Bash pour le faire, tu peux appeler ruby à  la rescousse.


    Par exemple :
    #!/bin/bash
    full_path=`ruby -e "puts File.realpath(ARGV[0])" "$0"`
    echo $full_path
    Ici j'appelle l'exécutable ruby pour lui demander d'exécuter le script "puts File.realpath(ARGV[0])", en passant à  ce script "$0", donc la commande ayant servi à  lancer l'exécution du script bash. Je met tout ça entre backticks "`" pour demander à  bash d'exécuter cette commande (ruby -e ... ...) et récupère le résultat dans la variable bash "full_path".


    [EDIT] Une autre solution est de créer le script ruby suivant, puis de le sauver dans /usr/local/bin/realpath (après l'avoir rendu exécutable avec "chmod +x") :
    #!/usr/bin/env ruby
    puts File.realpath(ARGV[0])
    Il suffira alors de l'appeler dans ton script bash comme ceci :
    full_path=`realpath "$0"`
  • Sur Mac la commande realpath n'existe pas. C'est dommage.


    Une possibilité est donc de la créer, par exemple avec un petit bout de code du genre



    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, const char * argv[]) {
    printf("%s",realpath(argv[1],NULL));
    return 0;
    }

  • Bon en Bash ce n'est pas direct (si on n'a pas de chance).


    Ruby je n'ai jamais touché!


    Mais en AppleScript,  C'est les doigts dans le nez (euh, non c'est sale ça)


    L'application exécute: set chemin to path to me


    puis je peux lancer le script avec l'argument adéquat:  do shell script .....  etc


     


    NB, ça ne marche que dans l'application compilé, pas sous l'éditeur de script  évidemment!


  • je viens de découvrir qu'Xcode a une documentation sur "script shell".


    Cette documentation donne comme solution:  lescript="$(which $0)"


    Cette solution donne directement le chemin complet du script.


Connectez-vous ou Inscrivez-vous pour répondre.