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


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.