une mauvaise utilisation de l'exécution des accents graves?
Question
J'ai essayé d'exécuter une commande en le lisant à partir d'un fichier texte, mais il a échoué. quand je rentre dans la même ligne, il travaille, dur. im suprised qu'il avait même essayer d'exécuter la commande de mouvement, mais a un errormessage qui se traduit par « Fichier ou répertoire introuvable ». évidemment le errormessage ne dit pas la vérité ici. Quelqu'un peut-il expliquer cela?
s39339@compute:~/spr/man/de$ head -n7 mkdoc|tail -n1
mv nutzer.1.gz ~/public_html/man/man1/
s39339@compute:~/spr/man/de$ `head -n7 mkdoc|tail -n1`
mv: Verschieben von „nutzer.1.gz“ nach „~/public_html/man/man1/“ nicht möglich: Datei oder Verzeichnis nicht gefunden
s39339@compute:~/spr/man/de$ ls
gzip mkdoc nutzer.1 nutzer.1.gz nutzer.pod rbsh
s39339@compute:~/spr/man/de$ mv nutzer.1.gz ~/public_html/man/man1/
s39339@compute:~/spr/man/de$
Je fais cela pour l'école si une réponse serait bien. la façon dont nous obtenons nos résultats n'a pas d'importance, même si ce que j'ai essayé semble unnessecary façon.
La solution
`head -n7 mkdoc|tail -n1`
est remplacé par le résultat de la commande, qui est mv nutzer.1.gz ~/public_html/man/man1/
. Cette sortie est alors interprétée comme une commande, une commande de mv
.
Il échoue, cependant, parce que l'expansion de tilde a déjà été réalisée. ~
ne se substitue pas à votre répertoire personnel à ce stade; il est juste un caractère tilde plaine. Il est comme si vous aviez essayé d'exécuter
'mv' 'nutzer.1.gz' '~/public_html/man/man1/'
Pour la même raison, vous ne pouvez pas utiliser $HOME
, ou un second jeu de guillemets obliques, ou toute autre construction dynamique. Pour ce faire, vous aurez besoin d'utiliser eval
, ou passer la chaîne à une seconde coque.
eval `head -n7 mkdoc|tail -n1`
bash -c "`head -n7 mkdoc|tail -n1`"
Autres conseils
Le tilde "~" n'est pas interpolé à l'intérieur des apostrophes inverses.
[edited] Au lieu de cela, vous devriez être en mesure d'utiliser: eval "$ (tête -n7 mkdoc | queue -n1)"