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