일부 매개변수를 사용하여 zsh/bash 매크로를 생성하는 방법

일부 매개변수를 사용하여 zsh/bash 매크로를 생성하는 방법

git을 돕기 위해 일부 기능/별칭을 만들고 싶지만 .zshrc방법을 모르겠습니다.

첫 번째:

완전한 명령:git commit -s -m "My message"

내가 원하는 최종 결과:gsc -m "My message"

두번째:

완전한 명령:git commit -s -a -m "My message"

내가 원하는 최종 결과:gsca "My message"

보시다시피, 저는 부분 인수를 사용하여 무언가를 호출하고 이 매크로 호출의 출처에 관계없이 다른 모든 인수를 받아들일 수 있는 매크로를 원합니다.

내가 시도한 것:

  1. function gsc() { git commit -s $@; }
  2. alias gsc='git commit -s'

이들 중 어느 것도 작동하지 않습니다.

내 테스트:

> gsc -a -m "test"
On branch main
Your branch is up to date with 'origin/main'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    smth.txt

nothing added to commit but untracked files present (use "git add" to track

답변1

여기:

function gsc() { git commit -s $@; }

사용인용되지 않음 $@즉, 함수에 대한 모든 인수가 토큰화됩니다. 예를 들어 호출은 인수 , , , 및 즉 , 쉘 명령줄 상위를 실행한 것처럼 커밋 메시지를 다른 인수로 분할해야 하는 항목으로 호출 gsc -m "hello there"됩니다 .gitcommit-s-mhellotheregit commit -s m hello there

확장명을 "$@". 또한 function foo표준 foo(). 그래서:

gsc() { git commit -s "$@"; }

반면에 별칭은

alias gsc='git commit -s'

작동해야 할 것 같습니다. 별칭은 구문 분석되기 전에 명령줄의 내용만 대체하므로 와 gsc -m "hello there"정확히 동일해야 합니다 git commit -s -m "hello there".

테스트할 때 별칭과 함수를 모두 정의하지 않았는지 확인하고 싶을 수도 있습니다. 이는 분명 혼란을 야기할 것입니다.

답변2

귀하의 솔루션은 올바르며 테스트 결과 예상대로 작동하는 것으로 나타났습니다. 짧은 명령 옆에 전체 명령을 입력하고 동일한 결과를 얻는지 확인하면 예상대로 작동하는지 확인할 수 있습니다. 즉, 실행 gsc -a -m "test"하고 "커밋에 아무것도 추가되지 않았습니다"가 표시된 후 실행 git commit -s -a -m "test"하고 동일하게 작동하는지 확인합니다.

함수 대신 별칭을 사용하는 것이 좋습니다. 첫째, 자동 완성이 작동하도록 허용합니다. 둘째, 큰따옴표 누락과 같은 일반적인 오류 $@(함수에 존재하는 오류) 를 방지할 수 있습니다 gsc.

관련 정보