Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Importing bash history sometimes hangs on globs #7407

Closed
taoluo opened this issue Oct 20, 2020 · 33 comments
Closed

Importing bash history sometimes hangs on globs #7407

taoluo opened this issue Oct 20, 2020 · 33 comments
Labels
bug Something that's not working as intended
Milestone

Comments

@taoluo
Copy link

taoluo commented Oct 20, 2020

same issue with #6730
version 3.1.2
OS: Ubuntu-20.04 WSL2
sh -c 'env HOME=$(mktemp -d) fish' works

@faho
Copy link
Member

faho commented Oct 20, 2020

Let me repeat my comment from then:

Well, the obvious thing to check here is your config.

Do you have anything in config.fish or conf.d that could be doing this?

@taoluo
Copy link
Author

taoluo commented Oct 21, 2020

❯ cat .config/fish/fish_variables
# This file contains fish universal variable definitions.
# VERSION: 3.0
SETUVAR __fish_initialized:0
❯ env
SHELL=/usr/bin/bash
LIBGL_ALWAYS_INDIRECT=1
CONDA_EXE=/home/tao2/miniconda3/bin/conda
_CE_M=
WSL_DISTRO_NAME=Ubuntu-20.04
WT_SESSION=84772cdf-fa52-42ca-94d9-f5eeeba66aa7
NAME=WHALE
PWD=/home/tao2
LOGNAME=tao2
CONDA_PREFIX=/home/tao2/miniconda3
HOME=/home/tao2
LANG=C.UTF-8
WSL_INTEROP=/run/WSL/2304_interop
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
STARSHIP_SHELL=bash
CONDA_PROMPT_MODIFIER=
STARSHIP_SESSION_KEY=cbFymyCCR2FFPmJe
LESSCLOSE=/usr/bin/lesspipe %s %s
TERM=xterm-256color
_CE_CONDA=
LESSOPEN=| /usr/bin/lesspipe %s
USER=tao2
CONDA_SHLVL=1
DISPLAY=172.17.48.1:0
SHLVL=1
CONDA_PYTHON_EXE=/home/tao2/miniconda3/bin/python
CONDA_DEFAULT_ENV=base
WSLENV=WT_SESSION::WT_PROFILE_ID
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
PATH=/home/tao2/.cargo/bin:/home/tao2/JetBrains:/home/tao2/miniconda3/bin:/home/tao2/miniconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
HOSTTYPE=x86_64
WT_PROFILE_ID={07b52e3e-de2c-5db4-bd2d-ba144ed6c273}
_=/usr/bin/env

@6A61736F6E206E61646572
Copy link
Contributor

6A61736F6E206E61646572 commented Oct 21, 2020

What about cat .config/fish/config.fish or ls .config/fish/conf.d?

@taoluo
Copy link
Author

taoluo commented Oct 21, 2020

λ env fish_trace=1 fish
+ source /usr/local/share/fish/config.fish
+++ set -g IFS \n\ \t
+++ set -qg __fish_added_user_paths
+++ set -g __fish_added_user_paths
+++ if
+++ set -q __fish_initialized
+++ end if
+++ function __fish_default_command_not_found_handler
+++ if
+++ status --is-interactive
+++ end if
+++ set -l __extra_completionsdir
+++ set -l __extra_functionsdir
+++ set -l __extra_confdir
+++ if
+++ test -f /usr/local/share/fish/__fish_build_paths.fish
++++ source /usr/local/share/fish/__fish_build_paths.fish
++++++ set __extra_completionsdir /usr/local/share/fish/vendor_completions.d
++++++ set __extra_functionsdir /usr/local/share/fish/vendor_functions.d
++++++ set __extra_confdir /usr/local/share/fish/vendor_conf.d
+++ end if
+++ set -l xdg_data_dirs
+++ if
+++ set -q XDG_DATA_DIRS
++++ set --path xdg_data_dirs /usr/local/share:/usr/share:/var/lib/snapd/desktop
+++++ string replace -r '([^/])/$' '$1' -- /usr/local/share /usr/share /var/lib/snapd/desktop
++++ set xdg_data_dirs /usr/local/share/fish /usr/share/fish /var/lib/snapd/desktop/fish
+++ end if
+++ set -l vendor_completionsdirs
+++ set -l vendor_functionsdirs
+++ set -l vendor_confdirs
+++ if
+++ set -q FISH_UNIT_TESTS_RUNNING
++++ set vendor_completionsdirs /usr/local/share/fish/vendor_completions.d /usr/share/fish/vendor_completions.d /var/lib/snapd/desktop/fish/vendor_completions.d
++++ set vendor_functionsdirs /usr/local/share/fish/vendor_functions.d /usr/share/fish/vendor_functions.d /var/lib/snapd/desktop/fish/vendor_functions.d
++++ set vendor_confdirs /usr/local/share/fish/vendor_conf.d /usr/share/fish/vendor_conf.d /var/lib/snapd/desktop/fish/vendor_conf.d
++++ if
++++ contains -- /usr/local/share/fish/vendor_completions.d /usr/local/share/fish/vendor_completions.d /usr/share/fish/vendor_completions.d /var/lib/snapd/desktop/fish/vendor_completions.d
++++ end if
++++ if
++++ contains -- /usr/local/share/fish/vendor_functions.d /usr/local/share/fish/vendor_functions.d /usr/share/fish/vendor_functions.d /var/lib/snapd/desktop/fish/vendor_functions.d
++++ end if
++++ if
++++ contains -- /usr/local/share/fish/vendor_conf.d /usr/local/share/fish/vendor_conf.d /usr/share/fish/vendor_conf.d /var/lib/snapd/desktop/fish/vendor_conf.d
++++ end if
+++ end if
+++ if
+++ set -q fish_function_path
++++ set fish_function_path /home/tao2/.config/fish/functions /usr/local/etc/fish/functions /usr/local/share/fish/vendor_functions.d /usr/share/fish/vendor_functions.d /var/lib/snapd/desktop/fish/vendor_functions.d /usr/local/share/fish/functions
+++ end if
+++ if
+++ set -q fish_complete_path
++++ set fish_complete_path /home/tao2/.config/fish/completions /usr/local/etc/fish/completions /usr/local/share/fish/vendor_completions.d /usr/share/fish/vendor_completions.d /var/lib/snapd/desktop/fish/vendor_completions.d /usr/local/share/fish/completions /home/tao2/.local/share/fish/generated_completions
+++ end if
+++ function __fish_reconstruct_path -d 'Update PATH when fish_user_paths changes' --on-variable fish_user_paths
+++ function fish_sigtrap_handler --on-signal TRAP --no-scope-shadowing --description 'Signal handler for the TRAP signal. Launches a debug prompt.'
+++ function __fish_on_interactive --on-event fish_prompt
++++ source /usr/local/share/fish/functions/__fish_set_locale.fish
++++++ function __fish_set_locale
+++ __fish_set_locale
+++++ set -l LOCALE_VARS
+++++ set -a LOCALE_VARS LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE
+++++ set -a LOCALE_VARS LC_MONETARY LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS
+++++ set -a LOCALE_VARS LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION
+++++ for LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION LC_ALL
++++++ if
++++++ set -q LANG
+++++++ return 0
++++++ end if
+++++ end for
+++ if
+++ test 0 -lt 2300
++++ if
++++ set -q fish_user_abbreviations
++++ end if
+++ end if
+++ if
+++ status --is-login
+++ end if
+++ __fish_reconstruct_path
+++++ set -l local_path /home/tao2/.cargo/bin /home/tao2/JetBrains /home/tao2/miniconda3/bin /home/tao2/miniconda3/condabin /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin
+++++ for
+++++ end for
+++++ set -g __fish_added_user_paths
+++++ if
+++++ set -q fish_user_paths
+++++ end if
+++++ set -xg PATH /home/tao2/.cargo/bin /home/tao2/JetBrains /home/tao2/miniconda3/bin /home/tao2/miniconda3/condabin /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin
+++ function __fish_expand_pid_args
+++ for bg wait disown
++++ function bg -V jobbltn
++++ function wait -V jobbltn
++++ function disown -V jobbltn
+++ end for
+++ function fg
+++ function kill
+++ set -l sourcelist
+++ for
+++ end for
+ source /usr/local/etc/fish/config.fish

