Fi sh имеет встроенную функцию профилирования.
Используйте как
fish --profile /tmp/fish.profile -i -c exit
Это создаст файл с именем "/tmp/fish.profile", выглядящий например,
Time Sum Command
415 2505 > builtin source /usr/share/fish/config.fish
15 15 -> set -g IFS \n\ \t
6 6 -> set -qg __fish_added_user_paths
4 4 -> set -g __fish_added_user_paths
1 4 -> if not set -q __fish_initialized...
3 3 --> not set -q __fish_initialized
3 3 -> function __fish_default_command_not_found_handler...
4 72 -> if status --is-interactive...
Первый столбец - это время, которое потребовалось для самой команды (в микросекундах, поэтому 1000000 - это 1 с), второй - время, которое она и все ее части (включая вызовы функций и подстановки команд) заняли, третья - это команда плюс индикатор того, насколько глубоко это находится в стеке вызовов.
Чтобы увидеть самые большие временные инвестиции, sort -nk2 /tmp/fish.profile
полезно - это сортируется по второму столбцу, поэтому он показывает большие элементы заявки последний (т.е. ближайший к следующему запросу).
Обратите внимание, что это также показывает внутренний запуск fi sh - например, что set -g IFS
является внутренним элементом fi sh, но, как правило, быстро, чтобы не было заметно.