2008-09-08 10 views
20

Comment unix gère-t-il le nom complet du chemin avec espace et arguments?
Dans les fenêtres, nous citons le chemin et ajoutons les arguments de la ligne de commande après, comment est-il dans unix?comment unix gère-t-il le nom complet du chemin avec espace et arguments?

"c:\foo folder with space\foo.exe" -help 

mise à jour:

je voulais dire comment puis-je reconnaître un chemin des arguments de ligne de commande.

+0

Pouvez-vous donner un exemple de ce que vous entendez par "reconnaître un chemin à partir des arguments de la ligne de commande"? Cela pourrait valoir la peine de commencer une nouvelle question car tout le monde a répondu à la première partie. – rjmunro

Répondre

9

Vous pouvez citer si vous le souhaitez, ou vous pouvez échapper les espaces avec un \, mais la plupart des chemins UNIX précédents (Mac OS X à part) n'ont pas d'espaces dedans.

/Applications/Image\ Capture.app/Contents/MacOS/Image\ Capture 

"/Applications/Image Capture.app/Contents/MacOS/Image Capture" 

/Applications/"Image Capture.app"/Contents/MacOS/"Image Capture" 

Tous se réfèrent au même exécutable sous Mac OS X.

Je ne sais pas ce que vous entendez par la reconnaissance d'un chemin - si l'un des chemins ci-dessus sont passés en paramètre à un programme de la shell mettra toute la chaîne dans une variable - vous n'avez pas besoin d'analyser plusieurs arguments pour obtenir le chemin entier.

1

Vous pouvez citer tout le chemin que dans les fenêtres ou vous pouvez échapper aux espaces comme dans:

/foo\ folder\ with\ space/foo.sh -help 

Les deux méthodes fonctionneront!

35

Vous pouvez citer comme votre exemple de Windows ci-dessus, ou échapper aux espaces avec antislashs:

"/foo folder with space/foo" --help 
/foo\ folder\ with\ space/foo --help 
+2

Je pense que vous vouliez dire "échapper aux espaces" – cowlinator

3

Depuis les espaces sont utilisés à des arguments de ligne de commande séparés, ils doivent être échappé de la coquille. Cela peut se faire soit avec une barre oblique inverse() ou citations:

"/path/with/spaces in it/to/a/file" 
somecommand -spaced\ option 
somecommand "-spaced option" 
somecommand '-spaced option' 

Cela suppose que vous en cours d'exécution à partir d'une coquille. Si vous écrivez du code, vous pouvez généralement passer les arguments directement, en évitant le problème:

Exemple en perl. Au lieu de le faire:

print("code sample"); système ("option -spaced");

vous pouvez faire

système print("code sample"); ("unecommandequelconque", option "-spaced");

Depuis quand vous passez le système() appelle une liste, il ne se casse pas d'arguments sur les espaces comme il le fait avec un seul appel d'argument.

1

aussi faire attention avec des guillemets doubles - sur le shell Unix, ce développe des variables. Certains sont évidents (comme $foo et \t) mais certains ne sont pas (comme !foo).

Pour des raisons de sécurité, utilisez des guillemets simples!

0

Si les voies normales ne fonctionnent pas, en essayant des espaces avec %20 substitution.

Cela a fonctionné pour moi lorsqu'ils traitent avec SSH et d'autres commandes de style de domaine comme auto_smb.

0

Je voudrais également souligner que si vous utilisez des arguments de ligne de commande dans le cadre d'un script shell (fichier .sh), alors dans le script, vous devrez placer l'argument entre guillemets. Donc, si votre commande ressemble

>scriptName.sh arg1 arg2 

Et arg1 est votre chemin qui a des espaces, dans le script shell, vous devez désigner comme « arg1 $ » au lieu de arg1 $

Here are the details

Questions connexes