bash에서 zsh 접미사 별칭 대체

bash에서 zsh 접미사 별칭 대체

zsh에서는 파일 이름만 입력하면 프로그램을 사용하여 .log 또는 .txt와 같은 특수 접미사 또는 확장자를 가진 모든 파일을 열 수 있습니다.

$ alias -s txt=nano
$ word.txt 

nano를 사용하여 word.txt 파일을 엽니다. Bash에서 어떻게 할 수 있나요?

답변1

어때요 exec zsh?

하지만 이 기능은 실제로 bash에서 사용할 수 있습니다(버전 4.0 기준, OSX 사용자는 이전 단락 참조). 거의. Bash가 에서 찾을 수 없는 명령을 발견하면 다음 PATH과 같은 명령을 실행합니다.command_not_found_handle. 파일이 현재 디렉터리에 있으면 파일을 열려고 시도하는 함수를 작성할 수 있습니다.

typeset -A extension_aliases
command_not_found_handle () {
  if [[ $# -eq 1 && -e $1 && $1 = *.* ]]; then
    local handler="${extension_aliases[${1##*.}]}"
    if [[ -n $local_handler ]]; then
      eval "$local_handler \"\$@\""
      return
    fi
  fi
  return 127
}

alias -s txt=nano사용하는 대신 extension_aliases[txt]=nano.

이 접근 방식에는 제한이 있습니다. 파일은 command_not_found_handle슬래시가 포함되지 않은 명령 이름으로만 호출되므로 현재 디렉터리에 있어야 합니다 . 또한 파일 이름을 완성할 수 없습니다.

기존 메커니즘을 사용하는 것이 훨씬 간단합니다.

xdg-open word.txt

또는 데비안과 그 파생물에서

see word.txt

여러 가지 이점을 얻을 수 있습니다. 프로그램에 대한 확장을 매핑하는 시스템 데이터베이스가 이미 있고 완성이 작동하며 셸에서 특별한 처리가 필요하지 않습니다. 더 많은 입력이 필요하지만 단일 문자 별칭을 정의하거나(뒤에 공백 필요) xdg-open줄 시작 부분에 키 바인딩을 삽입할 수 있습니다.

bind -x '"\eo": READLINE_LINE="xdg-open $READLINE_LINE"; READLINE_POINT+=9'

관련 정보