2

我试图通过从文本文件中读取命令来运行它,但它失败了。当我进入完全相同的行时,它正在工作,很难。我很惊讶它甚至尝试执行移动命令,但收到一条错误消息,翻译为“找不到文件或目录”。显然错误消息在这里没有说实话。有人可以解释一下吗?

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$

我这样做是为了学校,所以回答会很好。我们得到结果的方式并不重要,尽管我尝试的方法似乎并不重要。

4

2 回答 2

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`"
于 2010-11-12T02:55:38.833 回答
1

波浪号“~”不会插入反引号内。

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

于 2010-11-12T02:54:56.977 回答