Comment spécifier l'emplacement actuel du fichier batch (.command) dans Mac OS X

J'ai un fichier batch (.command) que j'ai double-clic pour faire du travail. Il a des dépendances sur les fichiers dans le même dossier, mais si je double-cliquez sur le fichier .command, il lève et assume que l'emplacement actuel est / ~

Comment puis-je trouver / spécifier l'emplacement du fichier .command dans le script lui-même, donc je peux me référer aux actifs relatifs?

Si vous utilisez bash (c.-à-d. Le script commence par #!/bin/bash ), vous pouvez utiliser $ BASH_SOURCE pour obtenir le nom de fichier du script. À partir de cela, vous pouvez obtenir le répertoire dans:

 mydir="$(dirname "$BASH_SOURCE")" 

… et ensuite utilisez-le pour trouver des fichiers relatifs au script, p.ex. cp "$mydir/fileInTheSameFolder" /tmp (et utilisez toujours les doubles guillemets autour de lui, comme je l'ai fait ici).

Notez que cela peut être un chemin relatif; Par exemple, si le script a été exécuté à partir d'un shell interactif avec ./scriptname.command , il ./scriptname.command simplement comme ".". Cela ne devrait pas être un problème à moins que le script cd soit ailleurs, mais si vous avez besoin du chemin complet, vous pouvez l'utiliser à la place:

 mydir="$(cd "$(dirname "$BASH_SOURCE")" && pwd)" || { echo "Error getting script directory" >&2 exit 1 } 

Ou, pourrait simplement cd le répertoire du script au début du script:

 cd "$(dirname "$BASH_SOURCE")" || { echo "Error getting script directory" >&2 exit 1 }