Directorio de trabajo incorrecto, si el script bash se abre haciendo doble clic

2

Escribí un script de bash para iniciar directamente el eclipse desde diferentes lugares de trabajo. Cada lugar de trabajo contiene el script, después de ejecutarlo, eclipse se inicia con el conjunto de espacios de trabajo correspondiente.

#!/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'

El script está funcionando, cuando lo ejecuto desde la terminal. Pero cuando hago doble clic en él, utiliza el directorio de inicio como directorio de trabajo y, por lo tanto, inicia eclipse no desde el directorio que contiene el script.

Al parecer los scripts se ejecutan desde ~/., que es la causa de mi problema. ¿Qué puedo hacer para arreglar esto? ¿O cómo puedo cambiar mi script para obtener el comportamiento deseado?

mike
fuente
Pensé que los scripts se ejecutaban desde /
Mark
¿Por qué no eclipsar para que cuando se inicie muestre una lista de áreas de trabajo y elija esa? Creo que necesitaría un Applescript para hacer esto, ya que necesita obtener el directorio de Finder
Mark

Respuestas:

3

Si su script está almacenado en ~/workspaces/myproject/launch.sh y desea estar en ese directorio cuando ejecute, cambie a ese directorio, puede obtener el directorio donde se guarda el script con este forro:

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

Así que las primeras líneas de tu script se convierten en:

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

Esto lo colocará en el directorio donde se almacena el script, sin importar cómo lo ejecute.

Si desea obtener más información sobre cómo detectar la ubicación en el disco de un script en el momento de la ejecución Ver esta excelente respuesta de StackOverflow. .

Ian C.
fuente
1
OP quiere que el directorio del espacio de trabajo no el script de shell
Mark
1
@Mark El script de shell está en el mismo directorio. Gracias por la respuesta. Lo aplicaré, cuando vuelva a casa.
mike
Pero necesitas uno de estos para y en cada espacio de trabajo.
Mark
1
Sí, eso fue en la premisa que dije en mi pregunta :)
mike
@Mark, ¿cómo iría con el directorio del área de trabajo?
Nathan Basanese