매개 변수가있는 ZSH 별칭


94

간단한 git add / commit / push에 대한 매개 변수로 별칭을 만들려고합니다.

함수가 별칭으로 사용될 수 있다는 것을 보았 기 때문에 시도했지만 만들지 못했습니다 ..

내가하기 전에 :

alias gitall="git add . ; git commit -m 'update' ; git push"

하지만 내 커밋을 수정할 수 있기를 원합니다.

function gitall() {
    "git add ."
    if [$1 != ""]
        "git commit -m $1"
    else
        "git commit -m 'update'"
    fi
    "git push"
}

(나는 그것이 끔찍한 자식 연습이라는 것을 안다)

답변:


113

인수 *로 별칭을 만들 수 없습니다. 함수 여야합니다. 함수가 가깝습니다. 전체 명령 대신 특정 인수를 인용하고 [].

gitall() {
    git add .
    if [ "$1" != "" ] # or better, if [ -n "$1" ]
    then
        git commit -m "$1"
    else
        git commit -m update
    fi
    git push
}

* : 대부분의 셸은 별칭에서 인수를 허용하지 않습니다. csh와 파생물이 허용한다고 생각하지만 어쨌든 사용해서는 안됩니다 .


csh하지만 전혀 기능이 없습니다. (별명이 매개 변수를 취할 수 있기 때문에 함수가 없는지 또는 함수가 없기 때문에 별칭이 매개 변수를 취하는 지 또는 무엇인지
모르겠습니다

그래서 당신은 그것을 (쉘에서) 다음과 같이 부를 것입니다 gitall "my commit message". 아니면 당신이 그것을 gitall('my commit message')
부르시겠습니까

@ archae0pteryx 함수는 다른 명령과 똑같이 호출되므로 gitall "my commit message".
Kevin

나는 getall() {선행하지 않고 제안하고 싶습니다. function확실히 zsh에서 합법적이지만 유일한 변경으로 모든 POSIX 호환 쉘과 호환됩니다.
Charles Duffy

9
BTW, git commit -m "${1:-update}"(기본값이 제공된 매개 변수 확장)을 사용했다면 if명령문 이 전혀 필요하지 않습니다 .
Charles Duffy

104

어떤 이유로 든 매개 변수와 함께 별칭을 정말로 사용해야하는 경우 별칭에 함수를 포함하고 즉시 실행하여 해킹 할 수 있습니다.

alias example='f() { echo Your arg was $1. };f'

이 접근 방식은 .gitconfig 별칭에서 많이 사용되었습니다.


7
그래서 아름다운 아직 그래서 해키와
로코코

14
왜 별명을 만드나요? 그냥 함수를 호출하십시오 example.
tripleee

1
또한 뒤늦게 닫는 중괄호 앞에 세미콜론이 필요합니다.
tripleee

이것은 아름다웠다. 이를 통해 rc 파일에 별칭을 추가하는 별칭을 만든 다음 해당 rc 파일을 다시로드 할 수있었습니다. ❤️ alias addalias = 'f () {echo "alias"$ 1 >> ~ / .zshrc &&. ~ / .zshrc}; f '
MayTheSForceBeWithYou

5
전역 범위에 이름을 추가 할 필요가 없습니다. 익명 함수를 사용하면됩니다.alias example='(){ echo Your arg was $1. ;}'
maoizm

10

.zshrc 파일에서이 함수를 사용했습니다.

function gitall() {
    git add .
    if [ "$1" != "" ]
    then
        git commit -m "$1"
    else
        git commit -m update # default commit message is `update`
    fi # closing statement of if-else block
    git push origin HEAD
}

여기에서 git push origin HEAD현재 분기를 원격으로 푸시 할 책임이 있습니다.

명령 프롬프트에서 다음 명령을 실행하십시오. gitall "commit message goes here"

gitall커밋 메시지없이 실행 update하면 함수가 말한대로 커밋 메시지가 표시됩니다 .


4

"git add ."그리고 그 사이의 다른 명령은 "bash의 문자열 일뿐 "입니다.

[ -n "$1" ]if body에서 대신 사용하는 것이 좋습니다.


0

나는 받아 들인 대답 (Kevin 's)을 시도했지만 다음과 같은 오류가 발생했습니다.

defining function based on alias `gitall'
parse error near `()'

따라서 git 문제 에 따라 구문을 이것으로 변경 했으며 작동했습니다.

    function gitall {
    git add .
    if [ "$1" != "" ]
    then
        git commit -m "$1"
    else
        git commit -m update
    fi
    git push
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.