在我的~/.bashrc中,我设置了alias link='ln -sf'集,它在shell会话期间也相应地工作。
但是,对于根受保护的位置,需要在命令开头使用sudo,它将引发以下错误:link: cannot create link '<$2>' to '<$1>': Operation not permitted
到底发生了什么?我怎么能绕过它?
发布于 2020-02-27 16:46:10
sudo是一个外部命令,它不知道别名。只有你的外壳知道你的别名,而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:
Full documentation at:
or available locally via: info '(coreutils) link invocation'发布于 2020-02-27 17:12:18
这里的问题是bash只计算别名命令的第一个单词,并将文本替换为别名的文本。
当您执行sudo 时,bash只是计算第一个单词,即sudo本身,而不是展开别名命令。
解决方法是为sudo本身创建一个别名。
如果创建类似于alias='sudo '的别名(请注意sudo命令后的空格),则可以完成所需的命令。
https://unix.stackexchange.com/questions/570094
复制相似问题