bash - 错误使用反引号执行?

标签 bash backticks

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

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$

我正在为学校做这个,所以答案会很好。尽管我的尝试似乎没有必要,但我们获得结果的方式并不重要。

最佳答案

`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`"

关于bash - 错误使用反引号执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4161201/

相关文章:

bash - 如何通过评估 bash 控制字符来摆脱它们?

linux - 使用命令输入的 Bash 别名

ruby - 在 Ruby 中使用反引号和管道

ruby - Ruby 中是否有反引号的替代语法?

regex - Perl:找不到文件时抑制反引号的输出

bash - 选择字符串的一部分

node.js - 启动时设置 sh 脚本时出错 - 英特尔 Galileo Gen 1

escaping - 如何转义 .rst 文件中的 "`"反引号字符?

Markdown : writing inline dplyr code if column names have spaces defined with backticks

linux - EasyEngine安装过程中如何回答安装问题?