1

Я хочу отслеживать строки динамического файла и для этого использую команду 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

Вывод является статическим, потому что $() разрешается вашей оболочкой перед началом 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)"'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .