Неправильное использование обратных тиков?

Я попытался запустить команду, прочитав ее из текстового файла, но она не удалась. когда я вхожу в ту же строку, это работает, жестко. Я удивлен, что он даже попытался выполнить команду перемещения, но получил сообщение об ошибке, которое переводится как "Файл или каталог не найден". очевидно, сообщение об ошибке не говорит правду здесь. кто-нибудь может это объяснить?

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$

Я делаю это для школы, поэтому ответ будет хорошим. то, как мы доберемся до наших результатов, не имеет значения, хотя то, что я пробовал, кажется несущественным.

2 ответа

Решение

`head -n7 mkdoc|tail -n1` заменяется выводом команды, которая mv nutzer.1.gz ~/public_html/man/man1/, Этот вывод затем интерпретируется как команда, mv команда.

Однако это не удается, поскольку расширение тильды уже выполнено. ~ на этом этапе не заменяется вашим домашним каталогом; это просто тильда. Это как если бы вы пытались выполнить

'mv' 'nutzer.1.gz' '~/public_html/man/man1/'

По той же причине вы не можете использовать $HOMEили второй набор обратных меток, или любая другая динамическая конструкция. Для этого вам нужно будет использовать evalили передайте строку во вторую оболочку.

eval `head -n7 mkdoc|tail -n1`
bash -c "`head -n7 mkdoc|tail -n1`"

Тильда "~" не интерполируется внутри спинок.

[отредактировано] Вместо этого вы должны иметь возможность использовать: eval "$(head -n7 mkdoc|tail -n1)"

Другие вопросы по тегам