【发布时间】:2014-01-21 23:33:27
【问题描述】:
我正在开发一个命令行应用程序,我希望在下载应用程序文件后运行 setup.py 脚本时,为该程序永久创建一个别名(即不仅仅是为这个终端会话) .我遇到的问题是,例如,如果用户使用的是 zsh,那么我需要将其添加到 .zshrc,但如果用户使用的是 bash 等,情况就不同了。有标准的方法吗?
谢谢!
【问题讨论】:
我正在开发一个命令行应用程序,我希望在下载应用程序文件后运行 setup.py 脚本时,为该程序永久创建一个别名(即不仅仅是为这个终端会话) .我遇到的问题是,例如,如果用户使用的是 zsh,那么我需要将其添加到 .zshrc,但如果用户使用的是 bash 等,情况就不同了。有标准的方法吗?
谢谢!
【问题讨论】:
蛮力(丑陋)方式:
#!/bin/sh
for user in joe sally bob
do
cd "/home/$user"
[ -f .bashrc ] && echo "alias whatever" >>.bashrc
[ -f .zshrc ] && echo "alias zversion" >>.zshrc
done
更优雅的方法是为别名使用单个系统文件,例如/etc/aliases.local,修改用户启动文件一次即可获取。另外,将source /etc/aliases.local 行添加到/etc/skel 中的相应文件中,以便新创建的用户将自动获取它。
或者,更好的是,在许多发行版中,有一个公共文件,/etc/bash.bashrc 或 /etc/bashrc 或类似文件,它是在启动时获取的。只需在那里进行修改。然后,不需要修改用户的个人启动文件。 (Zsh 可能也有类似的东西。)
【讨论】:
cd ~"$user" 不起作用,因为波浪号扩展发生在参数扩展之前。波浪号将按字面意思传递给cd 命令,而不是扩展到给定用户的主目录。