이건 어느 정도 솔직해야 할 것 같은데...
기본적으로 일부 명령의 경우 해당 명령에 대한 모든 인수 범위를 지정하는 다른 명령을 호출할 수 있기를 원합니다. 그래서...
git commit -am "test"
될 것입니다...
./shell_comand git
>commit -am "test"
>status
그렇다면 자동완성과 같은 기능은 당연히 작동하지 않을 것입니다. 하지만 그렇지 않은 경우 어느 정도는 가능하지 않을까 싶습니다. 어떻게 될지 잘 모르겠습니다...
답변1
나는 이것이 그 자체로 가능해야 한다고 생각 git
하지만, 나는 git 전문가가 아니기 때문에 쉘 함수에서 그것을 사용할 것입니다. sh
호환성(예: ) 에서는 바이너리 대신 호출될 함수를 bash
쉽게 작성할 수 있습니다 ( 불필요한 재귀를 방지하려면 함수 내부 또는 BASH에서 바이너리에 대한 전체 경로를 사용하도록 주의하십시오).git
git
command git
function git () {
case "$1" in
"commit")
# do your stuff
/path/to/git ...
;;
*)
# call git binary with the same arguments
/path/to/git "$@"
;;
}
명령 별칭( )만 사용할 수도 있지만 alias
함수를 사용하면 더 많은 유연성을 얻을 수 있습니다.
완료에 관해서는 쉘의 완료 기능을 확인하십시오( 맨 페이지에서 bash
찾아보십시오 complete
). 확실히 작동하도록 만들 수 있으며 너무 복잡할 필요도 없습니다.
답변2
한 가지 방법은 각 git 명령에 대한 별칭을 정의하는 것입니다. 일반 쉘 명령을 계속 실행할 수 있습니다. 필요하지 않은 경우 PATH
존재하지 않는 디렉토리로 설정하십시오. git 명령 대신 셸 명령을 실행하려면 명령 앞에 백슬래시를 추가하세요(예: \rm foo
파일 삭제).
git_commands=$(COLUMNS=2 git --help --all | sed -n -e '1,/^----/d' -e '1,/^$/p')
for c in $git_commands; do
alias "$c=git $c"
done
zsh에서는 옵션이 설정되어 있으면 이 작업을 수행할 수도 있습니다 complete_aliases
. 나는 배쉬를 모른다.