zsh에서 작은따옴표를 사용하여 `git commit -m`을 실행하세요.

zsh에서 작은따옴표를 사용하여 `git commit -m`을 실행하세요.

커밋 메시지에 ! 및 $와 같은 항목을 사용하는 경우가 있는데 수동으로 이스케이프해야 하지만 이와 같은 작은따옴표를 사용하는 경우에는 그렇지 않습니다 git commit -m 'My $message here!'. 나는 gc메시지로 이어지는 모든 텍스트를 작성하는 함수를 작성하려고 시도했지만 작은 따옴표를 사용하는 데 성공하지 못했습니다. 내가 시도한 모든 것들은 여전히 ​​큰따옴표를 사용하여 해당 $message부분을 숨기 게 만드는 것 같 으며 그것도 !작동하지 않습니다.

나는 이것을 시도했습니다 :

gc() {
  git commit -m ''$*''
}

이:

gc() {
  message="$*"

  git commit -m ''$message''
}

또한 메시지를 확인할 때 git log작동하지 않는 다른 방법을 시도해도 다음으로 시작하는 단어가 표시되지 않았습니다. $작은 따옴표로 작동하지만 어쨌든 큰 따옴표를 사용합니다.

gc My $message here메시지가 되어야 할 내용 뒤에 모든 텍스트를 실행 하고 싶습니다 gc. 작은따옴표를 사용하도록 강요할 수는 없으며 결국 큰따옴표가 됩니다. 만 출력됩니다 My here.

내가 원하는 방식으로 작동하도록 이 함수를 작성하는 방법이 있나요? 이것이 가능한지 확실하지 않습니다. 감사합니다!

당신은 Bard, ChatGPT, Claude 및 Bing AI보다 더 똑똑합니다. 왜냐하면 제가 그들에게도 몇 시간 동안 운이 없었기 때문입니다.

답변1

TL, DR: 아니요.

당신이 요구하는 것은 불가능합니다. 을 작성할 때 gc My $message here이는 message변수 값을 확장하고 해당 확장을 함수 인수의 일부로 사용하라는 명령입니다.

주석 표시를 추가하는 별칭으로 셸을 속이고 셸 기록에서 주석을 읽는 함수를 호출하여 원하는 것을 얻을 수 있습니다. 이를 통해 함수는 개행 문자를 제외한 모든 문자를 허용할 수 있습니다.

setopt interactive_comments
alias gc='gc_function #'
function gc_function {
  emulate -LR zsh
  setopt extended_glob
  local msg=${history[$HISTCMD]#*[[:space:]]##}
  git commit -m "$msg"
}

이는 완전히 견고하지는 않습니다(그리고 그럴 수도 없습니다). 내가 게시한 버전에는 ; 뒤에 공백이나 기타 공백 문자가 필요합니다 gc. 단어가 아닌 다른 문자를 사용하는 경우 커밋 메시지가 예상한 것과 다를 수 있습니다.

나는 이것을 추천하지 않는다. 한 줄짜리 커밋 메시지를 작성하는 것은 쉽지만 좋은 커밋 메시지를 작성하는 것은 어렵습니다. 좋은 커밋 메시지는 커밋이 수행하는 작업과 방법을 설명합니다. 좋은 커밋 메시지는 편집기에 기록됩니다. 한 줄짜리 커밋 메시지를 쓴다면 잘못한 것이고 후회하게 될 것입니다.

관련 정보