태그 보관물: shell

shell

공백을 포함하여 git [action] 명령의 별칭을 어떻게 만들 수 있습니까? 내 별칭의 대부분은 다음과 같은

내 별칭의 대부분은 다음과 같은 형식입니다. alias p='pwd'

나는 별명 싶지 git commit는 않습니다 있도록git commit -v

그러나 공백이있는 별칭을 만들려고하면 오류가 발생합니다.

$ alias 'git commit'='git commit -v'
-bash: alias: `git commit': invalid alias name



답변

질문에 대한 직접적인 대답은 아니지만 (별칭은 한 단어로만 가능하므로) git-config대신 사용해야합니다 .

git config --global alias.civ commit -v

이것은 git 별명을 생성하여 git civ실행됩니다 git commit -v. 불행히도 AFAIK 는 기존 git 명령을 aliases로 재정의하는 방법이 없습니다 . 그러나 항상 적절한 별명을 선택하여 대안으로 사용할 수 있습니다.


답변

공백을 포함하는 명령에 대해 이야기하고 있지만 여기에는 명령이 git있고 공간이 없습니다.

git commit 명령 을 호출하려면 명령을 작성해야합니다.

git\ commit ...
'git commit' ...
"git commit" ...

일반적으로 명령에는 쉘에서 호출하는 것이 번거롭기 때문에 이름에 공백이 없으므로 시스템에서 그러한 명령을 찾을 수 없다고 생각합니다.

csh, tcsh 또는 zsh를 사용하면 위의 것들 중 하나를 별칭으로 지정할 수 있지만 bash 또는 ksh는 사용할 수 없습니다 (pdksh는 허용하지만 사용할 수는 없습니다). zsh에서 :

alias "'git commit'=git commit -v"
'git commit' ...

만들 것 git command(으로 호출 할 때 명령을 'git command'단일 따옴표 () 만 해당)의 별칭을 git와 명령 commit-v인수. 당신이 찾고있는 것이 아니라고 생각합니다.

alias별명 명령 만 할 수 있기 때문에 여기에서 별명을 지정할 수있는 것은 명령 뿐이며 git인수 목록에서 “commit”뒤에 “-v”를 삽입하는 것으로 별명을 지정해야합니다. @ jw013의 솔루션을 사용하는 것이 가장 좋지만 어떤 이유로 인해 별칭을 사용하는 대신 할 수 없거나 사용할 수없는 경우 함수를 사용하여 작업을 수행 할 수 있습니다.

git() {
  if [ "$1" = commit ]; then
    shift
    set -- commit -v "$@"
  fi
  command git "$@"
}


답변

Bash에서는 공백이있는 명령의 별명을 작성할 수 없습니다.
그러나 .bashrc에서 다음 함수를 해결 방법으로 사용합니다.

sudo() { if [[ $@ == "pacman -Syu" ]]; then command pacup.sh; else command sudo "$@"; fi; }

작동 방식 : 호출하려는 명령으로 시작합니다. 제 경우에는입니다 sudo.
그런 다음 어떤 매개 변수를 사용할지 언급합니다. 이 경우, pacman -Syu.
트리거 된 경우 어떤 명령을 실행해야합니까? 위의 진술에서 그것은입니다 pacup.sh.
그렇지 않으면 어떤 명령을 실행해야합니까 sudo $@. $@당신이 짐작 하듯이 명령이 취하는 매개 변수 목록입니다.

따라서 특정 사례에 대한 명령을 내리면 다음과 같습니다.

git() { if [[ $1 == "commit" ]]; then command git commit -v; else command git "$@"; fi; }

그러나이 솔루션은 공백이있는 명령의 별명을 지정하려는 경우에보다 일반적인 경우입니다.
특정 경우에는 jw013의 솔루션으로 git 명령의 별칭을 지정하는 것이 좋습니다.git-config


답변

로부터 bash는 별칭 맨 페이지

인용되지 않은 경우 각 간단한 명령의 첫 단어는 별칭이 있는지 확인합니다. 그렇다면 해당 단어가 별칭의 텍스트로 바뀝니다. 별명과 대체 텍스트는 별명에`= ‘를 포함 할 수없는 것을 제외하고 쉘 메타 문자를 포함한 유효한 쉘 입력을 포함 할 수 있습니다.

대체 텍스트의 첫 번째 단어는 별칭을 테스트하지만 확장되는 별칭과 동일한 단어는 두 번째로 확장되지 않습니다. 이는 예를 들어 ls를 “ls -F”로 별칭을 지정할 수 있으며 Bash는 대체 텍스트를 재귀 적으로 확장하려고 시도하지 않습니다.

따라서 첫 번째 단어 만 확인되므로 여러 단어로 된 별칭을 가질 수 없습니다. 에서 이 슈퍼 사용자 질문 , 함수를 사용하여 해결 방법이 제공됩니다

ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }

에 적용 할 수 있습니다 git.


답변

올바른 해결책은 jw013 제안과 같은 별칭을 사용하는 것이지만 공백이있는 별칭을 만들려면 별칭을 NEST 할 수 있습니다.

예를 들어 로컬 및 원격으로 분기를 삭제하는 별칭이 있지만 사용자가 항상 분기를 지정하기를 원합니다.

remrem = "!sh -c 'if [ $# -ne 1 ]; then git specBranch; else git push origin :$1 && git branch -d $1; fi' -"

#echoing aliases
specBranch = "!sh -c 'echo Specify branch please!'" 


답변

에서 예를 들어,이 작업을해야합니다 :

따라서 다른 명령과 함께 sudo를 사용하고 있지만 shutdown과는 달리 sudo를 사용하고 다른 시스템에 shutdown을 적용 할 수 있다면 다음을 수행 할 수 있습니다.

alias sudo='sudo '
alias shutdown="echo nope"

그러나 당신의 명령으로 :

alias git='git '
alias commit="commit -v"


답변