В качестве расширения ответа Кристиана я создал следующую функцию bash, которая работает, если окно консоли меньше, чем вывод команды:
function watcher()
{
lines=$(tput lines)
while true; do
output="$($@ | head -n $lines)"
clear
echo -e "$output"
sleep 2
done
}
Это позволяет передавать любую команду наблюдателю. Если вы используете git, используйте git config --global color.status always
, а затем:
watcher git status
Будет отображать постоянно обновляемый вывод статуса git.
Это симптоматично для этих двоих вместе:
-u
, что приводит к тому, что неустановленные переменные вызывают ошибкуunbound variable
WARN
не была установлена Чтобы подтвердить или исключить эту ситуацию, выполните:
echo $-
, установлен ли флаг u
echo "$WARN"
, чтобы убедиться, что он установлен, или выполните отладку с помощью параметра x
Я понял!
При замене declare -r
на readonly
ошибка больше не появляется.
Using the declare builtin restricts the scope of a variable.
http://tldp.org/LDP/abs/html/declareref.html
Вот как я это исправил:
### log.sh
readonly WARN=3
warn() {
echo "${WARN}: $@" >&2
}