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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top