어떤 종류의 편집기 명령 없이 실수로 텍스트 파일의 이름을 입력했는데 텍스트 파일이 쉘 스크립트가 아닌 경우, 파일이 실행 가능하지 않기 때문에 "권한 거부" 오류*가 발생하고 텍스트 파일의 첫 번째 토큰 명령줄에서는 실행될 명령으로 간주됩니다.
그러나 이것은 항상 실수로 편집기 명령을 입력하는 것을 잊어버렸다는 것을 의미하므로 쉘이 첫 번째 토큰이 "실행" 비트 세트가 없는 기존 텍스트 파일임을 어떻게든 인식하고 자동으로 열 수 있다면 두 가지 모두 $EDITOR
에 매우 편리합니다 $VISUAL
.
Bash나 Zsh에서 이를 달성할 수 있는 방법이 있나요? (나는 Bash를 사용하지만 어쨌든 전환을 고려하고 있습니다.) 이것은 표준 "디렉토리입니다"라는 오류를 표시하는 대신 autocd
첫 번째 토큰이 디렉토리인지 자동으로 감지하고 그 안으로 들어가려고 시도하는 Bash의 옵션과 비슷합니다. cd
.
이상적으로는 파일 목록(예: glob 포함)이나 기타 매개변수 세트를 제공하는 경우모두이러한 매개변수 중 일부는 편집기 명령에 전달됩니다.
* 물론, ./
.
답변1
에서는 zsh
텍스트 파일에 파일 확장자( )가 있으면 file.ext
다음을 사용할 수 있습니다.접미사 별칭. 명령줄의 첫 번째 단어가 비어 있지 않은 문자열과 일치할 때 실행됩니다 alias -s name=value
.value text.name
text.name
text
예를 들어:
정의한다면
alias -s txt=vim
그런 다음 입력
$ foo.txt
명령줄에서 실행됩니다.
vim foo.txt
이는 와 일치하는 모든 항목 ?*.txt
, 심지어 와일드카드가 있는 단어에도 적용됩니다.
$ *.txt
실행할 수 있습니다
vim *.txt
또한 명령의 첫 번째 단어만 확인하지만 다른 단어에 접미사 별칭이 있더라도 전체 명령줄을 인수로 전달합니다.
$ foo.txt bar.c baz.vim
실행할 수 있습니다
vim foo.txt bar.c baz.vim
중요한: 이는 또한 확장명이 일치하는 모든 명령에 영향을 미칩니다 PATH
. 예를 들어 .
alias -s sh=vim
라는 명령이 있고 something.sh
실행하고 싶습니다.
something.sh -p1 -p2 arg1 arg2
그것은 실행될 것이다
vim something.sh -p1 -p2 arg1 arg2
명령에 대해 이 기능을 비활성화하려면 command
내장 명령을 추가하기만 하면 됩니다.
command something.sh -p1 -p2 arg1 arg2
명백한 단점은 다음과 같습니다.
- 파일 확장자를 가진 파일에서만 작동합니다.
- 각 확장 프로그램에 대한 별칭을 명시적으로 정의해야 합니다.
긍정적인 측면:
- 파일 확장자를 가진 파일에서만 작동하므로
/bin
대부분의 실행 파일은/usr/bin
별칭으로 대체되지 않습니다. *.jpg
파일이*.o
갑자기 열리지 않도록 확장명에 대해 (다른) 별칭을 정의할 수 있습니다.vim