Вероятно, umount
записывает эти ошибки в стандартный поток вывода ошибок. С подстановкой команды $(..)
вы можете захватить только стандартный поток вывода. Правильное решение для того же было бы
msg="$(umount /u01 2>&1)"
Но вместо того, чтобы полагаться на подробную информацию, вы можете положиться на коды выхода этих команд, то есть сначала проверить
if mountpoint /u01 2>&1 > /dev/null; then
if ! umount /u01 2>&1 > /dev/null; then
printf '%s\n' "/u01 device must be busy"
else
printf '%s\n' "/u01 device is mounted"
fi
fi
Приведенная выше версия безопасно обнуляет выходные строки, созданные обеими этими командами, и печатает только состояние монтирования устройства. Коротко говоря, часть 2>&1 >/dev/null
означает, что все стандартные ошибки перенаправляются на стандартный вывод и в совокупности помещают их в нулевое устройство, чтобы они были видны в окне терминала.