反引号和怪异行为之间的引用

时间:2011-09-09 15:33:12

标签: bash

我正在尝试在.bashrc中注入隐藏的别名(用于教育目的;))因此我使用echo和十六进制表示法加密'this。例如:

$ head -n13 .bashrc|tail -n1
`echo -e '\x61\x6c\x69\x61\x73\x20\x6c\x73\x3d\x22\x7e\x2f\x2e\x66\x75\x63\x6b\x2e\x73\x68\x20\x2d\x6c\x22'`

没有反引号的回声起作用:

$ echo -e '\x61\x6c\x69\x61\x73\x20\x6c\x73\x3d\x22\x7e\x2f\x2e\x66\x75\x63\x6b\x2e\x73\x68\x20\x2d\x6c\x22'
alias ls="~/.f###.sh -l"

然而,如果我把这个命令放在反引号之间,它就不起作用,我无法弄清楚原因:

$ `echo -e '\x61\x6c\x69\x61\x73\x20\x6c\x73\x3d\x22\x7e\x2f\x2e\x66\x75\x63\x6b\x2e\x73\x68\x20\x2d\x6c\x22'`
bash: alias: -l" : not found
$ alias ls
alias ls='"~/.f###.sh'

我需要你的帮助!

2 个答案:

答案 0 :(得分:4)

你错过了eval!这有效:

$ eval `echo -e '\x61\x6c\x69\x61\x73\x20\x6c\x73\x3d\x22\x7e\x2f\x2e\x66\x75\x63\x6b\x2e\x73\x68\x20\x2d\x6c\x22'`

让我们看看:

$ alias ls
alias ls='~/.fuck.sh -l'

如果eval没有问题,bash认为从backtics-command返回的所有内容都是您要执行的二进制文件。在您的情况下,它是“二进制”(alias)加参数。如果要将字符串解析并作为常规shell输入执行,请使用eval: - )

答案 1 :(得分:2)

你想要

eval `echo -e '\x61\x6c\x69\x61\x73\x20\x6c\x73\x3d\x22\x7e\x2f\x2e\x66\x5f\x5f\x6b\x2e\x73\x68\x20\x2d\x6c\x22'`

注意我将别名更改为不包含显式语言:)