![sudo 误解别名](https://linux22.com/image/168351/sudo%20%E8%AF%AF%E8%A7%A3%E5%88%AB%E5%90%8D.png)
在我的 shell 会话中~/.bashrc
,我有一套alias link='ln -sf'
,并且它在我的 shell 会话中相应地工作。
但是,对于根受保护的位置,我需要sudo
在命令开头使用,它会抛出以下错误:
link: cannot create link '<$2>' to '<$1>': Operation not permitted
究竟发生了什么?我该如何绕过它?
答案1
sudo
是一个外部命令,它不知道您的别名。只有您的 shell 知道您的别名,但sudo
它不是其中的一部分。
在这种情况下,我想sudo
尝试运行/usr/bin/link
二进制文件,在我的 Linux 系统上这是一个简单的命令,它总是创建一个难的通过调用link(2)
系统调用进行链接:
$ link --help
Usage: link FILE1 FILE2
or: link OPTION
Call the link function to create a link named FILE2 to an existing FILE1.
--help display this help and exit
--version output version information and exit
GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Full documentation at: <https://www.gnu.org/software/coreutils/link>
or available locally via: info '(coreutils) link invocation'
答案2
这里的问题是 bash 只计算别名命令的第一个单词,并用该别名的文本替换文本。
当你这样做时sudo <your_alias>
,bash 只评估第一个单词本身sudo
,而不扩展你的别名命令。
解决方法是为 sudo 本身创建一个别名
如果您创建一个别名,例如alias='sudo '
(请注意sudo命令后面的空格)你可以完成你想要的命令。