Fish Shell은 탭 완료 시 "수학: 오류: 연산자 누락"을 보고합니다.

Fish Shell은 탭 완료 시 "수학: 오류: 연산자 누락"을 보고합니다.

오늘 아침에 이 오류를 발견했지만 어젯밤에 아무것도 변경하지 않은 것 같아서 지금 혼란스럽습니다. 어쩌면 시스템의 일부 유틸리티를 업데이트했는데 이전 버전과의 호환성이 깨졌을 수도 있습니다. 기본적으로 math: Error: Missing operator탭 완성을 사용하면 오류가 발생합니다.

fish내가 입력 하고 클릭하여 다음과 같은 제안을 받았다고 가정해 보겠습니다 Tab. (여기에 asciinema가 실제로 작동하는 것을 보고 싶은 경우를 위한 스크린캐스트가 있습니다.fish_configfish_add_pathhttps://asciinema.org/a/L3xr32eVMGHuCY0Gjr19gFzCu)

[I] ~ $ fishmath: Error: Missing operator
'Wed Dec 31 18:00:00 CST 1969 - 1655913830'
 ^
[I] ~ $ fish_config
fish                                                                               (command)
fish_add_path
fish_breakpoint_prompt
fish_clipboard_copy
…and 29 more rows

탭 완성은 작동하지만 오류가 짜증나게 보입니다. 데이터 문자열 등을 평가하려는 것 같습니다. 오류를 진단하는 방법은 무엇입니까?


저는 macOS Monterey를 사용하고 있습니다. 이 내 꺼야 ~/.config/fish/config.fish.

set -px PATH /opt/local/bin /opt/local/sbin
set -px PATH $HOME/.local/bin
set -px PATH $HOME/bin
set -px PATH /Applications/MacPorts/Alacritty.app/Contents/MacOS
set -px PATH $HOME/Foreign/drawterm
set -px PATH $HOME/google-cloud-sdk/bin

set -x XDG_CONFIG_HOME $HOME/.config
set -x PIPENV_VENV_IN_PROJECT 1
set -x PLAN9 /usr/local/plan9

set -px PATH $PLAN9/bin

if test -e $HOME/.config/fish/sensitive.fish
    source $HOME/.config/fish/sensitive.fish
end

if status is-interactive
    # Commands to run in interactive sessions can go here
    alias vi='/opt/local/bin/nvim'
    set -gx EDITOR /opt/local/bin/nvim
    source /opt/local/share/fzf/shell/key-bindings.fish
end

set -g fish_key_bindings fish_hybrid_key_bindings

alias matlab='/Applications/MATLAB_R2021b.app/bin/matlab -nodisplay'

zoxide init fish | source

direnv hook fish | source

# The next line updates PATH for the Google Cloud SDK.
if [ -f '/Users/qys/google-cloud-sdk/path.fish.inc' ]; . '/Users/qys/google-cloud-sdk/path.fish.inc'; end

답변1

해당 줄을 제거한 후 오류가 사라졌습니다 set -px PATH $PLAN9/bin. 실수로 일부 시스템 유틸리티를 해당 시스템 유틸리티에 숨겼기 때문인 것 같습니다.사용자 공간 계획 9.

또 다른 해결책은 를 사용하는 것입니다 set -ax PATH $PLAN9/bin. 를 사용하면 -a디렉터리가 $PLAN9/bin추가되므로 $PATH(을 사용할 때 앞에 추가되는 것과는 반대로 ) 계획 9 -p에 이미 존재하는 명령이 계획 9의 명령보다 우선합니다.$PATH

답변2

여기서 일어나는 일은 물고기가 명령을 완료하려고 시도하고 apropos다음을 호출하여 명령에 설명을 추가하려고 한다는 것입니다.

macOS에서는 Apple의 샌드박스가 Whatis 데이터베이스를 손상시키기 때문에 속도가 매우 느립니다.

따라서 Fish는 매주 업데이트되는 자체 캐시를 추가합니다.

그 날짜를 확인하기 위해,그것은 작동한다:

set age (math (date +%s) - (/usr/bin/stat -f %m $whatis))

UNIX 시대를 얻으려면 date형식 지정자를 제공하십시오 .+%s

당신은 date그것을 (전형적인) 초미니멀리즘으로 대체했습니다.플랜 9 버전, 형식 인수를 허용하지 않으므로 결국 전체 날짜를 인쇄하게 되어 수학 표현식의 형식이 잘못됩니다.

일반적으로 Fish는 상당히 표준적인 Unix 사용자 공간을 가정하므로 앞에 Plan 9 도구를 추가하는 것은 나쁜 생각입니다.

관련 정보