Создание вложенного awk отказоустойчивого - PullRequest
1 голос
/ 13 апреля 2020

У меня есть эта команда (часть для l oop), которая пытается получить время начала процесса в секундах и сохраняет его в переменной для дальнейшего использования. Команда разбирает /proc/<pid>/stat. В контексте этой команды процесс может быть эфемерным, и, следовательно, к тому времени, когда я действительно выполню эту команду, каталог может больше не существовать. Это приводит к сбою вложенного awk и вызывает синтаксическую ошибку во внешней команде деления. Как я могу предотвратить это?

starttime=$(($(awk '{print $22}' $d/stat) / systick));

$d is /proc/<pid>

1 Ответ

1 голос
/ 14 апреля 2020

Я бы сделал так:

starttime=$(($(awk '{print $22}' $d/stat 2>/dev/null || echo 0) / systick));

Обычно, если по какой-то причине не удается awk, например, если специальный файл статистики PID больше не существует, он возвращает 0 в деление.

Таким образом, вам не нужно вносить никаких изменений в код.

PS: я предполагаю, что systick всегда будет отличаться от 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...