Este é um caso de uso perfeito para ${parameter+substitution}
, já que estamos falando de parâmetros.
_src_release() {
. ${RELEASE:=/path/to/fallback}
} <<GET_RELEASE
${PREFERRED="$(whatever gets you /path/to/preferred)"}
${NEXT_BEST="$(something else gets you /path/to/next/best)"}
${IF_YOU_MUST="$(get /the/third/option)"}
${RELEASE="${PREFERRED:-"${NEXT_BEST:-"${IF_YOU_MUST}"}"}"}
GET_RELEASE
Você também pode fazer toda a lógica em um loop for na substituição do comando e, em seguida, fazer com que os resultados sejam exibidos em $RELEASE
quando você os obtiver. O ponto disso é que a variável pode testar seu próprio valor se você usá-lo corretamente.
Portanto, quando você .dot
source $RELEASE
se nenhuma dessas variáveis definidas em sua entrada tiverem sido preenchidas com valores diferentes de NULL
, ela será apenas . /path/to/fallback.
Você pode fazer quantos você quiser dessa forma, mas também um || short-circuit
test seguindo a instrução .dot
do shell acima tratará de seus erros - isso é realmente fácil de usar - e você pode procurar e significa como o que faz, o que pode ser útil.
Isso se você quiser fazer isso em .profile,
, mas eu suspeito que a melhor maneira é em /etc/login.defs
com $ENV_PATH
ou /etc/passwd.
. Para cada distro em que você deseja fazer login você pode criar um link especial que apenas $PATH
para essa distro específica ou definir especificamente o executável do shell como um script de wrapper para o que você deseja. Dessa forma, ele é tratado pelo daemon de login e não por scripts de perfil subvertíveis.