问题描述
我有Ubuntu 14.04.2。我希望这样做,以便所有用户自动拥有一组特定的别名。我在个人.bashrc中设置了别名,但我不想手动将它们复制到其他用户。理想情况下,它也应该为新创建的用户自动设置它们。
最佳解决方案
您可以在/etc/profile.d/
中创建一个脚本,为所有用户创建别名:
-
在
/etc/profile.d
中创建一个名为00-aliases.sh
(或任何其他奇特名称)的文件:gksu gedit /etc/profile.d/00-aliases.sh
-
将别名放在此文件中。例:
alias foo='bar --baz' alias baz='foo --bar'
-
保存文件
-
重新启动所有打开的终端以应用更改。
-
请享用!
一些说明:
-
/etc/profile
是一个在~/.profile
之前运行的全局文件。 -
/etc/profile.d/
是一个包含/etc/profile
调用的脚本的文件夹 -
当调用
/etc/profile
时(当您启动/登录shell时),它会搜索在/etc/profile.d/
中以.sh
结尾的任何文件,并使用以下命令之一运行它们:source /etc/profile.d/myfile.sh
. /etc/profile.d/myfile.sh
-
我将
00-
放在文件名之前,使其在其余脚本之前执行。 -
您也可以在
/etc/profile
中添加别名,但不建议这样做。
次佳解决方案
别名只能在shell内部工作。如果您想要像可执行文件一样可以广泛访问的内容,可以向/usr/bin
添加一个小的快捷方式脚本,例如:
#!/bin/sh
ls -l "$@"
"$@"
将所有参数传递给可执行文件。脚本的名称将是可执行文件的名称。
资料来源:https://unix.stackexchange.com/a/52509/15954
第三种解决方案
正如here所指出的,在/etc/bash.bashrc
中添加全局别名可能更好:
alias foo='bar --baz'
alias baz='foo --bar'
,因为某些(non-login)shell可以忽略/etc/profile.d
中的脚本。花了我几个小时才弄清楚为什么/etc/profile.d
不起作用。
参见例如https://askubuntu.com/a/606882/和Understanding .bashrc and .bash_profile用于区分shell。