如何为包括sudo在内的用户启用系统范围的功能



我想为killprocessatport创建一个全局别名,所以我把它放在/etc/bash.bashrc的末尾

fuserfunction() {
fuser -KILL -k -n tcp $1
}
alias killprocessatport=fuserfunction

然后我在的最后放入/etc/profile

source /etc/bash.bashrc

然后我用bash /etc/profile加载它,期望带参数的别名可以工作,但它不工作:

$ killprocessatport 80
killprocessatport: command not found

为什么不呢?

它不起作用,因为当你这样做时:

bash /etc/profile

打开一个新的shell,执行概要文件脚本,然后返回到当前的shell。

事实上,这就是为什么要加载/etc/bash.bashrc的内容,就像在/etc/profile中加载source /etc/bash.bashrc一样。

因此,要将其加载到当前的shell中,您应该运行:

source /etc/profile

相反。

Nota Bene

  1. 不过最好在~/.bashrc中添加自己的别名,该别名在加载时由bash自动来源
  2. 如果你真的希望它是全局的,请遵循@user1257931的建议,将它放在/etc/profile.d中,在那里它将自动在新的shell实例上来源
  3. 正如@wich所建议的,没有理由在fuserfunction中添加killprocessatport的别名。不过,您可能更喜欢为具有以下参数的函数调用使用别名:alias killhttpserver=fuserfunction 80
  4. 使用显式名称作为fuserfunction、类似fuserkillproc的名称,甚至是您可能想到的更好的名称也是一个好主意

HTH

在这种情况下,不能使用别名函数。在PATH上的一个位置创建一个可执行脚本(如sudo所配置,如果/etc/suoders修改了root的PATH)。

#!/bin/sh
exec fuser -KILL -k -n tcp "$@"

保存脚本,然后使用chmod +x设置其权限。

相关内容

  • 没有找到相关文章

最新更新