Использование команды watch с "echo -e"

653
Gefolge

Я хочу контролировать строки динамического файла, и я использую watchкоманду для этого. У меня есть 2 файла: test-statusи iplist_test. Я контролирую что-то внутри iplist_testи печатаю этот вывод test-status. iplist_testФайл имеет 150 строк, и я хочу увидеть результат, как 14/150или 25/150др. Я использую следующую команду для этого:

watch -n .1 echo -e "$(cat test-status | wc -l)\/$(cat iplist_test | wc -l)" 

Команда не работает как watchкоманда, она статическая. Я обновляю вручную для живого результата. Что не так с моей командой?

1

1 ответ на вопрос

2
Kamil Maciorowski

Вывод является статическим, потому что $()разрешается вашей оболочкой перед watchзапуском.

Цитирование с ''должно помочь. Одинарные кавычки предотвращают расширение, этот путь $()будет передан буквально watch, а затем проанализирован каждый раз:

watch -n .1 'echo -e "$(cat test-status | wc -l)/$(cat iplist_test | wc -l)"' 

Также вы злоупотребляете cat. Это должно работать без лишних catпроцессов:

watch -n .1 'echo -e "$(<test-status wc -l)/$(<iplist_test wc -l)"' 

Похожие вопросы