10 votes

Mauvais répertoire de travail, si bash script est ouvert par double-clic

J'ai écrit un bash script afin de démarrer directement eclipse depuis différents lieux de travail. Chaque lieu de travail contient le script, après l'avoir exécuté, eclipse est lancé avec l'espace de travail respectif défini.

#!/bin/bash

# relative path
#ECLIPSE_DIR='../../'
ECLIPSE_DIR='/Users/mike/Development/java/'
ECLIPSE="${ECLIPSE_DIR}eclipse/eclipse.app"

AUTHOR='mike'

# current directory is workspace
WORKSPACE=`pwd`
echo "WORKSPACE = $WORKSPACE"

# start eclipse from current directory
#open -n $ECLIPSE --args -data $WORKSPACE -vmargs -Duser.name='$AUTHOR'

Le script fonctionne, lorsque je l'exécute depuis le terminal. Mais lorsque je double-clique dessus, il utilise le répertoire d'origine comme répertoire de travail et lance donc eclipse no à partir du répertoire qui contient le script.

Apparemment les scripts sont exécutés à partir de ~/. qui est la cause de mon problème. Que puis-je faire pour corriger cela ? Ou comment puis-je modifier mon script pour obtenir le comportement souhaité ?

13voto

shsteimer Points 8749

Si votre script est stocké à ~/workspaces/myproject/launch.sh et vous voulez être dans ce répertoire lorsque vous exécutez, changez dans ce répertoire, vous pouvez obtenir le répertoire où le script est sauvegardé avec ce seul liner :

DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )

Ainsi, les premières lignes de votre script deviennent :

#!/bin/bash
DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
cd "${DIR}"
...the rest of your script...

Cela vous placera dans le répertoire où le script est stocké, peu importe comment vous exécutez le script.

Si vous souhaitez en savoir plus sur la détection de l'emplacement sur le disque d'un script au moment de l'exécution. voir cette excellente réponse de StackOverflow .

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X