错误使用反引号执行?

时间:2010-11-12 02:49:50

标签: bash backticks

我尝试通过从文本文件中读取命令来运行命令,但它失败了。当我进入完全相同的线路时,它正在工作,艰难。我很惊讶它甚至尝试执行move命令,但得到了一个错误消息,转换为“找不到文件或目录”。显然错误消息并不是说实话。有人可以解释一下吗?

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 个答案:

答案 0 :(得分: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,或将字符串传递给第二个shell。

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

答案 1 :(得分:1)

波形符号“〜”不会在反引号内插入。

[编辑] 相反,你应该能够使用:eval“$(head -n7 mkdoc | tail -n1)”