현재 쉘에서 함수를 가져와 나중에 사용할 수 있도록 저장하는 올바른 방법은 무엇입니까?

현재 쉘에서 함수를 가져와 나중에 사용할 수 있도록 저장하는 올바른 방법은 무엇입니까?

최근에는 일회성 함수를 많이 작성하고 있습니다. 때때로 저는 "음, 이것을 저장해야 합니다"라고 말하고 type <function name>이를 사용하여 코드를 표시한 다음 복사하여 .bashrc에 붙여넣습니다. 이를 수행하는 더 빠른 방법이 있습니까? 아니면 이 목적을 위해 만들어진 표준이나 명령이 있습니까?

FWIW, 저는 Mint를 실행하는 개인용 컴퓨터에서 이 작업을 수행하고 있으므로 복사 및 붙여넣기와 같은 편의가 쉽습니다. 그러나 쉘 전용 환경과 관련된 답변에도 관심이 있습니다.

답변1

ksh, 및 를 포함한 Korn과 유사한 셸에서 zsh다음을 수행할 수 있습니다 bash.yash

typeset -fp myfunc

함수 정의를 인쇄합니다 myfunc.

따라서 이것을 끝에 추가할 수 있습니다 ~/.bashrc.

typeset -fp myfunc >> ~/.bashrc

답변2

이 목적을 위해 만들어진 일부 표준 또는 명령

잘 모르겠지만 유형 + 꼬리 + 리디렉션을 사용할 수 있습니다.

예를 들어, 함수가 있습니다 edit(). 이것은 내 type edit결과입니다.

edit — это функция
edit () 
{ 
    for arg in "$@";
    do
        if which "$arg" > /dev/null; then
            subl $(realpath $(which "$arg"));
        else
            echo "$arg not found";
        fi;
    done
}

edit — это функция내가 사용하는 첫 번째 줄을 억제하려면 다음을 수행하십시오 tail -n +2.

$ type edit | tail -n +2
edit () 
{ 
    for arg in "$@";
    do
        if which "$arg" > /dev/null; then
            subl $(realpath $(which "$arg"));
        else
            echo "$arg not found";
        fi;
    done
}

그런 다음 이 출력을 .bash_profile 또는 .bashrc 등으로 리디렉션해야 합니다. type edit | tail -n +2 >> $HOME/.bash_profile

이제 이것이 실제로 함수인지 확인해 보겠습니다 edit. 인수가 함수이면 type -t edit한 단어만 출력됩니다.function

최종 솔루션은 다음과 같습니다.

add_to_bash_profile() {
    local type_of_arg="$(type -t $1)"
    if [ "$type_of_arg" == "function" ]
    then 
        echo >> $HOME/.bash_profile #adding empty line for readability of .bash_profile
        type $1 | tail -n +2 >> $HOME/.bash_profile
    else
        echo "$1 is not a function"
    fi
}

이제 .bash_profile에 이 기능을 추가할 수 있습니다:

add_to_bash_profile add_to_bash_profile

관련 정보