명령에 대한 의사 셸 만들기

명령에 대한 의사 셸 만들기

이건 어느 정도 솔직해야 할 것 같은데...

기본적으로 일부 명령의 경우 해당 명령에 대한 모든 인수 범위를 지정하는 다른 명령을 호출할 수 있기를 원합니다. 그래서...

git commit -am "test"

될 것입니다...

./shell_comand git
>commit -am "test"
>status

그렇다면 자동완성과 같은 기능은 당연히 작동하지 않을 것입니다. 하지만 그렇지 않은 경우 어느 정도는 가능하지 않을까 싶습니다. 어떻게 될지 잘 모르겠습니다...

답변1

나는 이것이 그 자체로 가능해야 한다고 생각 git하지만, 나는 git 전문가가 아니기 때문에 쉘 함수에서 그것을 사용할 것입니다. sh호환성(예: ) 에서는 바이너리 대신 호출될 함수를 bash쉽게 작성할 수 있습니다 ( 불필요한 재귀를 방지하려면 함수 내부 또는 BASH에서 바이너리에 대한 전체 경로를 사용하도록 주의하십시오).gitgitcommand 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. 나는 배쉬를 모른다.

관련 정보