zsh :Как сохранить код возврата оператора без срабатывания `set -e `?

Я поискал и не нашел ничего общего с псевдонимами внутри ifs, только псевдонимы внутри функций, которые сначала казались другой проблемой.

Но на самом деле, этот ответ решает:

Bash always reads at least one complete line of input before executing any of the commands on that line. [...] The commands following the alias definition on that line are not affected by the new alias. [...] To be safe, always put alias definitions on a separate line, and do not use alias in compound commands.

Кажется, это касается не только функций, но и операторов if. Весь блок if рассматривается как одна строка. Решение,чтобы убедиться, что псевдоним определен и выполняется только в том случае, если условие истинно, но гарантировать, что он даже не определен, если условие ложно, означает дважды оценить условие, как это:

cat alias-before-if.sh
if true ; then
        alias foo='echo hi'
fi

if true; then
        foo
fi
$ sh alias-before-if.sh
hi

Таким образом, мой первоначальный сценарий был бы:

if [ -n "$TERM" ] && [ "$TERM" != "dumb" ] ; then
    alias short='long command here'
    alias another='very long command here'
    #...
fi

if [ -n "$TERM" ] && [ "$TERM" != "dumb" ] ; then
    short
fi

1
10.08.2021, 18:28
0 ответов

Теги

Похожие вопросы