@taoluo
Copy link
Author

taoluo commented Oct 21, 2020

What about cat .config/fish/config.fish or ls .config/fish/conf.d?

There are not such files. and /usr/local/etc/fish/config.fish is essentially an empty file.

@taoluo
Copy link
Author

taoluo commented Oct 21, 2020

$ ll local/etc/fish
total 24
drwxr-xr-x 5 root root 4096 Oct 20 21:41 ./
drwxr-xr-x 3 root root 4096 Oct 20 20:55 ../
drwxr-xr-x 2 root root 4096 Oct 20 20:55 completions/
drwxr-xr-x 2 root root 4096 Oct 20 20:55 conf.d/
-rw-r--r-- 1 root root  425 Oct 19 05:37 config.fish
drwxr-xr-x 2 root root 4096 Oct 20 20:55 functions/

all above directories are empty.

@taoluo
Copy link
Author

taoluo commented Oct 21, 2020

strace shows stat like crazy as well.

@faho
Copy link
Member

faho commented Oct 21, 2020

What is it stat-ing? Which paths?

@faho
Copy link
Member

faho commented Oct 21, 2020

Also what does fish -d '*' say?

@taoluo
Copy link
Author

taoluo commented Oct 21, 2020

What is it stat-ing? Which paths?

inside $HOME

Also what does fish -d '*' say?

a lot of stuff, I put some parts here.

ast-construction: make job_list 0x558248199cd0
ast-construction: make job_conjunction 0x5582481747c0
ast-construction: will_visit job_conjunction 0x5582481747c0
ast-construction:   will_visit job 0x5582481747d8
ast-construction:     variable_assignment_list size: 0
ast-construction:     will_visit statement 0x558248174808
ast-construction:       make decorated_statement 0x5582481107b0
ast-construction:       will_visit decorated_statement 0x5582481107b0
ast-construction:         argument_or_redirection_list size: 0
ast-construction:       did_visit decorated_statement 0x5582481107b0
ast-construction:     did_visit statement 0x558248174808
ast-construction:     job_continuation_list size: 0
ast-construction:   did_visit job 0x5582481747d8
ast-construction:   job_conjunction_continuation_list size: 0
ast-construction: did_visit job_conjunction 0x5582481747c0
ast-construction: job_list size: 1
ast-construction: make job_list 0x558248199cd0
ast-construction: make job_conjunction 0x5582481747c0
ast-construction: will_visit job_conjunction 0x5582481747c0
ast-construction:   will_visit job 0x5582481747d8
ast-construction:     variable_assignment_list size: 0
ast-construction:     will_visit statement 0x558248174808
ast-construction:       make decorated_statement 0x5582481107b0
ast-construction:       will_visit decorated_statement 0x5582481107b0
ast-construction:         argument_or_redirection_list size: 0
ast-construction:       did_visit decorated_statement 0x5582481107b0
ast-construction:     did_visit statement 0x558248174808
ast-construction:     job_continuation_list size: 0
ast-construction:   did_visit job 0x5582481747d8
ast-construction:   job_conjunction_continuation_list size: 0
ast-construction: did_visit job_conjunction 0x5582481747c0
ast-construction: job_list size: 1
ast-construction: make job_list 0x558248199cd0
ast-construction: make job_conjunction 0x5582481747c0
ast-construction: will_visit job_conjunction 0x5582481747c0
ast-construction:   will_visit job 0x5582481747d8
ast-construction:     variable_assignment_list size: 0
ast-construction:     will_visit statement 0x558248174808
ast-construction:       make decorated_statement 0x5582481107b0
ast-construction:       will_visit decorated_statement 0x5582481107b0
ast-construction:         argument_or_redirection_list size: 0
ast-construction:       did_visit decorated_statement 0x5582481107b0
ast-construction:     did_visit statement 0x558248174808
ast-construction:     job_continuation_list size: 0
ast-construction:   did_visit job 0x5582481747d8
ast-construction:   job_conjunction_continuation_list size: 0
ast-construction: did_visit job_conjunction 0x5582481747c0
ast-construction: job_list size: 1
ast-construction: make job_list 0x558248199cd0
ast-construction: make job_conjunction 0x5582481747c0
ast-construction: will_visit job_conjunction 0x5582481747c0
ast-construction:   will_visit job 0x5582481747d8
ast-construction:     variable_assignment_list size: 0
ast-construction:     will_visit statement 0x558248174808
ast-construction:       make decorated_statement 0x5582481107b0
ast-construction:       will_visit decorated_statement 0x5582481107b0
ast-construction:         argument_or_redirection_list size: 0
ast-construction:       did_visit decorated_statement 0x5582481107b0
ast-construction:     did_visit statement 0x558248174808
ast-construction:     job_continuation_list size: 0
ast-construction:   did_visit job 0x5582481747d8
ast-construction:   job_conjunction_continuation_list size: 0
ast-construction: did_visit job_conjunction 0x5582481747c0
ast-construction: job_list size: 1

@faho
Copy link
Member

faho commented Oct 21, 2020

Ah, that's the ast stuff. Unfortunately that's super noisy and of little use here, so try fish -d '*,-ast*'

@taoluo
Copy link
Author

taoluo commented Oct 21, 2020

