상황에 따라 zsh를 사용합니다. 를 사용할 때마다 전달 하고 플래그를 지정 locate
하고 싶습니다 .-i
-A
일반적으로 문제를 해결할 수 있으면 alias
기존 명령과 동일한 이름의 명령을 생성하여 수행합니다. 그러나 따르면이 문제, 별칭은 매개 변수를 허용할 수 없으므로 대신 함수를 사용해야 합니다. 보통은 명령과 이름이 같은 함수가 있다는 생각이 잘못된 것 같아서 거기서 멈춥니다. 이유는 말할 수 없지만요.
마침내 그런 함수를 만들려고 했을 때 이런 생각이 들었습니다. 이것은 명령에 대한 기본 플래그를 설정하려는 나에게 일반적인 패턴입니다. 더 쉬운 방법이 없을까요? 아마도 zsh가 이 문제에 대한 더 나은 솔루션을 제공할 수 있을까요?
이것은 나에게 또 다른 생각을 하게 한다: 기존 명령을 재정의하는 것이 안티 패턴인가? 나는 항상 이렇게 합니다. 왜냐하면 머릿속에 있는 연관성을 건너뛸 수 있기 때문입니다. 예를 들어 "왜 ll
페이지가 없지 man
? 아, 그래: ll
정말 의미하는 건 ls -la
. 해야 하는 man ls
게 아니라 man ll
. 잠깐만."
결론적으로:
- 다시 작성해도 괜찮습니까/관용적입니까?기존 명령별칭/함수가 있습니까?
- zsh 또는 다른 도구가 특정 명령에 대한 기본 플래그를 설정하는 보다 직접적인 방법을 제공합니까?
답변1
나는 당신이 언급한 다른 기사가 매우 오해의 소지가 있을 수 있기 때문에 매우 놀랐습니다. 별칭이 아니기 때문에사용매개변수는 별칭이 불가능하다는 것을 의미하지 않습니다.놓다매개변수. 물론 별칭에 옵션을 넣을 수 있지만 이는 제한적이므로 별칭이 한 곳에서 대체됩니다.
$ alias ls='ls -l'
$ ls
# will run: ls -l
$ ls foo
# will run: ls -l foo
다른 질문에서 묻는 질문은 매개변수가 있는 별칭에 옵션을 추가하려는 경우입니다.
따라서 별칭이 있는 경우:
$ alias movetotrash='mv ~/Trash'
# no way to use inject anything inside 'mv' and '~/Trash'
그래서 당신의 경우에는
$ alias locate='locate -i -A'
# will expand to 'locate -i -A' and then whatever else you type.
귀하의 구체적인 질문에 관해서는:
Linux 배포판에서는 별칭을 통해 기본 "옵션"을 제공하는 것이 매우 일반적입니다. 예를 들어 ls alias ls 'ls --color=auto'
또는 루트 로그인에 대한 옵션이 있는 경우가 많습니다 alias mv 'mv -i'
. 따라서 이는 사용자에게 더 나은 기본값을 제공하고 기본 바이너리와 동일한 이름을 사용하는 표준 방법으로 간주될 수 있습니다. 사용자가 별칭을 사용하고 싶지 않고 표준 환경에 설정된 경우 unalias를 사용하여 별칭을 영구적으로 설정 해제하거나 백슬래시를 사용하여 명령을 실행할 수 있습니다(예: \mv a b
해당 실행을 방지하는 별칭 확장). 경로가 사용됩니다. 예 /usr/bin/mv a b
)
나는 zsh가 이 영역에서 추가 기능을 제공한다고 믿지 않으며 확실히 "표준"은 없습니다. 사람들은 종종 래퍼 쉘 스크립트를 작성하고 때로는 쉘 함수를 작성합니다. 그러나 일반 소프트웨어의 경우 별칭은 일반적으로 사람들이 사용하는 솔루션입니다. 프로그램이 충분히 복잡하다면 일반적으로 일반 사용자의 선호도에 맞는 rc 파일을 얻게 됩니다.
popt 라이브러리는 사용자가 자신만의 소프트웨어 옵션을 만들 수 있도록 하여 옵션을 더 쉽게 만들려는 도구라고 생각합니다. 하지만 popt 라이브러리는 널리 사용되지 않으며 기본값을 설정하는 기능도 없는 것 같습니다.
답변2
동일한 이름의 별칭을 사용하는 것이 별칭 지정의 핵심입니다.
An alias definition provides a string value that shall replace a command name when it is encountered
alias grep='grep --ignore-case --color=auto'
완벽한 대체품으로 사용할 수 있습니다 grep
.
명령을 대체하기 위한 함수나 ~/bin/
스크립트를 생성하려면 해당 명령을 직접 참조해야 합니다.
function grep {
grep --ignore-case --color=auto "${@}"
}
또는
~/bin/grep
:
grep --ignore-case --color=auto "${@}"
...함수나 스크립트가 자신을 끝없이 호출하는 재귀 루프에 잠겨 있습니다.
function grep {
/bin/grep --ignore-case --color=auto "${@}"
}
또는
~/bin/grep
:
/bin/grep --ignore-case --color=auto "${@}"
...자신을 호출하지 않기 때문에 재귀로 인해 죽지 않습니다.
별칭의 유일한 문제점은 "기본" 매개변수 사이에 내부적으로 매개변수를 삽입할 수 없다는 것입니다. 함수와 스크립트를 사용할 수 있습니다.
function grep {
/bin/grep ${1} --ignore-case --color=auto ${2}
}
또는
~/bin/grep
:
/bin/grep ${1} --ignore-case --color=auto ${2}
...하지만 일반적인 인수 순서가 필요한 최신 버전의 명령을 사용하려고 하면 매우 빨리 혼란스러워집니다.