Bash의 grom() 키워드가 예상치 못한 "(" 표시를 발생시킵니다.

Bash의 grom() 키워드가 예상치 못한 "(" 표시를 발생시킵니다.

내 프로그램에 오류가 발생하는 이유를 완전히 모르겠습니다..bash_profile

syntax error near unexpected token `('

grom()내 기능에서 키워드를 사용할 때. 내 마스터 브랜치를 원본으로 자동 재설정하는 bash 기능을 만들고 싶습니다.

# git status
alias gs='git status'

# git stash list
alias gsl='git stash list'  

grom() {
  branch_name="$(git symbolic-ref --short -q HEAD)"
  git fetch && git rebase origin/master && git checkout master && git rebase origin/master && git checkout $branch_name
}

# git stash apply. must append stash@{num}
alias gsa="git stash apply"

함수 이름을 변경하면 정상적으로 컴파일됩니다. 키워드를 찾을 수 없어서 grom무엇이 문제인지 잘 모르겠습니다. 함수 이름을 비슷한 다른 것으로 바꾸 git-rom거나 심지어 비슷한 것으로 바꾸면 groms잘 컴파일됩니다. 작동하지 않는 특별한 키워드가 있습니까? 이것은 Mac OS X에 있습니다.

답변1

bash다음과 같이 선언하면 더 나은 행운을 누릴 수 있습니다 .

function grom() { … }

(노트:function 작동하지 않습니다엄격한 POSIX 쉘에서는 dash! )


@팔월이 답변에 대한 편집을 통해 이는 별칭 충돌(또는 그럴듯하지 않지만 어떤 방식으로 정의된 내장 함수)로 인한 것이라고 제안됩니다.

예약어기능충돌을 선점하도록 로딩 순서를 변경하거나(함수 정의 중에 별칭이 확장됨) bash를 비활성화하여 문제를 방지하세요.POSIX 모드(이렇게 하면 내장 함수를 재정의할 수 있습니다.)

bash(1)매뉴얼 페이지 에서 :

함수 정의 자체가 복합 명령이기 때문에 함수가 실행될 때가 아니라 함수 정의를 읽을 때 별칭이 확장됩니다. 따라서 함수에 정의된 별칭은 함수가 실행된 후에만 사용할 수 있습니다.

별칭이 충돌하는 경우 소싱하기 전에 이전 실험을 삭제해 unalias grom볼 수 있습니다(충돌하는 별칭을 아직 정의하지 않는 한 이 파일에 추가할 필요 없음). .bash_profile또는 새 터미널을 실행하여 다시 시작하세요.

관련 정보