我正在尝试在.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'
我需要你的帮助!
答案 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'`
注意我将别名更改为不包含显式语言:)