홈 폴더에서 탭 완성이 중단되는 것을 방지하는 방법은 무엇입니까?

홈 폴더에서 탭 완성이 중단되는 것을 방지하는 방법은 무엇입니까?

가끔 서버에서 디스크 IO 로드가 많으면 탭 완료로 인해 터미널이 멈추는 경우가 있습니다. Ctrl-C|D|Z포기하지 마십시오.

다른 세션에서 로그인해야 할 때마다 멈춰 있는 pty를 찾아서 종료하세요.

탭 완성이 중단되는 것을 방지할 수 있는 방법이 있나요?

답변1

처음 생각- 디스크 로드가 높을 때 파일 이름 완성을 비활성화합니다. 파일 이름에만 영향을 미치며 다른 완성 기능은 계속 작동합니다. 왜냐하면, 나는 그들이 정지를 야기한다고 생각하지 않습니다.

홈 디렉터리에 파일을 만들고 .bash_completion이 코드를 그 안에 넣으세요.

#!/bin/bash

### We are needed redefine original _filedir function
### and add new functionality to it
#
# for this, output the original function code and add the word 'original'
# in the beginning of it - now we are have _filedir renamed to
# 'original_filedir'
eval "original$(declare -f _filedir)"

# Define our own _filedir function, which will check disk load
# and: 
# if load are low - call original function.
# if load are high - stop further execution. 
_filedir() {
    io_load_limit=10
    io_load=$(awk '/sda /{print $12}' /proc/diskstats)
    if ((io_load > io_load_limit)); then
        echo -n "completion disabled - a lot i/o"
        return
    fi  

    original_filedir
}

동일한 트릭을 함수로 수행할 수 있습니다 _completion-loader. 동적 완료 로딩을 설정합니다.

Ubuntu에서는 기본 완성 코드가 이 /usr/share/bash-completion/bash_completion파일에 있고, 특정 프로그램에 맞게 사용자 정의된 다른 코드는 /usr/share/bash-completion/completions/디렉터리에 있습니다.

가 시작되면 파일을 bash읽은 다음, 예를 들어 입력하면 에서 실행되고 시작됩니다 . 또한 I/O에 영향을 미치고 중단이 발생할 수 있습니다./usr/share/bash-completion/bash_completionapt-get_completion-loaderapt-get/usr/share/bash-completion/completions/apt-get

나는 사용하기로 결정했다/proc/diskstats디스크 활동을 평가하는 데 사용됩니다. 사용할 수 있는 또 다른 방법이 있습니다. 한계값은 무작위로 선택됩니다.

두번째 생각- I/O 사용 제한을 설정합니다.이것.

관련 정보