Pour la commande:/usr/bin/sh -c "ls 1`" (une citation arrière après 1).
Comment le faire fonctionner avec succès? L'ajout d'une barre oblique inverse avant "` "ne fonctionne pas. `est un personnage spécial, comme nous le savons, et j’ai aussi essayé de l’entourer de guillemets simples (/ usr/bin/sh -c" ls 1'` '"), mais cela ne fonctionne pas non plus.
Les erreurs sont toujours:
% /usr/bin/sh -c "ls 1\`"
Unmatched `
Vous devez éviter le backtick, mais aussi le backslash:
$ touch 1\` $/bin/sh -c" ls 1 \\\ `" 1`
Vous devez y échapper "deux fois" parce que vous entrez cette commande dans un environnement (tel qu'un script Shell) qui interprète une fois la chaîne entre guillemets. Il est ensuite interprété à nouveau par le sous-shell.
Vous pouvez également éviter les guillemets et éviter ainsi la première interprétation:
$/bin/sh -c 'ls 1 \' ' 1`
Une autre méthode consiste à stocker le nom de fichier dans une variable et à utiliser cette valeur:
$ export F = '1`' $ printenv F 1` $/bin/sh -c 'ls $ F' # notez que/bin/sh interprète $ F, pas mon shell actuel 1`
Et enfin, ce que vous avez essayé fonctionnera sur certains obus (j'utilise bash, comme pour les exemples ci-dessus), mais apparemment pas avec votre shell:
$/bin/sh -c "ls 1 '\' '" 1` $ csh # enter csh, la ligne suivante est exécutée dans cet environnement %/bin/sh -c "ls 1 '\' '" Sans correspondance `.
Je vous suggère fortement d'éviter ces noms de fichiers à la première place .
Utilisez des guillemets simples à la place:
/usr/bin/sh -c 'ls 1\`'
/usr/bin/sh -c "ls '1\`'"