Cela peut être une question simple, mais comment utiliser des fichiers commençant par "-" avec des programmes en ligne de commande?
Par exemple, j'essaie d'utiliser pdfgrep
sur un fichier nommé -2013-01-01.pdf
mais il se plaint qu'il n'y a pas d'options définies pour 2, 0, 1, 3 et ainsi de suite.
Changer le nom de fichier en quelque chose qui ne commence pas par "-" le résout, mais ce n'est pas une option car les fichiers ne sont pas créés par moi. Je veux simplement vérifier si un changement spécifique que je sais arrive.
command-line
special-characters
filename
Kristoffer
la source
la source
grep -i dfv -- -myfile1 -myfile2
,.Réponses:
Très fréquemment
--
est utilisé sur la ligne de commande pour signaler à un programme qu'aucun commutateur de commande plus disponible ne sera utilisé. Ceci est particulièrement utile si un fichier contient un tiret, que le programme essaiera d'interpréter comme une option.Sans le
--
, une erreur est générée:Avec le
--
utilisé, nous avons une commande réussie:pdfgrep
est programmé pour comprendre--
que les arguments de ligne de commande suivants ne sont pas des options. La plupart des programmes font de même, mais tous ne comprennent pas--
. Pour les programmes qui ne le font pas, la solution consiste à ajouter le nom de fichier avec./
, comme ceci:Cela devrait fonctionner avec n'importe quelle commande, sauf si, pour une raison quelconque, la commande ne peut pas accepter un chemin, uniquement un nom de fichier pur.
Pour une introduction générale à la ligne de commande, consultez ce PDF utile .
la source
--
ne fonctionne pas avec tous les programmes en ligne de commande. J'avais supposé d'après ce commentaire du PO que l'pdfgrep
un d'entre eux ne le reconnaissait pas--
. Mais l'acceptation ici suggère le contraire. Dans tous les cas, un programme doit être codé pour être reconnu--
. De nombreux programmes utilisent des bibliothèques pour analyser leurs arguments, qui les reconnaissent--
. Mais certains ne le font pas, et parmi ceux-ci, certains ne sont pas codés pour être reconnus--
.--
la solution de contournement habituelle, mettez./
en avant le fichier:pdfgrep ./-2013-01-01.pdf
./
en avant est la solution la plus portable et la plus robuste. Fonctionne sur n'importe quel programme, sur n'importe quelle version Unix.Vous ajoutez le nom de fichier avec
./
(ou un autre chemin relatif ou absolu qui fonctionne). De cette façon, il est portable.Exemple:
L'utilisation de
--
pour indiquer la fin des options n'est pas toujours disponible. Certaines commandes le sauront, d'autres non. Et cela changera à travers différents systèmes. Donc au final, c'est moins portable.la source