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

时间:2014-02-20 18:01:33

标签: bash alias

我想为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

为什么不呢?

2 个答案:

答案 0 :(得分:3)

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

bash /etc/profile

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

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

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

source /etc/profile

代替。

Nota Bene

  1. 虽然更好的想法是在~/.bashrc中添加自己的别名,这些别名会在加载时通​​过bash自动获取;
  2. 如果您真的希望它是全球性的,请按照@ user1257931的建议将其放入/etc/profile.d,它将自动在新的shell实例上获取;
  3. 正如@wich所建议的那样,没有理由为killprocessatport添加fuserfunction的别名。alias killhttpserver=fuserfunction 80。但是,您可能更喜欢使用以下参数来调用函数的别名:fuserfunction
  4. fuserkillproc使用显式名称也是一个好主意,例如{{1}},或者甚至可以提出更好的...
  5. HTH

答案 1 :(得分:1)

在这种情况下,您无法使用别名功能。在PATH上的位置创建可执行脚本(如果您的/etc/suoders修改了根路径,则由sudo配置)。

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

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