텍스트 파일을 실행하는 대신 편집기에서 자동으로 열까요?

텍스트 파일을 실행하는 대신 편집기에서 자동으로 열까요?

어떤 종류의 편집기 명령 없이 실수로 텍스트 파일의 이름을 입력했는데 텍스트 파일이 쉘 스크립트가 아닌 경우, 파일이 실행 가능하지 않기 때문에 "권한 거부" 오류*가 발생하고 텍스트 파일의 첫 번째 토큰 명령줄에서는 실행될 명령으로 간주됩니다.

그러나 이것은 항상 실수로 편집기 명령을 입력하는 것을 잊어버렸다는 것을 의미하므로 쉘이 첫 번째 토큰이 "실행" 비트 세트가 없는 기존 텍스트 파일임을 어떻게든 인식하고 자동으로 열 수 있다면 두 가지 모두 $EDITOR에 매우 편리합니다 $VISUAL.

Bash나 Zsh에서 이를 달성할 수 있는 방법이 있나요? (나는 Bash를 사용하지만 어쨌든 전환을 고려하고 있습니다.) 이것은 표준 "디렉토리입니다"라는 오류를 표시하는 대신 autocd첫 번째 토큰이 디렉토리인지 자동으로 감지하고 그 안으로 들어가려고 시도하는 Bash의 옵션과 비슷합니다. cd.

이상적으로는 파일 목록(예: glob 포함)이나 기타 매개변수 세트를 제공하는 경우모두이러한 매개변수 중 일부는 편집기 명령에 전달됩니다.

* 물론, ./.

답변1

에서는 zsh텍스트 파일에 파일 확장자( )가 있으면 file.ext다음을 사용할 수 있습니다.접미사 별칭. 명령줄의 첫 번째 단어가 비어 있지 않은 문자열과 일치할 때 실행됩니다 alias -s name=value.value text.nametext.nametext

예를 들어:

정의한다면

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

관련 정보