我通过 SSH 连接的一组服务器使用默认 .bashrc 中的 switch 语句来进行特定于系统的配置:
case "$HOSTNAME" in:
systemA*|systemB|)
# some local definitions here
;;
systemC*|systemD|)
# some local definitions here
;;
*)
echo "No bashrc definitions for $HOSTNAME"
esac
但我也在我的 Mac 上本地使用 bash,所以我决定做个聪明人,并扩展此语句以包含我不通过 SSH 连接到另一个语句的情况。
然而,Mac经常根据我的网络环境更改我的首选主机名(通常当我在工作时使用有线连接,而不是在家里使用 Wi-Fi 时,但我认为这取决于 DHCP 配置)。我知道我可以覆盖它,但这是最好的主意吗?有没有更好的解决方案来让 bashrc 设置仅在我不在远程 shell 中时才有效?
答案1
你可以这样做:
case "$HOSTNAME" in:
systemA*|systemB)
# some local definitions here
;;
systemC*|systemD)
# some local definitions here
;;
*)
if [ "$(uname)" = "Darwin" ]; then
echo "I'm on a Mac!"
else
echo "No bashrc definitions for $HOSTNAME"
fi
esac
uname
将为您提供有关您所使用的系统的大量基本信息。uname --help
的选项。
更新:
或者(这就是我所做的,你可以看到这里在我的 .bashrc 的末尾)您可以做的是创建.bashrc_local_Darwin
针对 Mac 的特定配置和.bashrc_local_Linux
针对 Linux 的特定配置。这些可以进入版本控制,因为它们仍然适用于所有 Mac 和您连接的所有 Linux 机器。所以你要做的就是.bashrc_local
在每个你想要自定义配置的盒子上创建一个只适用于那个盒子您不将其放入版本控制中。然后您可以获取这些文件如果它们存在的话等等,你有一个非常整洁的系统,没有笨拙且难以维护的case...esac
语句。