sudo 误解别名

sudo 误解别名

在我的 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命令后面的空格)你可以完成你想要的命令。

相关内容