❯ fish -d '*,-ast*'
Debug enabled for category: char-encoding
Debug enabled for category: complete
Debug enabled for category: config
Debug enabled for category: debug
Debug enabled for category: env-dispatch
Debug enabled for category: env-export
Debug enabled for category: env-locale
Debug enabled for category: error
Debug enabled for category: event
Debug enabled for category: exec-fork
Debug enabled for category: exec-job-exec
Debug enabled for category: exec-job-status
Debug enabled for category: fd-monitor
Debug enabled for category: history
Debug enabled for category: history-file
Debug enabled for category: iothread
Debug enabled for category: output-invalid
Debug enabled for category: path
Debug enabled for category: proc-internal-proc
Debug enabled for category: proc-job-run
Debug enabled for category: proc-pgroup
Debug enabled for category: proc-reap-external
Debug enabled for category: proc-reap-internal
Debug enabled for category: proc-termowner
Debug enabled for category: profile-history
Debug enabled for category: reader
Debug enabled for category: reader-render
Debug enabled for category: screen
Debug enabled for category: term-support
Debug enabled for category: topic-monitor
Debug enabled for category: uvar-file
Debug enabled for category: warning
Debug enabled for category: warning-path
config: exec_path: '/usr/local/bin/fish', argv[0]: 'fish'
config: determine_config_directory_paths() results:
paths.data: /usr/local/share/fish
paths.sysconf: /usr/local/etc/fish
paths.doc: /usr/local/share/doc/fish
paths.bin: /usr/local/bin
env-locale: locale var LANG='C.UTF-8'
env-locale: locale var LANGUAGE missing or empty
env-locale: locale var LC_ALL missing or empty
env-locale: locale var LC_ADDRESS missing or empty
env-locale: locale var LC_COLLATE missing or empty
env-locale: locale var LC_CTYPE missing or empty
env-locale: locale var LC_IDENTIFICATION missing or empty
env-locale: locale var LC_MEASUREMENT missing or empty
env-locale: locale var LC_MESSAGES missing or empty
env-locale: locale var LC_MONETARY missing or empty
env-locale: locale var LC_NAME missing or empty
env-locale: locale var LC_NUMERIC missing or empty
env-locale: locale var LC_PAPER missing or empty
env-locale: locale var LC_TELEPHONE missing or empty
env-locale: locale var LC_TIME missing or empty
env-locale: locale var LOCPATH missing or empty
env-locale: init_locale() setlocale(): 'C.UTF-8'
env-locale: old LC_MESSAGES locale: 'C.UTF-8'
env-locale: new LC_MESSAGES locale: 'C.UTF-8'
term-support: curses var TERM='xterm-256color'
term-support: curses var TERMINFO missing or empty
term-support: curses var TERMINFO_DIRS missing or empty
term-support: 256 color support enabled for TERM=xterm-256color
term-support: default emoji width: 2
uvar-file: universal log reading from file
config: sourcing /usr/local/share/fish/config.fish
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g IFS \n\ \t' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g IFS \n\ \t), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'set -qg __fish_added_user_paths' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -qg __fish_added_user_paths), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g __fish_added_user_paths' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g __fish_added_user_paths), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'not set -q __fish_initialized' with pgrp -2
proc-job-run: Continue job -1, gid -2 (not set -q __fish_initialized), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (status ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'not status --is-interactive' with pgrp -2
proc-job-run: Continue job -1, gid -2 (not status --is-interactive), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l __extra_completionsdir' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l __extra_completionsdir), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l __extra_functionsdir' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l __extra_functionsdir), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l __extra_confdir' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l __extra_confdir), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (test ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'test -f $__fish_data_dir/__fish_build_paths.fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (test -f $__fish_data_dir/__fish_build_paths.fish), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set __extra_completionsdir /usr/local/share/fish/vendor_completions.d' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set __extra_completionsdir /usr/local/share/fish/vendor_completions.d), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set __extra_functionsdir /usr/local/share/fish/vendor_functions.d' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set __extra_functionsdir /usr/local/share/fish/vendor_functions.d), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set __extra_confdir /usr/local/share/fish/vendor_conf.d' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set __extra_confdir /usr/local/share/fish/vendor_conf.d), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (source ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'source $__fish_data_dir/__fish_build_paths.fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (source $__fish_data_dir/__fish_build_paths.fish), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l xdg_data_dirs' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l xdg_data_dirs), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -q XDG_DATA_DIRS' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -q XDG_DATA_DIRS), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set --path xdg_data_dirs $XDG_DATA_DIRS' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set --path xdg_data_dirs $XDG_DATA_DIRS), COMPLETED, NON-INTERACTIVE
fd-monitor: Thread starting
iothread: pthread 0x7f457177b700 spawned
exec-job-status: Set status of job -1 (string ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'string replace -r '([^/])/$' '$1' -- $xdg_data_dirs' with pgrp -2
proc-job-run: Continue job -1, gid -2 (string replace -r '([^/])/$' '$1' -- $xdg_data_dirs), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 5
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set xdg_data_dirs (string replace -r '([^/])/$' '$1' -- $xdg_data_dirs)/fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set xdg_data_dirs (string replace -r '([^/])/$' '$1' -- $xdg_data_dirs)/fish), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l vendor_completionsdirs' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l vendor_completionsdirs), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l vendor_functionsdirs' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l vendor_functionsdirs), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l vendor_confdirs' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l vendor_confdirs), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'not set -q FISH_UNIT_TESTS_RUNNING' with pgrp -2
proc-job-run: Continue job -1, gid -2 (not set -q FISH_UNIT_TESTS_RUNNING), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set vendor_completionsdirs $xdg_data_dirs/vendor_completions.d' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set vendor_completionsdirs $xdg_data_dirs/vendor_completions.d), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set vendor_functionsdirs $xdg_data_dirs/vendor_functions.d' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set vendor_functionsdirs $xdg_data_dirs/vendor_functions.d), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set vendor_confdirs $xdg_data_dirs/vendor_conf.d' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set vendor_confdirs $xdg_data_dirs/vendor_conf.d), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (contains ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'not contains -- $__extra_completionsdir $vendor_completionsdirs' with pgrp -2
proc-job-run: Continue job -1, gid -2 (not contains -- $__extra_completionsdir $vendor_completionsdirs), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (contains ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'not contains -- $__extra_functionsdir $vendor_functionsdirs' with pgrp -2
proc-job-run: Continue job -1, gid -2 (not contains -- $__extra_functionsdir $vendor_functionsdirs), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (contains ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'not contains -- $__extra_confdir $vendor_confdirs' with pgrp -2
proc-job-run: Continue job -1, gid -2 (not contains -- $__extra_confdir $vendor_confdirs), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'not set -q fish_function_path' with pgrp -2
proc-job-run: Continue job -1, gid -2 (not set -q fish_function_path), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set fish_function_path $__fish_config_dir/functions $__fish_sysconf_dir/functions $vendor_functionsdirs $__fish_data_dir/functions' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set fish_function_path $__fish_config_dir/functions $__fish_sysconf_dir/functions $vendor_functionsdirs $__fish_data_dir/functions), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'not set -q fish_complete_path' with pgrp -2
proc-job-run: Continue job -1, gid -2 (not set -q fish_complete_path), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set fish_complete_path $__fish_config_dir/completions $__fish_sysconf_dir/completions $vendor_completionsdirs $__fish_data_dir/completions $__fish_user_data_dir/generated_completions' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set fish_complete_path $__fish_config_dir/completions $__fish_sysconf_dir/completions $vendor_completionsdirs $__fish_data_dir/completions $__fish_user_data_dir/generated_completions), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (source ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'source /usr/local/share/fish/functions/__fish_set_locale.fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (source /usr/local/share/fish/functions/__fish_set_locale.fish), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 5
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l LOCALE_VARS' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l LOCALE_VARS), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a LOCALE_VARS LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a LOCALE_VARS LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a LOCALE_VARS LC_MONETARY LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a LOCALE_VARS LC_MONETARY LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a LOCALE_VARS LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a LOCALE_VARS LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -q $locale_var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -q $locale_var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (return ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'return 0' with pgrp -2
proc-job-run: Continue job -1, gid -2 (return 0), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (__fish_set_locale ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command '__fish_set_locale' with pgrp -2
proc-job-run: Continue job -1, gid -2 (__fish_set_locale), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (test ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'test $__fish_initialized -lt 2300' with pgrp -2
proc-job-run: Continue job -1, gid -2 (test $__fish_initialized -lt 2300), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'set -q fish_user_abbreviations' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -q fish_user_abbreviations), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (status ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'status --is-login' with pgrp -2
proc-job-run: Continue job -1, gid -2 (status --is-login), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l local_path $PATH' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l local_path $PATH), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g __fish_added_user_paths' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g __fish_added_user_paths), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'set -q fish_user_paths' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -q fish_user_paths), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -xg PATH $local_path' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -xg PATH $local_path), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (__fish_reconstruct_path ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command '__fish_reconstruct_path' with pgrp -2
proc-job-run: Continue job -1, gid -2 (__fish_reconstruct_path), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l sourcelist' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l sourcelist), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (source ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'builtin source /usr/local/share/fish/config.fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (builtin source /usr/local/share/fish/config.fish), COMPLETED, NON-INTERACTIVE
config: sourcing /usr/local/etc/fish/config.fish
exec-job-status: Set status of job -1 (source ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'builtin source /usr/local/etc/fish/config.fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (builtin source /usr/local/etc/fish/config.fish), COMPLETED, NON-INTERACTIVE
config: sourcing /home/tao2/.config/fish/config.fish
exec-job-status: Set status of job -1 (source ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'builtin source /home/tao2/.config/fish/config.fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (builtin source /home/tao2/.config/fish/config.fish), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (source ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'source /usr/local/share/fish/functions/fish_mode_prompt.fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (source /usr/local/share/fish/functions/fish_mode_prompt.fish), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 4
exec-job-status: Set status of job -1 (source ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'source /usr/local/share/fish/functions/fish_default_mode_prompt.fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (source /usr/local/share/fish/functions/fish_default_mode_prompt.fish), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 6
exec-job-status: Set status of job -1 (test ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'test "$fish_key_bindings" = fish_vi_key_bindings' with pgrp -2
proc-job-run: Continue job -1, gid -2 (test "$fish_key_bindings" = fish_vi_key_bindings), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (test ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'test "$fish_key_bindings" = fish_hybrid_key_bindings' with pgrp -2
proc-job-run: Continue job -1, gid -2 (test "$fish_key_bindings" = fish_hybrid_key_bindings), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (fish_default_mode_prompt ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'fish_default_mode_prompt' with pgrp -2
proc-job-run: Continue job -1, gid -2 (fish_default_mode_prompt), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (fish_mode_prompt ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'fish_mode_prompt' with pgrp -2
proc-job-run: Continue job -1, gid -2 (fish_mode_prompt), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 4
exec-job-status: Set status of job -1 (source ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'source /usr/local/share/fish/functions/fish_prompt.fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (source /usr/local/share/fish/functions/fish_prompt.fish), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 4
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l last_pipestatus $pipestatus' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l last_pipestatus $pipestatus), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -lx __fish_last_status $status' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -lx __fish_last_status $status), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set_color ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set_color normal' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set_color normal), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 6
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l normal (set_color normal)' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l normal (set_color normal)), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l color_cwd $fish_color_cwd' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l color_cwd $fish_color_cwd), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l suffix '>'' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l suffix '>'), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (source ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'source /usr/local/share/fish/functions/fish_is_root_user.fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (source /usr/local/share/fish/functions/fish_is_root_user.fish), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 6
exec-job-status: Set status of job -1 (functions ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'functions -q fish_is_root_user' with pgrp -2
proc-job-run: Continue job -1, gid -2 (functions -q fish_is_root_user), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (contains ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'contains -- $USER root toor Administrator' with pgrp -2
proc-job-run: Continue job -1, gid -2 (contains -- $USER root toor Administrator), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (return ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'return 1' with pgrp -2
proc-job-run: Continue job -1, gid -2 (return 1), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (fish_is_root_user ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'fish_is_root_user' with pgrp -2
proc-job-run: Continue job -1, gid -2 (fish_is_root_user), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l color_host $fish_color_host' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l color_host $fish_color_host), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'set -q SSH_TTY' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -q SSH_TTY), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l bold_flag --bold' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l bold_flag --bold), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'set -q __fish_prompt_status_generation' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -q __fish_prompt_status_generation), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g __fish_prompt_status_generation $status_generation' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g __fish_prompt_status_generation $status_generation), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (test ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'test $__fish_prompt_status_generation = $status_generation' with pgrp -2
proc-job-run: Continue job -1, gid -2 (test $__fish_prompt_status_generation = $status_generation), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set bold_flag' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set bold_flag), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set __fish_prompt_status_generation $status_generation' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set __fish_prompt_status_generation $status_generation), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (source ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'source /usr/local/share/fish/functions/__fish_print_pipestatus.fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (source /usr/local/share/fish/functions/__fish_print_pipestatus.fish), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 10
exec-job-status: Set status of job -1 (set_color ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'set_color $fish_color_status' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set_color $fish_color_status), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 10
exec-job-status: Set status of job -1 (set_color ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'set_color $bold_flag $fish_color_status' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set_color $bold_flag $fish_color_status), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 10
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l last_status' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l last_status), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -q __fish_last_status' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -q __fish_last_status), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set last_status $__fish_last_status' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set last_status $__fish_last_status), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l left_brace $argv[1]' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l left_brace $argv[1]), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l right_brace $argv[2]' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l right_brace $argv[2]), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l separator $argv[3]' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l separator $argv[3]), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -q argv[4]' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -q argv[4]), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l brace_sep_color $argv[4]' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l brace_sep_color $argv[4]), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'set -q argv[5]' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -q argv[5]), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l status_color normal' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l status_color normal), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -e argv[1 2 3 4 5]' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -e argv[1 2 3 4 5]), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (contains ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'not contains $last_status 0 141' with pgrp -2
proc-job-run: Continue job -1, gid -2 (not contains $last_status 0 141), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (__fish_print_pipestatus ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command '__fish_print_pipestatus "[" "]" "|" (set_color $fish_color_status) (set_color $bold_flag $fish_color_status) $last_pipestatus' with pgrp -2
proc-job-run: Continue job -1, gid -2 (__fish_print_pipestatus "[" "]" "|" (set_color $fish_color_status) (set_color $bold_flag $fish_color_status) $last_pipestatus), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 6
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l prompt_status (__fish_print_pipestatus "[" "]" "|" (set_color $fish_color_status) (set_color $bold_flag $fish_color_status) $last_pipestatus)' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l prompt_status (__fish_print_pipestatus "[" "]" "|" (set_color $fish_color_status) (set_color $bold_flag $fish_color_status) $last_pipestatus)), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set_color ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'set_color $fish_color_user' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set_color $fish_color_user), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 6
exec-job-status: Set status of job -1 (set_color ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'set_color $color_host' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set_color $color_host), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 6
exec-job-status: Set status of job -1 (source ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'source /usr/local/share/fish/functions/prompt_hostname.fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (source /usr/local/share/fish/functions/prompt_hostname.fish), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 10
exec-job-status: Set status of job -1 (string ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'string replace -r "\..*" "" $hostname' with pgrp -2
proc-job-run: Continue job -1, gid -2 (string replace -r "\..*" "" $hostname), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (prompt_hostname ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'prompt_hostname' with pgrp -2
proc-job-run: Continue job -1, gid -2 (prompt_hostname), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 6
exec-job-status: Set status of job -1 (set_color ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'set_color $color_cwd' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set_color $color_cwd), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 6
exec-job-status: Set status of job -1 (source ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'source /usr/local/share/fish/functions/prompt_pwd.fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (source /usr/local/share/fish/functions/prompt_pwd.fish), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 10
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l options h/help' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l options h/help), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (argparse ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'argparse -n prompt_pwd --max-args=0 $options -- $argv' with pgrp -2
proc-job-run: Continue job -1, gid -2 (argparse -n prompt_pwd --max-args=0 $options -- $argv), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'set -q _flag_help' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -q _flag_help), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'set -q fish_prompt_pwd_dir_length' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -q fish_prompt_pwd_dir_length), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l fish_prompt_pwd_dir_length 1' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l fish_prompt_pwd_dir_length 1), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l realhome ~' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l realhome ~), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (string ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'string replace -r '^'"$realhome"'($|/)' '~$1' $PWD' with pgrp -2
proc-job-run: Continue job -1, gid -2 (string replace -r '^'"$realhome"'($|/)' '~$1' $PWD), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 10
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l tmp (string replace -r '^'"$realhome"'($|/)' '~$1' $PWD)' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l tmp (string replace -r '^'"$realhome"'($|/)' '~$1' $PWD)), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 ([ ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command '[ $fish_prompt_pwd_dir_length -eq 0 ]' with pgrp -2
proc-job-run: Continue job -1, gid -2 ([ $fish_prompt_pwd_dir_length -eq 0 ]), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (string ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'string replace -ar '(\.?[^/]{'"$fish_prompt_pwd_dir_length"'})[^/]*/' '$1/' $tmp' with pgrp -2
proc-job-run: Continue job -1, gid -2 (string replace -ar '(\.?[^/]{'"$fish_prompt_pwd_dir_length"'})[^/]*/' '$1/' $tmp), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (prompt_pwd ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'prompt_pwd' with pgrp -2
proc-job-run: Continue job -1, gid -2 (prompt_pwd), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 6
exec-job-status: Set status of job -1 (source ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'source /usr/local/share/fish/functions/fish_vcs_prompt.fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (source /usr/local/share/fish/functions/fish_vcs_prompt.fish), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 10
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g ___fish_git_prompt_status_order stagedstate invalidstate dirtystate untrackedfiles stashstate' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g ___fish_git_prompt_status_order stagedstate invalidstate dirtystate untrackedfiles stashstate), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l varargs' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l varargs), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l varargs' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l varargs), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_color$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_color$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_color$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_color$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_color$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_color$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_color$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_color$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_color$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_color$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_color$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_color$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_color$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_color$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_color$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_color$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_color$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_color$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_color$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_color$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_color$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_color$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_color$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_color$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_color$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_color$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_color$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_color$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_color$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_color$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_showcolorhints' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_showcolorhints), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l varargs' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l varargs), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_char_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_char_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_char_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_char_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_char_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_char_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_char_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_char_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_char_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_char_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_char_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_char_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_char_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_char_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_char_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_char_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_char_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_char_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_char_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_char_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_char_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_char_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -a varargs --on-variable __fish_git_prompt_char_$var' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -a varargs --on-variable __fish_git_prompt_char_$var), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (source ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'source /usr/local/share/fish/functions/fish_git_prompt.fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (source /usr/local/share/fish/functions/fish_git_prompt.fish), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 10
exec-job-status: Set status of job -1 (command ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'not command -sq git' with pgrp -2
proc-job-run: Continue job -1, gid -2 (not command -sq git), COMPLETED, NON-INTERACTIVE
env-export: create_export_array() recalc
exec-fork: Fork #1, pid 151: spawn external command '/usr/bin/git' from '<no file>'
exec-job-exec: Executed job 1 from command 'command git rev-parse --git-dir --is-inside-git-dir --is-bare-repository --is-inside-work-tree HEAD 2>/dev/null' with pgrp 149
proc-job-run: Start job 1, gid 149 (command git rev-parse --git-dir --is-inside-git-dir --is-bare-repository --is-inside-work-tree HEAD 2>/dev/null), UNCOMPLETED, NON-INTERACTIVE
topic-monitor: TID 1 local  0,0,0 : current 0,0,0
topic-monitor: TID 1 becoming reader
topic-monitor: TID 1 local 0,0,0 read() complete, current is 0,0,0
topic-monitor: Updating topic 1 to 1
topic-monitor: TID 1 local  0,0,0 : current 0,1,0
proc-reap-external: Reaped external process 'git' (pid 151, status 128)
uvar-file: universal log sync
uvar-file: universal log sync elided based on fast stat()
uvar-file: universal log no modifications
fd-monitor: Removing fd 10
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -l repo_info (command git rev-parse --git-dir --is-inside-git-dir --is-bare-repository --is-inside-work-tree HEAD 2>/dev/null)' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -l repo_info (command git rev-parse --git-dir --is-inside-git-dir --is-bare-repository --is-inside-work-tree HEAD 2>/dev/null)), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (test ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'test -n "$repo_info"' with pgrp -2
proc-job-run: Continue job -1, gid -2 (test -n "$repo_info"), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (return ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'return' with pgrp -2
proc-job-run: Continue job -1, gid -2 (return), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (fish_git_prompt ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'fish_git_prompt $argv' with pgrp -2
proc-job-run: Continue job -1, gid -2 (fish_git_prompt $argv), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g fish_color_hg_clean green' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g fish_color_hg_clean green), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g fish_color_hg_modified yellow' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g fish_color_hg_modified yellow), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g fish_color_hg_dirty red' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g fish_color_hg_dirty red), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g fish_color_hg_added green' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g fish_color_hg_added green), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g fish_color_hg_renamed magenta' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g fish_color_hg_renamed magenta), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g fish_color_hg_copied magenta' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g fish_color_hg_copied magenta), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g fish_color_hg_deleted red' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g fish_color_hg_deleted red), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g fish_color_hg_untracked yellow' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g fish_color_hg_untracked yellow), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g fish_color_hg_unmerged red' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g fish_color_hg_unmerged red), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g fish_prompt_hg_status_added '✚'' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g fish_prompt_hg_status_added '✚'), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g fish_prompt_hg_status_modified '*'' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g fish_prompt_hg_status_modified '*'), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g fish_prompt_hg_status_copied '⇒'' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g fish_prompt_hg_status_copied '⇒'), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g fish_prompt_hg_status_deleted '✖'' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g fish_prompt_hg_status_deleted '✖'), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g fish_prompt_hg_status_untracked '?'' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g fish_prompt_hg_status_untracked '?'), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g fish_prompt_hg_status_unmerged !' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g fish_prompt_hg_status_unmerged !), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (set ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'set -g fish_prompt_hg_status_order added modified copied deleted untracked unmerged' with pgrp -2
proc-job-run: Continue job -1, gid -2 (set -g fish_prompt_hg_status_order added modified copied deleted untracked unmerged), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (source ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'source /usr/local/share/fish/functions/fish_hg_prompt.fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (source /usr/local/share/fish/functions/fish_hg_prompt.fish), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 10
exec-job-status: Set status of job -1 (command ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'not command -sq hg' with pgrp -2
proc-job-run: Continue job -1, gid -2 (not command -sq hg), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (return ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'return 1' with pgrp -2
proc-job-run: Continue job -1, gid -2 (return 1), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (fish_hg_prompt ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'fish_hg_prompt $argv' with pgrp -2
proc-job-run: Continue job -1, gid -2 (fish_hg_prompt $argv), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (fish_vcs_prompt ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'fish_vcs_prompt' with pgrp -2
proc-job-run: Continue job -1, gid -2 (fish_vcs_prompt), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 6
exec-job-status: Set status of job -1 (echo ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'echo -n -s (set_color $fish_color_user) "$USER" $normal @ (set_color $color_host) (prompt_hostname) $normal ' ' (set_color $color_cwd) (prompt_pwd) $normal (fish_vcs_prompt) $normal " "$prompt_status $suffix " "' with pgrp -2
proc-job-run: Continue job -1, gid -2 (echo -n -s (set_color $fish_color_user) "$USER" $normal @ (set_color $color_host) (prompt_hostname) $normal ' ' (set_color $color_cwd) (prompt_pwd) $normal (fish_vcs_prompt) $normal " "$prompt_status $suffix " "), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (fish_prompt ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'fish_prompt' with pgrp -2
proc-job-run: Continue job -1, gid -2 (fish_prompt), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 4
exec-job-status: Set status of job -1 (source ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'source /usr/local/share/fish/functions/fish_title.fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (source /usr/local/share/fish/functions/fish_title.fish), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 4
exec-job-status: Set status of job -1 (set ...) to 256 using short circuit
exec-job-exec: Executed job -1 from command 'not set -q INSIDE_EMACS' with pgrp -2
proc-job-run: Continue job -1, gid -2 (not set -q INSIDE_EMACS), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (status ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'status current-command' with pgrp -2
proc-job-run: Continue job -1, gid -2 (status current-command), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 6
env-export: create_export_array() recalc
exec-fork: Fork #2, pid 152: spawn external command '/usr/bin/uname' from '/usr/local/share/fish/functions/__fish_pwd.fish'
exec-job-exec: Executed job 1 from command 'uname' with pgrp 149
proc-job-run: Start job 1, gid 149 (uname), UNCOMPLETED, NON-INTERACTIVE
topic-monitor: TID 1 local  0,1,0 : current 0,1,0
topic-monitor: TID 1 becoming reader
topic-monitor: TID 1 local 0,1,0 read() complete, current is 0,1,0
topic-monitor: Updating topic 1 to 2
topic-monitor: TID 1 local  0,1,0 : current 0,2,0
proc-reap-external: Reaped external process 'uname' (pid 152, status 0)
uvar-file: universal log sync
uvar-file: universal log sync elided based on fast stat()
uvar-file: universal log no modifications
fd-monitor: Removing fd 13
exec-job-status: Set status of job -1 (source ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'source /usr/local/share/fish/functions/__fish_pwd.fish' with pgrp -2
proc-job-run: Continue job -1, gid -2 (source /usr/local/share/fish/functions/__fish_pwd.fish), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 10
exec-job-status: Set status of job -1 (pwd ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'pwd' with pgrp -2
proc-job-run: Continue job -1, gid -2 (pwd), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (__fish_pwd ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command '__fish_pwd' with pgrp -2
proc-job-run: Continue job -1, gid -2 (__fish_pwd), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 6
exec-job-status: Set status of job -1 (echo ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'echo (status current-command) (__fish_pwd)' with pgrp -2
proc-job-run: Continue job -1, gid -2 (echo (status current-command) (__fish_pwd)), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (fish_title ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'fish_title' with pgrp -2
proc-job-run: Continue job -1, gid -2 (fish_title), COMPLETED, NON-INTERACTIVE
fd-monitor: Removing fd 4
fd-monitor: Thread exiting

@faho
Copy link
Member

faho commented Oct 24, 2020

Okay, so that gets to printing the title, which should be right before it draws the prompt.

On my system the fish_trace ends with:

+++ function kill
+++ set -l sourcelist
+++ for
+++ end for
+ source /etc/fish/config.fish
+ source /usr/share/fish/functions/fish_prompt.fish

In your case the /etc is /usr/local/etc because of different build options, so really the only difference is that my system reads fish_prompt.fish while yours doesn't manage to, so it's possibly going in circles looking for it?

Can you run

fish -ic 'echo $fish_function_path'

?

@taoluo
Copy link
Author

taoluo commented Oct 25, 2020

❯ fish -ic 'echo $fish_function_path'
/home/tao2/.config/fish/functions /etc/fish/functions /usr/local/share/fish/vendor_functions.d /usr/share/fish/vendor_functions.d /var/lib/snapd/desktop/fish/vendor_functions.d /usr/share/fish/functions


❯ ls /home/tao2/.config/fish/functions /etc/fish/functions /usr/local/share/fish/vendor_functions.d /usr/share/fish/vend
or_functions.d /var/lib/snapd/desktop/fish/vendor_functions.d /usr/share/fish/functions
/usr/bin/ls: cannot access '/home/tao2/.config/fish/functions': No such file or directory
/usr/bin/ls: cannot access '/var/lib/snapd/desktop/fish/vendor_functions.d': No such file or directory
/etc/fish/functions:

/usr/local/share/fish/vendor_functions.d:

/usr/share/fish/functions:
N_.fish                                         __fish_print_pacman_repos.fish
_.fish                                          __fish_print_pipestatus.fish
__fish_abbr_old.fish                            __fish_print_service_names.fish
__fish_any_arg_in.fish                          __fish_print_svn_rev.fish
__fish_anypython.fish                           __fish_print_users.fish
__fish_append.fish                              __fish_print_xdg_applications_directories.fish
__fish_cancel_commandline.fish                  __fish_print_xdg_mimetypes.fish
__fish_clang_complete.fish                      __fish_print_xwindows.fish
__fish_commandline_is_singlequoted.fish         __fish_print_zfs_snapshots.fish
__fish_complete_atool_archive_contents.fish     __fish_pwd.fish
__fish_complete_bittorrent.fish                 __fish_seen_argument.fish
__fish_complete_blockdevice.fish                __fish_seen_subcommand_from.fish
__fish_complete_cd.fish                         __fish_set_locale.fish
__fish_complete_command.fish                    __fish_shared_key_bindings.fish
__fish_complete_convert_options.fish            __fish_should_complete_switches.fish
__fish_complete_directories.fish                __fish_status_to_signal.fish
__fish_complete_external_command.fish           __fish_svn_prompt.fish
__fish_complete_ftp.fish                        __fish_systemctl_services.fish
__fish_complete_gpg.fish                        __fish_systemd_machine_images.fish
__fish_complete_gpg_key_id.fish                 __fish_systemd_machines.fish
__fish_complete_gpg_user_id.fish                __fish_toggle_comment_commandline.fish
__fish_complete_groups.fish                     __fish_use_subcommand.fish
__fish_complete_job_pids.fish                   __fish_vcs_prompt.fish
__fish_complete_list.fish                       __fish_whatis.fish
__fish_complete_lpr.fish                        __fish_whatis_current_token.fish
__fish_complete_lpr_option.fish                 __terlar_git_prompt.fish
__fish_complete_man.fish                        _fish_systemctl.fish
__fish_complete_mount_opts.fish                 _validate_int.fish
__fish_complete_path.fish                       abbr.fish
__fish_complete_pgrep.fish                      alias.fish
__fish_complete_pids.fish                       cd.fish
__fish_complete_ppp_peer.fish                   cdh.fish
__fish_complete_proc.fish                       contains_seq.fish
__fish_complete_ssh.fish                        delete-or-exit.fish
__fish_complete_subcommand.fish                 dirh.fish
__fish_complete_suffix.fish                     dirs.fish
__fish_complete_user_at_hosts.fish              down-or-search.fish
__fish_complete_users.fish                      edit_command_buffer.fish
__fish_complete_zfs_mountpoint_properties.fish  export.fish
__fish_complete_zfs_pools.fish                  fish_breakpoint_prompt.fish
__fish_complete_zfs_ro_properties.fish          fish_clipboard_copy.fish
__fish_complete_zfs_rw_properties.fish          fish_clipboard_paste.fish
__fish_complete_zfs_write_once_properties.fish  fish_config.fish
__fish_config_interactive.fish                  fish_default_key_bindings.fish
__fish_contains_opt.fish                        fish_default_mode_prompt.fish
__fish_crux_packages.fish                       fish_git_prompt.fish
__fish_cursor_1337.fish                         fish_hg_prompt.fish
__fish_cursor_konsole.fish                      fish_hybrid_key_bindings.fish
__fish_cursor_xterm.fish                        fish_indent.fish
__fish_describe_command.fish                    fish_key_reader.fish
__fish_first_token.fish                         fish_md5.fish
__fish_git_prompt.fish                          fish_mode_prompt.fish
__fish_gnu_complete.fish                        fish_npm_helper.fish
__fish_hg_prompt.fish                           fish_opt.fish
__fish_is_first_token.fish                      fish_print_git_action.fish
__fish_is_git_repository.fish                   fish_print_hg_root.fish
__fish_is_switch.fish                           fish_prompt.fish
__fish_is_token_n.fish                          fish_svn_prompt.fish
__fish_is_zfs_feature_enabled.fish              fish_title.fish
__fish_list_current_token.fish                  fish_update_completions.fish
__fish_make_completion_signals.fish             fish_vcs_prompt.fish
__fish_man_page.fish                            fish_vi_cursor.fish
__fish_move_last.fish                           fish_vi_key_bindings.fish
__fish_no_arguments.fish                        funced.fish
__fish_not_contain_opt.fish                     funcsave.fish
__fish_number_of_cmd_args_wo_opts.fish          grep.fish
__fish_paginate.fish                            help.fish
__fish_parent_directories.fish                  history.fish
__fish_pipestatus_with_signal.fish              hostname.fish
__fish_portage_print_available_pkgs.fish        isatty.fish
__fish_portage_print_installed_pkgs.fish        la.fish
__fish_portage_print_repository_paths.fish      ll.fish
__fish_prepend_sudo.fish                        ls.fish
__fish_prev_arg_in.fish                         man.fish
__fish_print_VBox_vms.fish                      nextd-or-forward-word.fish
__fish_print_addresses.fish                     nextd.fish
__fish_print_cmd_args.fish                      open.fish
__fish_print_cmd_args_without_options.fish      popd.fish
__fish_print_commands.fish                      prevd-or-backward-word.fish
__fish_print_debian_apache_confs.fish           prevd.fish
__fish_print_debian_apache_mods.fish            prompt_hostname.fish
__fish_print_debian_apache_sites.fish           prompt_pwd.fish
__fish_print_encodings.fish                     psub.fish
__fish_print_filesystems.fish                   pushd.fish
__fish_print_gpg_algo.fish                      realpath.fish
__fish_print_groups.fish                        seq.fish
__fish_print_help.fish                          setenv.fish
__fish_print_hostnames.fish                     suspend.fish
__fish_print_interfaces.fish                    trap.fish
__fish_print_lpr_options.fish                   type.fish
__fish_print_lpr_printers.fish                  umask.fish
__fish_print_modules.fish                       up-or-search.fish
__fish_print_mounted.fish                       vared.fish
__fish_print_packages.fish

/usr/share/fish/vendor_functions.d:
fzf_key_bindings.fish

@ShizuhaAki
Copy link

Is this only reproduced with WSL2?

@faho
Copy link
Member

faho commented Oct 27, 2020

@Ravenclaw-OIer It is not, see the original report at #6730. That was using Ubuntu directly.

@fffed
Copy link

fffed commented Nov 2, 2020

@Ravenclaw-OIer It is not, see the original report at #6730. That was using Ubuntu directly.

@faho, I have the same issue with fish fresh installed on Ubuntu 20.10.

after run env fish_trace=1 fish I got at the end:

+++ function __fish_expand_pid_args
+++ for bg fg wait disown
++++ function bg -V jobbltn
++++ function fg -V jobbltn
++++ function wait -V jobbltn
++++ function disown -V jobbltn
+++ end for
+++ function kill
+++ set -l sourcelist
+++ for
+++ end for
+ source /etc/fish/config.fish

and then the shell is unresponsive.

When fish -d '*':

exec-fork: Fork #1, pid 26018: spawn external command '/usr/bin/uname' from '/usr/share/fish/functions/__fish_pwd.fish'
exec-job-exec: Executed job 4 from command 'uname' with pgrp 26011
proc-job-run: Start job 4, gid 26011 (uname), UNCOMPLETED, NON-INTERACTIVE
topic-monitor: TID 1 local mgen 0 : current 0
topic-monitor: TID 1 local mgen 0 read() complete, current mgen is 0
topic-monitor: Updating topic 0 to 1
topic-monitor: TID 1 local mgen 0 : current 1
proc-reap-external: Reaped external process 'uname' (pid 26018, status 0)
exec-job-status: Set status of job 3 (source ...) to 0 using short circuit
exec-job-exec: Executed job 3 from command 'source /usr/share/fish/functions/__fish_pwd.fish' with pgrp -2
proc-job-run: Start job 3, gid -2 (source /usr/share/fish/functions/__fish_pwd.fish), COMPLETED, NON-INTERACTIVE
iothread: pthread 0x7fd9677fe640 exiting
exec-job-status: Set status of job 2 (pwd ...) to 0 using short circuit
exec-job-exec: Executed job 2 from command 'pwd' with pgrp -2
proc-job-run: Start job 2, gid -2 (pwd), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (__fish_pwd ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command '__fish_pwd' with pgrp -2
proc-job-run: Start job -1, gid -2 (__fish_pwd), COMPLETED, NON-INTERACTIVE
iothread: pthread 0x7fd96d427640 exiting
exec-job-status: Set status of job 1 (echo ...) to 0 using short circuit
exec-job-exec: Executed job 1 from command 'echo (status current-command) (__fish_pwd)' with pgrp -2
proc-job-run: Start job 1, gid -2 (echo (status current-command) (__fish_pwd)), COMPLETED, NON-INTERACTIVE
exec-job-status: Set status of job -1 (fish_title ...) to 0 using short circuit
exec-job-exec: Executed job -1 from command 'fish_title' with pgrp -2
proc-job-run: Start job -1, gid -2 (fish_title), COMPLETED, NON-INTERACTIVE
iothread: pthread 0x7fd96cc26640 exiting
iothread: pthread 0x7fd967fff640 exiting

@faho
Copy link
Member

faho commented Nov 4, 2020

So my current theory is that Snap is doing something weird with the filesystem that causes fish's autosuggestions to end up in an infinite loop.

I'll have to install Ubuntu to check, but this explains why we've only seen it in Ubuntu so far, and why everyone seemed to have snap enabled.

@ridiculousfish any other ideas?

@faho faho changed the title In WSL2, Fish hangs with 100% cpu usage, unless started as sh -c 'env HOME=$(mktemp -d) fish' In Ubuntu Fish hangs with 100% cpu usage, unless started as sh -c 'env HOME=$(mktemp -d) fish' Nov 4, 2020
@fffed
Copy link

fffed commented Nov 5, 2020

I'll have to install Ubuntu to check, but this explains why we've only seen it in Ubuntu so far, and why everyone seemed to have snap enabled.

It is enabled by default.
What I did :

sudo snap remove --purge snap-store
sudo snap remove --purge gtk-common-themes
sudo snap remove --purge gnome-3-34-1804
sudo snap remove --purge core18
sudo snap remove --purge snapd

Then snap list produced:
No snaps are installed yet. Try 'snap install hello-world'.

After this:

sudo umount /snap/core* -lf
sudo umount /var/snap

sudo apt autoremove --purge snapd gnome-software-plugin-snap

rm -rf ~/snap
sudo rm -rf /snap
sudo rm -rf /var/snap
sudo rm -rf /var/lib/snapd

And rebooted of course ))

And the result after apt install fish the same - 100%cpu and hanging.

@ridiculousfish
Copy link
Member

I tried on Ubuntu 20.10 but could not reproduce.

@fffed can you share some of strace output? What paths are being stat'd?

Also can you please try getting a C++ backtrace? gdb can do it (substitute the real pid of fish for 1234 of course)

> sudo gdb attach 1234
(gdb) bt

and paste the output here or in a gist. Thanks!

@fffed
Copy link

fffed commented Nov 8, 2020

@ridiculousfish , the list of 'stat's is a way to long because of node_modeles, but some of them at the beginning:

stat("/usr/share/fish", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/usr/etc/fish", 0x7ffe468d9e10)   = -1 ENOENT (No such file or directory)
stat("/home/ff/.config/fish", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
stat("/home/ff/.local/share/fish", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
stat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=12288, ...}) = 0
stat(".", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=12288, ...}) = 0
stat("/dev/pts/0", {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0), ...}) = 0
stat("/home/ff/.local/kitty.app/lib/kitty/terminfo", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/home/ff/.terminfo", 0x5615d12e4ef0) = -1 ENOENT (No such file or directory)
stat("/etc/terminfo", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/lib/terminfo", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/usr/share/terminfo", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/usr/share/fish/__fish_build_paths.fish", {st_mode=S_IFREG|0644, st_size=470, ...}) = 0
stat("/usr/xpg4/bin", 0x7ffe468d6480)   = -1 ENOENT (No such file or directory)
stat("/home/ff/.config/fish/functions/__fish_set_locale.fish", 0x7ffe468d6b30) = -1 ENOENT (No such file or directory)
stat("/etc/fish/functions/__fish_set_locale.fish", 0x7ffe468d6b30) = -1 ENOENT (No such file or directory)
stat("/usr/share/ubuntu/fish/vendor_functions.d/__fish_set_locale.fish", 0x7ffe468d6b30) = -1 ENOENT (No such file or directory)
stat("/usr/local/share/fish/vendor_functions.d/__fish_set_locale.fish", 0x7ffe468d6b30) = -1 ENOENT (No such file or directory)
stat("/usr/share/fish/vendor_functions.d/__fish_set_locale.fish", 0x7ffe468d6b30) = -1 ENOENT (No such file or directory)
stat("/usr/share/fish/functions/__fish_set_locale.fish", {st_mode=S_IFREG|0644, st_size=3872, ...}) = 0
stat("/home/ff/.config/fish/functions/source.fish", 0x7ffe468d5df0) = -1 ENOENT (No such file or directory)
stat("/etc/fish/functions/source.fish", 0x7ffe468d5df0) = -1 ENOENT (No such file or directory)
stat("/usr/share/ubuntu/fish/vendor_functions.d/source.fish", 0x7ffe468d5df0) = -1 ENOENT (No such file or directory)
stat("/usr/local/share/fish/vendor_functions.d/source.fish", 0x7ffe468d5df0) = -1 ENOENT (No such file or directory)
stat("/usr/share/fish/vendor_functions.d/source.fish", 0x7ffe468d5df0) = -1 ENOENT (No such file or directory)
stat("/usr/share/fish/functions/source.fish", 0x7ffe468d5df0) = -1 ENOENT (No such file or directory)
stat("/home/ff/.config/fish/functions/fish_title.fish", 0x7ffe468d9330) = -1 ENOENT (No such file or directory)
stat("/etc/fish/functions/fish_title.fish", 0x7ffe468d9330) = -1 ENOENT (No such file or directory)
stat("/usr/share/ubuntu/fish/vendor_functions.d/fish_title.fish", 0x7ffe468d9330) = -1 ENOENT (No such file or directory)
stat("/usr/local/share/fish/vendor_functions.d/fish_title.fish", 0x7ffe468d9330) = -1 ENOENT (No such file or directory)
stat("/usr/share/fish/vendor_functions.d/fish_title.fish", 0x7ffe468d9330) = -1 ENOENT (No such file or directory)
stat("/usr/share/fish/functions/fish_title.fish", {st_mode=S_IFREG|0644, st_size=175, ...}) = 0
stat("/home/ff/.config/fish/functions/echo.fish", 0x7ffe468d7640) = -1 ENOENT (No such file or directory)
stat("/etc/fish/functions/echo.fish", 0x7ffe468d7640) = -1 ENOENT (No such file or directory)
stat("/usr/share/ubuntu/fish/vendor_functions.d/echo.fish", 0x7ffe468d7640) = -1 ENOENT (No such file or directory)
stat("/usr/local/share/fish/vendor_functions.d/echo.fish", 0x7ffe468d7640) = -1 ENOENT (No such file or directory)
stat("/usr/share/fish/vendor_functions.d/echo.fish", 0x7ffe468d7640) = -1 ENOENT (No such file or directory)
stat("/usr/share/fish/functions/echo.fish", 0x7ffe468d7640) = -1 ENOENT (No such file or directory)
stat("/home/ff/.config/fish/functions/__fish_pwd.fish", 0x7ffe468d6480) = -1 ENOENT (No such file or directory)
stat("/etc/fish/functions/__fish_pwd.fish", 0x7ffe468d6480) = -1 ENOENT (No such file or directory)
stat("/usr/share/ubuntu/fish/vendor_functions.d/__fish_pwd.fish", 0x7ffe468d6480) = -1 ENOENT (No such file or directory)
stat("/usr/local/share/fish/vendor_functions.d/__fish_pwd.fish", 0x7ffe468d6480) = -1 ENOENT (No such file or directory)
stat("/usr/share/fish/vendor_functions.d/__fish_pwd.fish", 0x7ffe468d6480) = -1 ENOENT (No such file or directory)
stat("/usr/share/fish/functions/__fish_pwd.fish", {st_mode=S_IFREG|0644, st_size=272, ...}) = 0
stat("/home/ff/.config/fish/functions/uname.fish", 0x7ffe468d28c0) = -1 ENOENT (No such file or directory)
stat("/etc/fish/functions/uname.fish", 0x7ffe468d28c0) = -1 ENOENT (No such file or directory)
stat("/usr/share/ubuntu/fish/vendor_functions.d/uname.fish", 0x7ffe468d28c0) = -1 ENOENT (No such file or directory)
stat("/usr/local/share/fish/vendor_functions.d/uname.fish", 0x7ffe468d28c0) = -1 ENOENT (No such file or directory)
stat("/usr/share/fish/vendor_functions.d/uname.fish", 0x7ffe468d28c0) = -1 ENOENT (No such file or directory)
stat("/usr/share/fish/functions/uname.fish", 0x7ffe468d28c0) = -1 ENOENT (No such file or directory)
stat("/home/ff/.config/fish/functions/pwd.fish", 0x7ffe468d57d0) = -1 ENOENT (No such file or directory)
stat("/etc/fish/functions/pwd.fish", 0x7ffe468d57d0) = -1 ENOENT (No such file or directory)
stat("/usr/share/ubuntu/fish/vendor_functions.d/pwd.fish", 0x7ffe468d57d0) = -1 ENOENT (No such file or directory)
stat("/usr/local/share/fish/vendor_functions.d/pwd.fish", 0x7ffe468d57d0) = -1 ENOENT (No such file or directory)
stat("/usr/share/fish/vendor_functions.d/pwd.fish", 0x7ffe468d57d0) = -1 ENOENT (No such file or directory)
stat("/usr/share/fish/functions/pwd.fish", 0x7ffe468d57d0) = -1 ENOENT (No such file or directory)
stat("/home/ff/.local/share/fish/fish_history", 0x7ffe468d9990) = -1 ENOENT (No such file or directory)
stat("/home/ff/.local/share/fish/fish_history", 0x7ffe468d9990) = -1 ENOENT (No such file or directory)
...

And here the gist of gdb

@krobelus
Copy link
Member

krobelus commented Nov 8, 2020

The stack starts with

#130 0x000055b8f031596e in wildcard_expander_t::expand_intermediate_segment(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, __dirstream*, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, wchar_t const*, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) ()
#131 0x000055b8f03160e2 in ?? ()
#132 0x000055b8f0316c13 in wildcard_expand_string(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, enum_set_t<expand_flag>, std::function<bool ()> const&, std::vector<completion_t, std::allocator<completion_t> >*) ()
#133 0x000055b8f02a7fdf in ?? ()
#134 0x000055b8f02a5573 in ?? ()
#135 0x000055b8f02a5b38 in expand_string(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, std::vector<completion_t, std::allocator<completion_t> >*, enum_set_t<expand_flag>, operation_context_t const&, std::vector<parse_error_t, std::allocator<parse_error_t> >*) ()
#136 0x000055b8f02a5f43 in expand_to_command_and_args(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, operation_context_t const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >*, std::vector<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, std::allocator<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > > >*, std::vector<parse_error_t, std::allocator<parse_error_t> >*) ()
#137 0x000055b8f02e284d in parse_util_detect_errors(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::vector<parse_error_t, std::allocator<parse_error_t> >*, bool, std::shared_ptr<parsed_source_t const>*) ()
#138 0x000055b8f02baff4 in history_impl_t::populate_from_bash(_IO_FILE*) ()
#139 0x000055b8f02bb1c1 in history_t::populate_from_bash(_IO_FILE*) ()
#140 0x000055b8f0300b83 in reader_import_history_if_necessary() ()
#141 0x000055b8f0303501 in reader_read(parser_t&, int, io_chain_t const&) ()
#142 0x000055b8f02201ae in main ()

This seems to happen when importing a command from Bash's history!

@fffed Since your binary is probably stripped of debug information, you could clone the fish repository, build it (make should work) and then try to reproduce the problem on the resulting binary (build/fish).
You can select the stack frame number 138 (history_impl_t::populate_from_bash) using frame 138 in gdb, and
then print the commandline we try to import using print line. Maybe knowing that commandline will help.
My wild guess is that the command contains a wildcard, like **/ls ~, and fish tries to expand everything,
to check if it is actually a valid command (that we want to import).

@krobelus
Copy link
Member

krobelus commented Nov 8, 2020

Ok, I can already reproduce

rm -rf tmp-home
mkdir tmp-home
echo '/**' > tmp-home/.bash_history
HOME=$PWD/tmp-home fish

That explains all those stat calls. I wonder what is the best fix here.
The Bash history import could skip expansions that require IO, and simply assume the command is valid.

@ridiculousfish
Copy link
Member

ridiculousfish commented Nov 8, 2020

This seems like it may be a bug in expand_to_command_and_args; we shouldn't be expanding globs in command position. edit apparently I added this in the fix for #154; globs in commands are allowed.

More generally it's easy to blow your leg off with echo /**, maybe we can make that safer somehow.

@ridiculousfish
Copy link
Member

@fffed can you identify which command in your ~/.bash_history is causing this glob blowup? I'm curious how it got there in the first place!

@fffed
Copy link

fffed commented Nov 9, 2020

@ridiculousfish, interesting thing: I've commented all lines of my .bashrc and fish started successfully, but then I uncommented all lines and it started as well. Then I purged fish and fish-common and did rm -rf for all fish's files whichfind could discover:

./etc/fish
./usr/share/doc/fish 
./usr/share/doc-base/fish
./usr/share/fish
./root/.local/share/fish
./root/.config/fish

And after apt install fish it works as intended, so I do not know how to reproduce the issue again.

Or indeed there was something weird in my bash history that was popped out already.

@krobelus
Copy link
Member

krobelus commented Nov 9, 2020

@fffed this is because the Bash-history-import will only run if the fish history is missing.
Can you try again after removing your fish history, for example
mv ~/.local/share/fish/fish_history ~/.local/sharefish/fish_history.bak

@fffed
Copy link

fffed commented Nov 9, 2020

@krobelus , tried with no success - fish is working properly )).

@krobelus
Copy link
Member

krobelus commented Nov 9, 2020

Hmm that's strange. Maybe a simple grep -F '**' ~/.bash_history will find the offending command?

I've commented all lines of my .bashrc

Only ~/.bash_history should be relevant.

@fffed
Copy link

fffed commented Nov 10, 2020

@ridiculousfish, @krobelus I finally could reproduce the bug - I restored my bash_history from a backup and indeed it had a line /** which 'breaks` fish.

@ridiculousfish
Copy link
Member

Awesome! Any idea how /** got there? Is it part of another command?

@fffed
Copy link

fffed commented Nov 11, 2020

Any idea how /** got there? Is it part of another command?

It is a hole standalone line, my guess - I miss click/enter something while searching via find.

@faho faho added this to the fish 3.2.0 milestone Nov 28, 2020
@faho faho added bug Something that's not working as intended and removed needs more info labels Nov 28, 2020
@faho faho changed the title In Ubuntu Fish hangs with 100% cpu usage, unless started as sh -c 'env HOME=$(mktemp -d) fish' Importing bash history sometimes hangs on globs Nov 28, 2020
@ridiculousfish
Copy link
Member

In e43913a we stop expanding globs when doing our initial error checking pass, since expanding globs doesn't help there. This also fixes the bash history import.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Jun 21, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something that's not working as intended
Projects
None yet
Development

No branches or pull requests

7 participants