Question
Je veux créer un simple script bash pour lancer un programme Java sur OS X. Le nom du fichier, le chemin du fichier et le dossier de travail immédiat contiennent tous les espaces. Quand je fais ceci:
#!/bin/sh
cd `dirname $0`
Je reçois
usage: dirname path
J'ai aussi essayé de mettre des citations dans toutes sortes d'endroits différents. L'exemple le plus élaboré étant
cd "`dirname \"$0\"`"
Rien n'a fonctionné. Je soit reçois des messages d'erreur ou que cryptique: message
« utilisation dirname chemin ».Quelles sont les autres méthodes qui pourraient fonctionner?
Modifier cela ne semble pas être un problème pour tout le monde, mais moi il doit juste être ma boîte. Je vais accepter mon post ci-dessous parce que c'est la seule solution qui a fonctionné pour ce problème spécifique. Cependant, je suis upvoting certainement les solutions qui semblent travailler pour tout le monde et vraiment apprécier l'aide de tout le monde.
La solution 3
Ce qui a finalement fonctionné pour moi est en train de changer ceci:
#!/bin/sh
cd `dirname $0`
Pour cela:
#! /bin/zsh
cd "${0:h}"
Il prend également en charge les noms de fichiers et les chemins de fichiers contenant des espaces. Voici où je l'ai trouvé: http://rentzsch.com/unix/locationAwareCommandFiles
Autres conseils
Qu'en est-il:
cd "$(dirname "$0")"
Cela fonctionne pour moi ici.
#!/bin/sh
cd "$(dirname "$0")"
Échapper les guillemets internes est inutile:
cd "`dirname "$0"`"
Mais qui ne reçoit pas à la racine du problème, qui est en quelque sorte que la valeur de 0 $ semble être vide, ou peut-être quelque chose d'étrange. Essayez de changer en cours d'exécution de votre script ainsi:
bash -x scriptname
fera l'écho chaque ligne, avec des variables interpolées, avant de l'exécuter. Il est très utile pour le débogage. Aussi très utile sont:
-u: abort on attempt to use undefined variable
-e: abort on first error
Hey ne sais pas à ce sujet ... Mais est-il possible que votre
#!/bin/sh
Points à quelque chose qui est bash pas? Ce que j'utilise habituellement est:
#!/usr/bin/bash
Jolie nouvelle à l'ensemble chose de script donc pas sûr.