Si no puede especificar el directorio de salida en ffmpeg
, simplemente ejecútelo dentro del directorio deseado usando una subcapa, p.
( cd $directory && ffmpeg... )
Я поискал и не нашел ничего общего с псевдонимами внутри 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