Это - то, что я использую в своем .profile для проверки на различные оболочки в системах, я продолжаю работать. Это не делает тонкие различия между ksh88 и ksh93, но это никогда не приводило меня к сбою.
Обратите внимание, что это не требует единственного ветвления или канала.
# Determine what (Bourne compatible) shell we are running under. Put the result
# in $PROFILE_SHELL (not $SHELL) so further code can depend on the shell type.
if test -n "$ZSH_VERSION"; then
PROFILE_SHELL=zsh
elif test -n "$BASH_VERSION"; then
PROFILE_SHELL=bash
elif test -n "$KSH_VERSION"; then
PROFILE_SHELL=ksh
elif test -n "$FCEDIT"; then
PROFILE_SHELL=ksh
elif test -n "$PS3"; then
PROFILE_SHELL=unknown
else
PROFILE_SHELL=sh
fi
Во-первых, ваше решение проблемы хорошее. Во-вторых, это зависит от ОС. Crunchbag основан на Debian, так что это решение может справиться с этой задачей:
https://serverfault.com/questions/487939/permanently-adding-source-policy-routing-rules
В системах на основе RHEL также можно добавить <ifname>-rule
и <ifname>-route
.