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 }