неправильное использование обратных тиков? - PullRequest
2 голосов
/ 12 ноября 2010

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

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 ]

2 голосов
/ 12 ноября 2010

`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`"
1 голос
/ 12 ноября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...