Я пытаюсь профилировать время запуска терминального приложения.
Это включает в себя несколько раз открывать и закрывать приложение, используя for
l oop, захватывая соответствующие строки вывода, а затем отправляя их на awk
, чтобы вычислить среднее время запуска.
Простейшая форма моей команды, которая терпит неудачу, такова: nvim -c 'q' --startuptime >(tail -n 1) | awk '{ print $1 }'
.
Она не только не работает должным образом, но и портится из-за интерфейса моей оболочки (zsh) в том, что курсор исчезает, и Мне нужно открыть новое окно терминала, чтобы исправить проблему.
Если я не включаю канал, команда успешно выводит на мой терминал, и если я затем вручную копирую вывод с моего терминала в буфер обмена , используйте команду моего менеджера окон «вставить из буфера обмена» и перенаправьте его на awk
, результат будет таким, как ожидалось.
Но если вместо передачи по трубопроводу на awk
я направлю трубку в буфер обмена, я все равно вижу вывод в моем терминале, и если я затем вставляю содержимое моего буфера обмена в новый файл, я получаю такой вид gibberi sh:
嬛ㄿ㐰根嬛㈲〻〻᭴㽛栱㴛嬛ᭈ䩛崛ㄱ㼻ᬇ㽛〲㐰᭨㍛栴嬛㈿栵嬛㈿氵嬛嬛ᭈ䩛嬛ㄿ〰栴嬛′᭱㉛焠嬛㌲ᭂ㍛栴嬛㈿栵嬛㈿氵嬛′᭱浛ᬏ㍛栴嬛㈿栵嬛ㄿ᭬ᬾ㽛〱㤴᭬㉛㬳㬰琰嬛㈿〰水嬛ㄿ〰水嬛㐳᭨㽛㔲h
Я подозреваю, что открытие и закрытие приложения терминала как часть команды, что является причиной проблемы, но может ли кто-нибудь помочь мне более точно понять, что идет не так (и в идеале, как это исправить)?
Полная команда, над которой я работаю:
for i in $(seq 1 10)
do nvim -c 'q' --startuptime >(tail -n1 | sed 's/^0*//')
done | awk NF | awk '
BEGIN{ min = 1000; sum = 0 }
$1 > max { max = $1 }
$1 < min { min = $1 }
{ sum = sum + $1 }
END { print "Mean: ", sum / NR, "Max: " max, "Min: ", min, "Range: ", max - min }'