9
votes

Shell Scripts dans Mac OS X Exécuter du répertoire domestique?

Je suis un utilisateur de Windows et Linux de longue durée et j'ai eu des expériences étranges qui écrivent des scripts Shell sur Mac OS X. En particulier, je peux écrire les scripts bien et les exécuter du terminal, mais chaque fois que j'essaye d'en exploiter un À partir d'une fenêtre Finder, il s'exécute toujours du répertoire de base de l'utilisateur plutôt que du répertoire dans lequel vit le script. C'est-à-dire que si le script est situé à xxx

il fonctionne toujours de ~ . Dans le passé, j'ai dû demander à mes amis plus mac-avertis comment résoudre ce problème, et ils l'ont souvent fait en utilisant des techniques perverses, mais je ne vois aucune raison pour que cela soit le cas.

Ma question est - Y a-t-il un moyen facile d'écrire un script shell dans Mac OS X qui, lorsqu'il est double-cliqué dans Finder, est sorti du répertoire dans lequel il réside?


6 commentaires

Pourquoi vous attendez-vous autrement? Ceci est juste le comportement défini.


"Répertoire racine"! = "Répertoire de base de l'utilisateur"


Au moins sous Windows, le comportement par défaut que vous obtenez lors de l'exécution d'un programme à partir d'une fenêtre Explorer est ce programme à partir du répertoire à partir duquel il réside. Peut-être que c'est l'exception plutôt que la règle, mais c'est ce que je suis le plus utilisé.


@David Gelhar- whoops! Merci d'avoir fait remarquer cela.


@Op ce qui n'est pas très intuitif Comportement par défaut IMO. C'est en grande partie à résoudre certains problèmes inhérents à la manière dont Win32 gère des bibliothèques partagées, AFAIK.


Pas exactement pertinent, mais: n'est-ce pas le même comportement que Linux? Je ne suis pas sûr, je ne suis pas sûr que je suis sûr de double-cliquer sur un script shell dans, par exemple, Gnome l'exécutera à partir du répertoire domestique, également.


4 Réponses :


1
votes

Cela va être au script pour changer le répertoire pour vous. Vérifiez Cette page out. < / p>


0 commentaires

13
votes

Le comportement me semble cohérent. Il hérite de votre environnement de recherche de recherche, qui serait enraciné dans votre répertoire de domicile.

Cependant, il n'est pas trop difficile de réparer. P>

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


1 commentaires

S'il vous plaît double-citer des chemins dans le cas où il existe des espaces dans l'un quelconque des noms de fichiers (ceci est OS X - Les noms de fichiers ont des espaces d'espace): cd "$ (Dirname" $ ​​0 ")"



0
votes

Le but de 0 $ est de résoudre ce problème.


0 commentaires

2
votes

Si vous souhaitez que le script soit à l'écoute du répertoire, il vit dans, le script devra changer son répertoire de travail. Étant donné que votre exemple est écrit à Bash, je vais répondre avec un exemple de Bash. La valeur $ _ est définie sur le chemin absolu du script actuel. Vous pouvez trouver plus d'informations en exécutant Man Bash

#!/bin/bash

PROGPATH=$(dirname $_)
cd $PROGPATH

# Do your stuff here


0 commentaires