Je « suis assez nouveau dans les scripts bash et je vais assez bien mais jai rencontré un problème.
Jessaie de créer un script qui utilise une barre oblique (/), cependant, je continue à recevoir le message derreur /: is a directory.
Donc, en gros, quoi Jai besoin de passer la commande test/(hello)
à un programme dans le terminal. Jai donc ajouté des barres obliques inverses pour le faire fonctionner: test\/\(hello\)
, cependant , Jobtiens cette erreur. Quel est le problème ici?
Commentaires
- où le script utilise-t-il la barre oblique? Il semble que vous êtes avec succès en passant l’ argument à la commande / au script, mais qu’il y a une erreur dans le script. Pouvez-vous nous donner un exemple plus détaillé? ' ne mentionne-t-il pas un numéro de ligne ou quelque chose?
Réponse
Cela ne devrait se produire que si vous ne passez pas commande avant largument. Vous devez appeler des commandes comme ceci:
command [args ...]
Si vous lappelez comme ceci, cela fonctionnera.
$ echo test/\(hello\) test/(hello)
Pour mémoire, il est généralement beaucoup plus facile (et beaucoup plus lisible) de citer des arguments au lieu déchapper à tous les métacaractères. Vous pouvez le faire en utilisant "
et "
(il ya de bonnes informations à ce sujet ici ).
Commentaires
- Vote positif. Le shell interprétera le texte séparé uniquement par des barres obliques comme des répertoires, pas des commandes / arguments. La barre oblique peut être utilisée dans les arguments de, par exemple, les scripts Perl (nécessite de configurer
Getopt::Long
ou de lancer le vôtre), mais nécessite toujours de lespace entre la commande et les arguments – encore une fois, cest une exigence du shell.
Réponse
Si vous devez transmettre la chaîne exacte test/(hello)
dans un programme, mettez-le entre guillemets simples:
someprogram "test/(hello)"
Chaque caractère est interprété littéralement entre guillemets simples, sauf le caractère guillemet simple lui-même. Si vous avez besoin dun guillemet simple dans la chaîne, passez-le sous la forme "\""
(fin de chaîne littérale, citation du caractère suivant, guillemet simple interprété littéralement, chaîne littérale de début).
echo "Lasciate ogne speranza, voi ch"\""entrate"
Ceci na aucun rapport avec le message derreur que vous affichez ici. /: is a directory
signifie que vous avez essayé dexécuter /
en tant que programme. Il y a probablement un endroit où vous avez essayé décrire le chemin complet dun programme mais laissé un espace supplémentaire, comme dans
/ path/to/program
Il peut y avoir dautres caractères de ponctuation faisant ce caractère moins évident ou de contrôle dans ce message. Pour faciliter le débogage, placez set -x
sur la deuxième ligne du script, juste après la ligne initiale #!
, afin que le shell affiche un trace de chaque ligne quil exécute.