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'