2011-01-05 10 views
8

Soy un usuario de Windows y Linux desde hace mucho tiempo (no tengo nada en contra de los Mac, nunca tuve ninguno) y en el pasado he tenido algunas experiencias extrañas escribiendo guiones de shell en Mac OS X. En particular, puedo escribir los guiones solo bien y ejecutarlos desde la terminal, pero cada vez que intento ejecutar uno desde una ventana del Finder siempre se ejecuta desde el directorio de inicio del usuario en lugar del directorio en el que vive la secuencia de comandos. Es decir, si el script se encuentra enLos scripts de shell en Mac OS X se ejecutan desde el directorio de inicio?

~/path/to/the/script.sh 

siempre se queda sin ~. En el pasado, he tenido que preguntar a mis amigos más expertos en Mac cómo solucionar esto, y lo han hecho a menudo usando algunas técnicas perversamente horribles, pero no veo ninguna razón por la que este debería ser el caso.

Mi pregunta es: ¿existe una manera fácil de escribir un script de shell en Mac OS X que, cuando se hace doble clic en Finder, se ejecuta fuera del directorio en el que reside?

+1

¿Por qué espera que haga lo contrario? Este es solo el comportamiento definido. – bmargulies

+0

"directorio raíz"! = "Directorio principal del usuario" –

+0

Al menos en Windows, el comportamiento predeterminado que se obtiene al ejecutar un programa desde una ventana del explorador es que el programa se está quedando sin el directorio desde el que reside. Quizás esta es la excepción más que la regla, pero es a lo que estoy más acostumbrado. – templatetypedef

Respuesta

13

El comportamiento me parece consistente. Hereda el entorno de las instancias de su buscador, que se enrutará en su directorio de inicio.

Sin embargo, no es demasiado difícil de arreglar.

cd "$(dirname "$0")" 

debe hacer el ala truco:

richh-desktop % fullname.sh 
/home/richh/bin 
richh-desktop % cd .. 
richh-desktop % fullname.sh 
/home/richh/bin 
richh-desktop %   
+0

Comillas de doble cita en caso de que haya espacios en cualquiera de los nombres de archivo (esto es OS X - los nombres de archivo tienen espacios en ellos): 'cd" $ (dirname "$ 0") "' –

+0

@Gordon Davisson: Gracias. – richo

1

Corresponderá al script cambiar el directorio por usted. Compruebe this page hacia fuera.

1

El propósito de $0 es resolver este problema.

2

Si desea que la secuencia de comandos se quede sin el directorio en el que vive, la secuencia de comandos tendrá que cambiar su directorio de trabajo. Dado que tu ejemplo está escrito en bash, responderé con un ejemplo bash. El valor $ _ se establece en la ruta absoluta del script actual. Puede encontrar más información ejecutando man bash

#!/bin/bash 

PROGPATH=$(dirname $_) 
cd $PROGPATH 

# Do your stuff here 
Cuestiones relacionadas