У меня есть довольно простая команда, которая при запуске внутри bash выводит оставшееся дисковое пространство в stdout
:
echo -n "External1TB: $(grep -Poi '(\/mnt\/External1TB\s+)\K(.*)' <(df -H --output=target,avail))B"
Я использую перенаправление процесса <()
передать поток от df
до grep
, который затем обрабатывает выходные данные и отфильтровывает только оставшееся пространство.Все это упаковано в подоболочку $()
и передано в echo
, поэтому я могу добавить к выводу имя диска.
Пример вывода: External1TB: 882GB
Работает довольно хорошокогда он запускается внутри интерактивной оболочки bash, однако, если я пытаюсь запустить его, используя bash -c
, например:
bash -c "echo -n "External1TB: $(grep -Poi '(\/mnt\/External1TB\s+)\K(.*)' <(df -H --output=target,avail))B"",
, то всегда выводится: External1TB:
.Похоже, что либо grep
, либо df
по какой-то причине терпят неудачу.
Что я делаю не так?