Je souhaite créer un script de bash simple pour lancer un programme Java sur OS X. Les noms du fichier, le chemin de fichier et le dossier de travail immédiat contiennent tous des espaces. Lorsque je fais cela:
cd "`dirname \"$0\"`"
5 Réponses :
Qu'en est-il de: qui fonctionne pour moi ici. p> p>
#!/bin/sh cd "$(dirname "$0")"
échapper aux citations doubles intérieures est inutile: mais qui ne correspond pas à la racine du problème, qui est que la valeur de 0 $ semble être vide, ou peut-être Quelque chose d'étrange. Essayez de changer de fonctionnement de votre script de cette façon: p> Cela échouera chaque ligne, avec des variables interpolées, avant de l'exécuter. Il est très utile de déboguer. Aussi très utile sont les suivants: p>
Qu'est-ce qui a finalement travaillé pour moi change ceci: à ceci: p> Ceci prend également en charge les noms de fichiers et les chemins de fichiers contenant les espaces. Voici où je l'ai trouvé: http://rentzsch.com/unix/localisawarecommandfiles P> < / p>
Juste curieux - Qu'est-ce qui a échoué avec la solution de ma et Ned? Je voudrais mettre à jour ma réponse le cas échéant pour les archives.
@San: J'ai toujours continué à obtenir "Utilisation: chemin dirname". Je pense que c'est quelque chose à faire avec ma machine. Mais cette solution Z Shell a fonctionné pour moi. Bizarre.
Vous pouvez aussi essayer / bin / bash - je pense / bin / sh est un lien symbolique à / bin / bash, mais bash examine comment il a été invoqué et change certaines choses dans son comportement en conséquence. Donc, si vous l'invoquez avec / bin / sh
@Peterbagnall Je crois que vous êtes correct. Il devrait utiliser / bin / bash ... stackoverflow.com/questions/11061727/...
hey pas sûr de cela ... mais est-il possible que votre points sur quelque chose qui ne soit pas bash? Ce que j'utilise habituellement est: p> joli nouveau sur toute la chose de script, donc pas sûr. p> p>
Qu'est-ce que
écho 0 $ code> rendement? Dirname peut avoir un problème avec quelque chose de spécifique sur la valeur de 0 $. Avez-vous essayé d'exécuter cela avec le script dans un répertoire différent?Votre deuxième exemple fonctionne pour moi avec un répertoire six niveaux de profondeur où tout autre ancêtre a au moins un espace de son nom.
Essayez jamais de regarder le manuel du dirname?
@Matt - Je regarde-le maintenant. Qu'est-ce que je cherche?