Почему я не могу передать вывод из `nvim - c 'q' --startuptime> (tail -n 1)` - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь профилировать время запуска терминального приложения.

Это включает в себя несколько раз открывать и закрывать приложение, используя 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 }'
...