Zsh-autosuggestions: “_zsh_autosuggest_async_pty_create: pty command name already used”

Created on 22 May 2017  ·  11Comments  ·  Source: zsh-users/zsh-autosuggestions

I'm in the middle of a complete refresh of my Zsh config; and after trying ZSH_AUTOSUGGEST_USE_ASYNC=true, my terminal looks like … this:

screen shot 2017-05-22 at 3 38 41 am

i.e. every command results in additional erroneous output along these lines:

_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty                                                                                                
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response

(This appears to not occur when ZSH_AUTOSUGGEST_USE_ASYNC is disabled, but I suppose that's to be expected. 😅)

bug reproduced

All 11 comments

I'm having trouble reproducing this. What version of zsh are you using?

Can you reproduce with no extra configuration?

% zsh -f
%% ZSH_AUTOSUGGEST_USE_ASYNC=true; source zsh-autosuggestions.zsh

Also, if you have the time to write a failing spec it would be greatly appreciated.

Thanks

Hmmm! I cannot reproduce as demonstrated / without config …

Unfortunately, I've completed aforementioned complete refresh, and I also cannot reproduce with my current config. The bug was persistent at the time, so I suspect it's still lurking — but I suppose I'll have to close this, unless someone comes across later who's experiencing it in realtime!

I'm also seeing this when used with find:

🤔 ~/c/dotfiles (5d0c056)|master⚡
± [i]: find .
.
./.agignore
./.alacritty.yml
./.aliases
./.config
./.config/nvim
./.config/nvim/init.vim
./.config/pep8
./.config/pgcli
./.config/pgcli/pglcli
./.docker-aliases
./.docker-functions
./.functions
./.git
./.git/COMMIT_EDITMSG
./.git/config
./.git/description
./.git/FETCH_HEAD
./.git/HEAD
./.git/hooks
./.git/hooks/applypatch-msg.sample
./.git/hooks/commit-msg.sample
./.git/hooks/post-update.sample
./.git/hooks/pre-applypatch.sample
./.git/hooks/pre-commit.sample
./.git/hooks/pre-push.sample
./.git/hooks/pre-rebase.sample
./.git/hooks/pre-receive.sample
./.git/hooks/prepare-commit-msg.sample
./.git/hooks/update.sample
./.git/index
./.git/info
./.git/info/exclude
./.git/logs
./.git/logs/HEAD
./.git/logs/refs
./.git/logs/refs/heads
./.git/logs/refs/heads/master
./.git/logs/refs/remotes
./.git/logs/refs/remotes/origin
./.git/logs/refs/remotes/origin/HEAD
./.git/logs/refs/remotes/origin/master
./.git/objects
./.git/objects/06
./.git/objects/06/23d681abd163f955700572d8d7666a3c7ab6a6
./.git/objects/09
./.git/objects/09/abc26786f4ebca188946a3e7d9743ca0fa42ce
./.git/objects/0a
./.git/objects/0a/d9dfe5fed37ece12d9a417ff339117c1965021
./.git/objects/0b
./.git/objects/0b/715532b2fdd7cb11d494c733c714492a014e6e
./.git/objects/1d
./.git/objects/1d/8fc5b26e7a7e7ccb4aed08da983fe887662b3b
./.git/objects/1e
./.git/objects/1e/d158a250c7d8c5b19d4f84931e98cc6d3f3d93
./.git/objects/1f
./.git/objects/1f/cc16b5098ddd841b9693b9a4dc603e5b251e41
./.git/objects/22
./.git/objects/22/d80a2a72a443725fd629c136e7eb13a055258d
./.git/objects/25
./.git/objects/25/087fa510866d702f67c24a52e1de4dcbb36de8
./.git/objects/25/9bd8434e50128baeae04863eed2b23ae70e840
./.git/objects/26
./.git/objects/26/c07b7b432bebdaf07d9bfb6a72af74fd769b4d
./.git/objects/27
./.git/objects/27/25f37488662ebe61f0248ab8d2875eeb687a9c
./.git/objects/27/e6fe9c41cc80d5884d477a1998a22f7becf5fe
./.git/objects/28
./.git/objects/28/5b17831ce229f1ed58bfc6841fb7b90fb1fa9f
./.git/objects/29
./.git/objects/29/a43b04b68e9f96af9822730a672f79f36526de
./.git/objects/29/c484bcb5970de445db787bbfaef904336c1af7
./.git/objects/2c
./.git/objects/2c/d2d909a16650bd07616cf4d682eb7678e6572c
./.git/objects/32
./.git/objects/32/9577c927072d70cbbba99e553c93aee8d57d13
./.git/objects/33
./.git/objects/33/91255efe0a2b8295803552b4f37b0ced94adc0
./.git/objects/34
./.git/objects/34/3a152cab8cb86416a985b5152cebfd90fa67cd
./.git/objects/35
./.git/objects/35/b839e09b80d9cbfd66762f92e3c138a6234bf0
./.git/objects/3a
./.git/objects/3a/d1be43d0a01abafbc058786114cf6c9521bcf4
./.git/objects/3f
./.git/objects/3f/6a97a5b9bc428b83f9f1696ab2cea1e8b99292
./.git/objects/3f/8277bd953fb4884fe4a3589ef5463a2ad61165
./.git/objects/40
./.git/objects/40/1f8c19ab063bf79f6bc4b3e1fbcaad47467806
./.git/objects/45
./.git/objects/45/04e32ddfc4d6e581773780a36792d5867c587b
./.git/objects/49
./.git/objects/49/62710636d8553c788eb2354530088bf3cb261a
./.git/objects/4d
./.git/objects/4d/0a4b06ceee6bef31df2763460059a616b13695
./.git/objects/50
./.git/objects/50/7db2440bdf118c532967a72e72292350a9ab02
./.git/objects/51
./.git/objects/51/0684b0616ca2268c0db5a25332bc3989a6f637
./.git/objects/51/7993372d2c52bb0d2b70b416dc3be2dcd9b70e
./.git/objects/51/996c6157b9d744edbcfaa609114e4b284c0ba5
./.git/objects/57
./.git/objects/57/8aa66874d32020f4db817881de31c547013e31
./.git/objects/57/e12c90590bea2b2c590d2dfe0ae82dae597249
./.git/objects/5b
./.git/objects/5b/96ce46b911d0527a951774808524fd59f676ef
./.git/objects/5b/f5c3ef1426bd570bd78f832c8ca7a5c2079064
./.git/objects/5d
./.git/objects/5d/0c056bc93d0a93c23d00140b73d970e14cf7b7
./.git/objects/60
./.git/objects/60/90c1bad6937c231437235f0d24e8d3af57db60
./.git/objects/61
./.git/objects/61/8c0582f65c09f02c1ff83c490808c0fbb81dd7
./.git/objects/64
./.git/objects/64/390dd4dd3e405e441a70cd5593f044cbecee95
./.git/objects/67
./.git/objects/67/903e48a3fd37dbfae3ecc581ac1bacf48602c7
./.git/objects/69
./.git/objects/69/0d75c8479e0abd09c7f435c255923dcc704ede
./.git/objects/6d
./.git/objects/6d/fc6a74b216206a104ded5ab3742a64132111a0
./.git/objects/6f
./.git/objects/6f/61de70fced7118558d3b158bec60937d215579
./.git/objects/70
./.git/objects/70/14e45ea5e2d1643bdd296457f084bd99fa0e35
./.git/objects/70/43d9437e9558928026976f844c987ae053c082
./.git/objects/75
./.git/objects/75/2c5c43fbf897251645ab8b52d0c86940c835e2
./.git/objects/76
./.git/objects/76/ca24a2480c50cc4f7c6df591c54ebfbc14bc00
./.git/objects/78
./.git/objects/78/192233a5792f22e1e6ff56c01701ec1393a986
./.git/objects/79
./.git/objects/79/18623d086175871dba2c64fd1ceffcdb30ab05
./.git/objects/79/87d315997baa09f6849654c6968cfab1a605d0
./.git/objects/7b
./.git/objects/7b/da2bc7e69d87138d17dfe0ae33459095d627f8
./.git/objects/7c
./.git/objects/7c/00707ea89617f35c2fffce36c55f337c20fbe4
./.git/objects/81
./.git/objects/81/84d92e7707f27c38ea01ee7f646ece4b482bcd
./.git/objects/84
./.git/objects/84/c42e2596a7b792b735858b622cf853a1418264
./.git/objects/88
./.git/objects/88/66adf4eac9c7f2902b1aebec7ef0a31b2aa5a0
./.git/objects/8d
./.git/objects/8d/c31491acfd356e8f022ab809578a981e85c692
./.git/objects/8f
./.git/objects/8f/0d270e9b63e7eb41f41e201ce2217b26059928
./.git/objects/93
./.git/objects/93/3048743f329ed89db634d634c0ae095f5fa2a3
./.git/objects/94
./.git/objects/94/a20e3fec2d1f7c3c96bb045cae4d3be3918472
./.git/objects/95
./.git/objects/95/117432539b382fe40f01061afc982f989f32eb
./.git/objects/96
./.git/objects/96/d42eaab679dcf06390885d950330b819569f29
./.git/objects/97
./.git/objects/97/f690f01141014520ebc9606922112952373f49
./.git/objects/9e
./.git/objects/9e/e57b517fd06359ac7bb5052ba3159ea3cf1862
./.git/objects/9f
./.git/objects/9f/caee63fe7dfaf2da264f3ec63797c4dea7dfe0
./.git/objects/a0
./.git/objects/a0/5bb8a2faaa66bf5ac271c148bc34e5760a39e5
./.git/objects/a5
./.git/objects/a5/581abf8bbb7816343ac17c8a8142b0a5fcae77
./.git/objects/a5/708d26cba5d8b78667f83ff518582e6f723159
./.git/objects/a5/894a99ab26eec6c8973ad5a752098d09ade609
./.git/objects/b0
./.git/objects/b0/7180eb582dee9c294ca67428ba09a215cf8b6e
./.git/objects/b3
./.git/objects/b3/aeec16771df50c3535d09d351a16129a7c2c44
./.git/objects/b4
./.git/objects/b4/d0cdb69ec0334def28f8032decacebc0367214
./.git/objects/b9
./.git/objects/b9/d0c5ee63aacc854c82e69caed1ed6eedcfd935
./.git/objects/b9/ebcb036b18b807c4a26aa5f5687f91c0cd1a94
./.git/objects/ba
./.git/objects/ba/700d50a070a315672f622662ed910f7cd8bec1
./.git/objects/bb
./.git/objects/bb/e26b604403f829f3f861ae38be974a9729697b
./.git/objects/c2
./.git/objects/c2/54a2446aac1b20e7d0d70585d507dee4d5381c
./.git/objects/c2/8f6cb3f49a17e158a7eddad0ccb005477ec020
./.git/objects/c4
./.git/objects/c4/32fc6581a13a70a5b6d23c53fb5eed43f8e11a
./.git/objects/c7
./.git/objects/c7/2fe63cccad79a4cde272c765944700c01e8d83
./.git/objects/c8
./.git/objects/c8/c629a4f54e0734a8c6530c04b05c151389e56b
./.git/objects/cb
./.git/objects/cb/851733a398caeb353ca4a24465439497dd55e4
./.git/objects/d1
./.git/objects/d1/78bf23154e8d2a9853a4a28ccd45aa59a53361
./.git/objects/d3
./.git/objects/d3/de0a2af35f70ef2569621eb7fbb58f5a3c9cbf
./.git/objects/d4
./.git/objects/d4/1de7df0fac8f2905b7b066ceea979fbbdd0539
./.git/objects/d4/41fda52148804da5b43baaa13d364aaa0f791d
./.git/objects/d4/8f0134f629f6ad2da22ae5e1de96e70930ef9c
./.git/objects/d7
./.git/objects/d7/e0d1f30c238b9dd9e890140d2f4b2024c68e00
./.git/objects/da
./.git/objects/da/8cde0a0c4035d771eba099c36092fbdb94e4a2
./.git/objects/dd
./.git/objects/dd/a17fe7c8b9da154b858ef773753911fa59b003
./.git/objects/de
./.git/objects/de/dba1677819bd4205d53bfb7ff0f67d3a75d57e
./.git/objects/de/ff954134056c893e90ab98cc4fde4f248035e5
./.git/objects/df
./.git/objects/df/8be7cb2b424b6879695d6e9fdd3763f7bc56e7
./.git/objects/e6
./.git/objects/e6/601f75335476edf4120dd3643b6b470a7a0e3f
./.git/objects/e6/86f5e8cc1083c725bf6be81eb9cfe36c6129d2
./.git/objects/e8
./.git/objects/e8/d068e280559c45cf57613757ef757ba47f2d69
./.git/objects/e9
./.git/objects/e9/b9c46edf021994625b845efa1fac7ac5527069
./.git/objects/ea
./.git/objects/ea/404276746a04bd6479679577c9ef53127f78c2
./.git/objects/ea/7afcca8202c54b92f8d539b8553e97b469eb15
./.git/objects/eb
./.git/objects/eb/7ee26d562f7144083d08b6f8b410f7f09ae51f
./.git/objects/ec
./.git/objects/ec/84372b191855abf32d8a15b609384c7f2e6178
./.git/objects/ec/896423e46586ca3cb11de708e98ba5bb82bc38
./.git/objects/f3
./.git/objects/f3/71025b76b97adc67b7d6109ebd0e2411d7c515
./.git/objects/f3/c62dc6a54c9b45b42b226d92b5520264bc8188
./.git/objects/f5
./.git/objects/f5/fb116f33a30cf6d28271adb1e50c011bdb5a96
./.git/objects/f6
./.git/objects/f6/d1576ce6166687056bff7586c8fa4dd99e2150
./.git/objects/f8
./.git/objects/f8/0dfa711ceb34e2a58c68565314b48e5cf171b7
./.git/objects/f8/c9c89d94d68c2b96ac0144cfe0435fe5b69b24
./.git/objects/fa
./.git/objects/fa/50a408df63065b36b1b0c1057960a791267b25
./.git/objects/fa/7f30571453b6944244c45a1b14d304df7c6ac1
./.git/objects/fd
./.git/objects/fd/7e12a7c3ce077349b5f5ace0defa75d042936e
./.git/objects/fe
./.git/objects/fe/41f0fea0a46e3a2438d2ca5e229dca6e552e34
./.git/objects/fe/b60f54e7861e9f509c4525baded7cd385e9cc8
./.git/objects/info
./.git/objects/pack
./.git/objects/pack/pack-751d41b2501023148ed57414a217b0cf05d5267b.idx
./.git/objects/pack/pack-751d41b2501023148ed57414a217b0cf05d5267b.pack
./.git/ORIG_HEAD
./.git/packed-refs
./.git/refs
./.git/refs/heads
./.git/refs/heads/master
./.git/refs/remotes
./.git/refs/remotes/origin
./.git/refs/remotes/origin/HEAD
./.git/refs/remotes/origin/master
./.git/refs/tags
./.git-aliases
./.git-functions
./.git-prompt
./.gitconfig
./.oh-my-zsh
./.oh-my-zsh/plugins
./.oh-my-zsh/plugins/vi-mode
./.oh-my-zsh/plugins/vi-mode/vi-mode.plugin.zsh
./.oh-my-zsh/themes
./.oh-my-zsh/themes/smt.zsh-theme
./.profile
./.tmux-aliases
./.tmux-functions
./.tmux-gruvbox-dark.tmux
./.tmux-gruvbox-light.tmux
./.tmux.conf
./.vim
./.vim/ftplugin
./.vim/ftplugin/python.vim
./.vimrc
./.zprofile
./.zshenv
./.zshrc
./apply
./dev-private
./README.md
./save
./terminfo
./terminfo/tmux-256color.terminfo
./terminfo/tmux.terminfo
./terminfo/xterm-256color-italic.terminfo
./usr
./usr/local
./usr/local/bin
./usr/local/bin/b
./usr/local/bin/ftwind
_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response

Please reopen; I can reproduce this with zsh-autosuggestions c7d4a85031c101ef9bce0018096622087894dd09 + zsh 5.3.1-4+b1 on Debian 9 (stretch) by holding down ctrl-c for ~10 seconds, on one particular server to which I have a slow (200ms) connection.

My zsh-autosuggestions settings are

ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE=fg=6
ZSH_AUTOSUGGEST_STRATEGY=match_prev_cmd
ZSH_AUTOSUGGEST_USE_ASYNC=1

and the rest of the zshrc is here.

at@paris2:/root#
at@paris2:/root#
at@paris2:/root#
at@paris2:/root#
at@paris2:/root#
at@paris2:/root#
at@paris2:/root#
at@paris2:/root#
at@paris2:/root#
at@paris2:/root#
at@paris2:/root#
_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response
at@paris2:/root#
_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response
at@paris2:/root#
_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response
at@paris2:/root#
at@paris2:/root#
at@paris2:/root#
_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response
at@paris2:/root#
_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response
at@paris2:/root#
_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response
at@paris2:/root#
at@paris2:/root#
_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response
at@paris2:/root
_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response
at@paris2:/root#
at@paris2:/root#
at@paris2:/root#
_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response
at@paris2:/root#
_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response
at@paris2:/root#
_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response
at@paris2:/root#
_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response
at@paris2:/root#
at@paris2:/root#
_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response
at@paris2:/root#
_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response
at@paris2:/root#
_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response
at@paris2:/root# dpkg -l | grep zsh
ii  zsh                             5.3.1-4+b1                        amd64        shell with lots of features
ii  zsh-common                      5.3.1-4                           all          architecture independent files for Zsh
_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response
at@paris2:/root# uname -a
Linux paris2 4.14.0-9-amd64 #1 SMP Debian 4.14.3-2 (2017-11-30) x86_64 GNU/Linux
_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response

I have this happening in an open terminal — I cannot generally reproduce, but it returns to show up in one terminal session once in a blue moon. Definitely needs to stay open!

I get this too sometimes, but when/why is unknown.

I'm getting it after I execute:

a=$(exit 1)

Then all next commands will show this output:

_zsh_autosuggest_async_pty_create:zpty:12: pty command name already used: zsh_autosuggest_pty
_zsh_autosuggest_async_pty_create:zle:22: Bad file descriptor number for -F: _zsh_autosuggest_async_response

Looks like even just $(exit) will get us into this state reliably... Nice find @kriansa

As a workaround for now, it looks like you can run zpty -d $ZSH_AUTOSUGGEST_ASYNC_PTY_NAME to fix things when you get into this state.

Looks like there's some kind of underlying bug in the zpty module here that causes all pty's to exit when a subshell exits...

This was with zsh 5.4.2 with no additional config loaded:

% zmodload zsh/zpty
% zpty -b foo cat
% zpty -b bar cat
% zpty
(31689) bar: cat
(31666) foo: cat
% $(exit)
% zpty
(finished) bar: cat
(finished) foo: cat

Edit to add a little more detail on the upstream bug:

Each zpty registers an exit hook that is called here. My guess is these hooks are called whenever exit is run, regardless of whether it's run in a subshell or the parent shell.

Ok, this has been fixed on develop with df5fb85 and will go out with the next release.

The upstream issue remains, but it looks like we can fix this issue without fixing upstream.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

glacambre picture glacambre  ·  3Comments

silverneko picture silverneko  ·  5Comments

hiteshsharma picture hiteshsharma  ·  5Comments

sebw picture sebw  ·  6Comments

raulferras picture raulferras  ·  3Comments