Почему псевдоним не работает внутри if?

Si no puede especificar el directorio de salida en ffmpeg, simplemente ejecútelo dentro del directorio deseado usando una subcapa, p.

( cd $directory && ffmpeg... )
5
24.07.2019, 23:10
1 ответ

Я поискал и не нашел ничего общего с псевдонимами внутри 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
4
27.01.2020, 20:41

Теги

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