我想为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:
- 不过最好在
~/.bashrc
中添加自己的别名,该别名在加载时由bash自动来源 - 如果你真的希望它是全局的,请遵循@user1257931的建议,将它放在
/etc/profile.d
中,在那里它将自动在新的shell实例上来源 - 正如@wich所建议的,没有理由在
fuserfunction
中添加killprocessatport
的别名。不过,您可能更喜欢为具有以下参数的函数调用使用别名:alias killhttpserver=fuserfunction 80
- 使用显式名称作为
fuserfunction
、类似fuserkillproc
的名称,甚至是您可能想到的更好的名称也是一个好主意
HTH
在这种情况下,不能使用别名或函数。在PATH上的一个位置创建一个可执行脚本(如sudo所配置,如果/etc/suoders
修改了root的PATH)。
#!/bin/sh
exec fuser -KILL -k -n tcp "$@"
保存脚本,然后使用chmod +x
设置其权限。