让 sudo 为别名工作

die*_*lar 3 bash sudo path alias

我在拥有 GNOME 的 Fedora 20 中安装了 Sublime Text 3,因为我无法从终端调用它,我创建了一个.bash_aliases文件,其中一行如下:

alias sublime='sublime_text'
Run Code Online (Sandbox Code Playgroud)

因此还通过编辑.bashrc文件添加将 sublime_text 文件位置添加到 PATH :

export PATH=$PATH:/usr/local/share/applications/sublime-text-3/
Run Code Online (Sandbox Code Playgroud)

但是,当我想编辑任何可能首先获得sudo 权限的文件时,我想做:

sudo sublime sudoLikelyFile
Run Code Online (Sandbox Code Playgroud)

或者

sudo sublime_text sudoLikelyFile
Run Code Online (Sandbox Code Playgroud)

但是我得到:

sudo: sublime: command not found
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

Chr*_*own 6

这里有两个潜在的问题。

首先,你需要让你的 shell 在以下之后展开别名sudo

alias sudo='sudo '
Run Code Online (Sandbox Code Playgroud)

来自man bash

如果别名值的最后一个字符是空白,则还检查别名之后的下一个命令字的别名扩展。

其次,在许多发行版上,$PATHsudo 不会传播到新的 shell。您可以手动更改secure_path以添加sublime_text可执行文件所在的目录:

Defaults secure_path = [...]:/usr/local/share/applications/sublime-text-3
Run Code Online (Sandbox Code Playgroud)

...或者您可以完全禁用secure_path(注意:secure_path确保攻击者无法更改您的路径并使用它来影响您将以root身份运行的命令,因此请仔细考虑这一点):

Defaults !secure_path
Run Code Online (Sandbox Code Playgroud)