Подстановка команды bash umount - PullRequest
1 голос
/ 10 мая 2019

Я бегу по RHEL 7 и захожу сюда. Кажется, подстановка команды не работает для команды umount. Однако он работает как обычно для других команд. Например:

[root@localhost ~]# msg=$(umount /u01)
umount: /u01: target is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
[root@localhost ~]# echo "$msg"
- nothing here -


[root@localhost ~]# msg=$(mountpoint /u01)
[root@localhost ~]# echo "$msg"
/u01 is a mountpoint

Что я, вероятно, могу сделать, это сначала использовать точку монтирования, а затем размонтировать, если точка монтирования существует. Затем проверьте состояние umount - если есть ошибка, я думаю, устройство должно быть занято.

1 Ответ

2 голосов
/ 10 мая 2019

Вероятно, 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 означает, что все стандартные ошибки перенаправляются на стандартный вывод и в совокупности помещают их в нулевое устройство, чтобы они были видны в окне терминала.

...