별칭을 사용하여 bash에 대한 명령 접두사를 만드는 방법은 무엇입니까?

별칭을 사용하여 bash에 대한 명령 접두사를 만드는 방법은 무엇입니까?

접두사 역할을 하고 공백을 사용하지 않고 구문 분석할 수 있는 bash 별칭을 만들려고 합니다. 기본적으로 모두 동일한 처음 몇 문자로 시작하는 명령 세트가 있으며, 매번 해당 접두사를 입력할 필요 없이 실행하기 전에 다른 명령의 접두사를 붙이고 싶습니다.

즉, 다음과 같이 작동하는 별칭을 생성할 수 있기 alias pref="sudo commandtoprefix"prefcommand원합니다 sudo commandtoprefixcommand.공간이 부족하다는 점을 주목하는 것이 중요합니다.

설명된 내용을 따르면 언젠가는 이 작업을 수행할 수 있을 것이라고 생각했지만 어떤 이유로 지금은 작동하지 않고 오류를 반환합니다 command not found.

나는 우연히 우연히 발견했다이 답변, 그러나 기능을 설명하므로 공백이 필요하며 이는 내 요구 사항을 정확히 충족하지 않습니다.

공백을 사용할 필요가 없는 별칭이나 함수를 사용하여 이를 수행할 수 있는 방법이 있습니까?

답변1

비슷한 작업을 수행하는 함수를 만들 수 있습니다.

function pref { prefix$*; }

그러면 더 많은 전화가 오고 pref command arg arg, 더 많은 전화가 옵니다 prefixcommand arg arg.

답변2

정말로 공백을 사용하지 말라고 고집하고 이런 식으로 접두사가 붙은 가능한 명령 목록을 미리 결정하지 말라고 주장한다면, 이를 달성하기 위해 제가 생각할 수 있는 유일한 방법은 사용자 정의 "명령을 찾을 수 없음" 처리기를 사용하는 것입니다. .

command_not_found_handle()존재하지 않는 명령을 입력하면 Bash는 이 함수를 호출합니다. 함수에서 처음 네 글자가 인지 확인하고 pref, 그렇다면 뒤에 오는 내용이 실제 명령 이름인지 확인하고, 그렇다면 sudo로 실행하고, 그렇지 않으면 일반적인 오류를 보고함으로써 이를 활용할 수 있습니다 .

command_not_found_handle() {
    # read the "missing command" entered
    missingcmd="$1"
    # remove it from the argument list
    shift
    # check if starts with "pref"
    if [[ "${missingcmd:0:4}" == "pref" ]] ; then
        # read part after "pref"
        prefixedcmd="${missingcmd:4}"
        # check if it's a real command
        if which "$prefixedcmd" &> /dev/null ; then
            # run sudo with the cmd and the rest of the argument list
            sudo "$prefixedcmd" "$@"
            return $?
        fi
    fi
    # default command not found behavior
    echo "bash: $missingcmd: not found" >&2
    return 127
}

당신의 .bashrc.

편집: 귀하의 질문을 오해했을 수도 있습니다. 이 작업을 수행하려는 명령에 이미 공통 접두사가 있을 수 있으며 특수 sudo를 사용하여 접두사를 추가할 때 이를 생략하고 싶습니다. 내 경로를 변경하는 경우에도 가능합니다.

prefixedcmd="${missingcmd:4}"

도착하다

prefixedcmd="commonprefix${missingcmd:4}"

관련 정보