별칭을 터미널 라인으로 설정하려면 어떻게합니까?


9

git-go이 터미널 라인에 별칭을 쉽게 설정하고 싶습니다 .

git commit -m "init "; git push; git status

그래서 git-go를 입력하면이 줄이 입력되어야합니다.

어떻게해야합니까? 내가 본 답변은 매개 변수가없는 명령의 별칭 만 포함합니다. 그러나 별칭을 임의의 터미널 라인으로 설정하고 싶습니다.


무엇을 시도 했습니까? 다른 질문은 무엇입니까? askubuntu.com/q/17536/507051에서 설명하는 내용이 정확히 무엇입니까?
— 디저트

내 문제는 외부 따옴표에 작은 따옴표 대신 큰 따옴표를 사용하는 것이 었습니다.
— Philip Rego 2016 년

외부에서 큰 따옴표를 사용하고 내부에서 작은 따옴표를 사용하는 다른 방법으로도 할 수 있습니다.
— Videonauth

답변:


13

별명을 설정하는 것과 같은 방법으로이 작업을 수행합니다.

alias git-go='git commit -m "init "; git push; git status'

그것은 까다로운 얻는 상황은 하지 별명이 명령을 실행하고 명령에 인수를 전달하거나 별칭에 의해 구분 된 여러 명령을 실행하는 경우에도 때 ;대신,하지만 당신은 받아들이고 자신의 명령 줄 인수를 사용하는 별칭을 할 때입니다 .

예를 들어, 해당 별명 이름 뒤에 작성한 내용 은 끝에 붙여 져서 세 번째 git명령 인 after에 명령 행 인수로 전달됩니다 git status. (실제로 다음 텍스트가 그대로 남고 별칭 이름이 정의로 바뀔 때까지 다음 텍스트를 끝에 붙여 넣지는 않습니다.)

따라서 인수없이 별칭을 실행할 수 있으며 마지막 명령은 git status다음과 같습니다.

git-go

또는 전달하려는 인수로 실행할 수 있습니다 git status. 예를 들어, 이런 방식으로 실행할 때 마지막 명령은 git-status --show-stash다음과 같습니다.

git-go --show-stash

당신이 할 수 배쉬 (및 기타 Bourne의 스타일 쉘)의 별칭으로 할 것은 별칭이 명령 줄 인수를 허용하고 다른 말보다 더 그들을 배치하는 것입니다.

예를 들어, git-go확약 메시지에 사용하는 인수를 승인 하려한다고 가정하십시오 . 이것을 별명으로 쓸 수 없습니다. 해결책은 대신 쉘 함수로 작성하는 것입니다.

git-go() { git commit -m "$1"; git push; git status; }

쉘 함수의 정의에있어서, 상기 위치 파라미터는 $1, $2, 등 쉘 함수에 전달 된 명령 행 인수의 값을 포함. 별명 확장은 실제로 쉘이 명령을 구문 분석 할 때 매우 일찍 발생하는 매크로 처리의 형태이기 때문에 별명에는 이에 대응하는 기능이 없습니다.

물론 Videonauth가 제안한 것처럼 정의에서 위치 매개 변수를 사용할 필요가없는 경우에도 쉘 함수로 작성할 수 있습니다.


1
더 나은 : git-goPATH에 이름이 지정된 스크립트를 배치 하고git go 하면 작동합니다.
— D. Ben Knoble 12

10

~/.bash_aliases파일 에서 다음 과 같이 함수를 선언 할 수 있습니다 .

git-go(){
    git commit -m "init "
    git push
    git status
}

또는 같은 파일에서 다음과 같이 별칭을 만들 수 있습니다.

alias git-go='git commit -m "init "; git push; git status'

파일 . ~/.bash_aliases을 변경 한 후에 터미널을 다시 열거 나 파일 ( )을 소싱하는 것을 잊지 마십시오 .


1
별명 대신 쉘 함수를 작성하면 따옴표를 중첩 할 필요가 없다는 이점이 있습니다. 따라서이 답변 은 OP가 광산보다 더 직접적 으로 발생하는 주요 문제를 해결합니다 .
— Eliah Kagan

@EliahKagan 둘 다 그 질문에 대해 괜찮습니다. 다시 만나서 반가워요
— Videonauth

4

git명령을 다룰 때 특히 다음에 대한 별명을 추가하는 구문을 알고 싶을 수도 있습니다 git.

git config --global alias.go '!sh -c "git commit -m \"init\"; git push; git status"'

로컬 git구성에 새 별칭을 추가하고 (at ~/.gitconfig)

git go

안에있을 때 git저장소 . 실행할 때마다 git go쉘이 호출되고 명령 git commit -m "init"; git push; git status이 전달됩니다.

자세한 내용 은 자식 문서 를 참조 하십시오.


3

인용 문제였습니다. 나는 이것을 시도했다 :

alias="git commit -m "init "; git push; git status"

그러나이 오류가 발생했습니다 :

bash: ; git push; git status: command not found

중첩 따옴표를 잘못 사용했기 때문에 오류가 발생했습니다. 올바른 구문은 다음과 같습니다.

alias='git commit -m "init "; git push; git status'

또는:

alias="git commit -m 'init '; git push; git status"

커밋 메시지에 공백이 없으면 따옴표없이 :

alias="git commit -m init; git push; git status"

이 답변을 게시 해 주셔서 감사합니다 (제 답변과 Videonauth는 인용 문제에 크게 집중하지 않기 때문에). 호기심 때문에 커밋 메시지에 후행 공백이 필요한 이유는 무엇입니까?
— 엘리아 카간

나는이 줄을 수동으로 붙여 넣었으며 공백 뒤에 메시지를 추가하려고했지만 여기서는 의미가 없으므로 제거했습니다.
— Philip Rego 2016 년

1
이 경우 인용 할 필요가 없습니다 init. 쉘은 'init', "init"및 init동일하게 취급합니다 . (따라서 중첩 된 따옴표가 필요한 상황을 설명하기 위해 원래 버전을 되돌리고 새 버전을 표시 할 수도 있습니다.) 나머지 메시지를 추가 할 수 있으려면 명령 행으로 전달할 수 있습니다. 인수 경우 (Videonauth 및 내 답변에 표시된 것처럼) 별칭 대신 함수를 정의했습니다. 예를 들어, 정의 할 수 있습니다 git-go() { git commit -m "init $1"; git push; git status; }(내 대답에는 있지만 "init $1"대신 대신 사용 "$1").
— Eliah Kagan 2016 년

고맙습니다. 다음에 시도하고 싶었습니다.
— Philip Rego 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.