GNU/Linux >> Tutoriels Linux >  >> Linux

Comment créer un fichier nommé comme un argument de ligne de commande ?

Appelez la commande comme suit :

mkdir -- -a

Le -- signifie que les options se terminent après cela, donc le -a est interprété littéralement et non comme une option de mkdir . Vous trouverez cette syntaxe non seulement dans mkdir , mais tout utilitaire compatible POSIX à l'exception de echo et test . De la spécification :

L'argument -- doit être accepté comme un délimiteur indiquant la fin des options. Tous les arguments suivants doivent être traités comme des opérandes, même s'ils commencent par le caractère '-'. L'argument -- ne doit pas être utilisé comme option ou comme opérande.

Utilisation de -- comme protection est recommandée pour presque toutes les actions où vous traitez des noms de fichiers et voulez vous assurer qu'ils ne cassent pas la commande, par ex. lors du déplacement de fichiers dans une boucle, vous pouvez appeler ce qui suit, de sorte qu'un fichier appelé -i n'est pas (dans ?) correctement analysé en tant qu'option :

mv -- "$f" new-"$f"

La façon la plus simple de fonctionner avec n'importe quel programme raisonnable est d'utiliser un nom de chemin relatif devant le - , par exemple. mkdir ./-a créera un répertoire appelé -a dans le répertoire de travail courant.

L'exemple le plus courant d'utilisation de cette "astuce" est lorsque vous souhaitez supprimer un fichier qui commence par un tiret, vous pouvez donc faire rm ./-a .


La raison pour laquelle mkdir '-a' , ou mkdir \-a ne fonctionne pas parce que ces deux méthodes (utilisant des guillemets ou des barres obliques inverses) sont utilisées pour empêcher votre shell (probablement bash ) de leur donner une signification particulière. Depuis -a ne signifie rien de spécial pour le shell de toute façon, cela n'a aucun effet sur la façon dont il est transmis à mkdir .

Jusqu'à mkdir est concerné, il reçoit une liste d'arguments du shell, et il ne peut pas dire si vous les avez mis entre guillemets ou non, ou s'il y avait une barre oblique inverse. Il ne voit qu'un seul argument -a . C'est pourquoi vous avez besoin du -- comme expliqué dans les autres réponses.


Linux
  1. Comment créer une base de données dans MySQL à l'aide de la ligne de commande

  2. Comment extraire le fichier tar.gz sous Linux à l'aide de la ligne de commande

  3. Comment passer un argument de ligne de commande dans un script shell ?

  4. Comment analyser chaque ligne d'un fichier texte comme argument d'une commande ?

  5. Comment remplacer un fichier en jar par une ligne de commande sous Linux ?

Comment créer un fichier sous Linux

Comment créer un fichier Tar Gz

Comment créer un répertoire sous Linux à l'aide de la commande mkdir

Comment créer un lien symbolique sous Linux à l'aide de la commande Ln

Comment envoyer un e-mail avec une pièce jointe à partir de la ligne de commande

Comment extraire le fichier Tar.xz sur la ligne de commande Linux