사용자 정의 쉘 함수를 어디에 둘 수 있습니까?


14

나는 나를 위해 단순화 할 수있는 기능을 만들 계획입니다. 기능은 다음과 같습니다

function lazymode()
{
echo "Hello World!";
}

에서 명령 lazymode을 사용하면 을 출력합니다 .Hello World!

사용자 정의 함수를 어떤 파일에 넣어야합니까?

답변:


14

기능에 따라 다릅니다. 이처럼 아주 간단한 단일 라이너라면 별칭을 만들거나 함수가 ~/.bashrc시작될 때 bash가로드되는 파일을 만들 수 있습니다 .

조금 더 고기를 만들려면 ~/bin/기본적으로 존재하지 않지만 (디렉토리 일뿐) 경로에 있어야하는 자체 실행 스크립트를 작성하는 것이 더 합리적 입니다. 이를 위해 파일은 실행 파일이어야 chmod +x filename하고 ( ) 적절한 #!/bin/bash스탠자로 시작해야합니다 .

두 번째 경로에는 몇 가지 분명한 이점이 있습니다.

  • 사용 가능한 것을 더 쉽게 볼 수 있습니다
  • 구문 오류는 프로필을 방해하지 않습니다
  • 스크립트를 변경하면 bash 구성을 계속 소싱 할 필요가 없습니다
  • 전체 경로가 사용되거나 ~/bin/해당 쉘의 경로에있는 한 모든 쉘에서 사용할 수 있습니다 (대부분의 경우 AFAIK 여야 함).

나는 나중에 옵션을 사용했다. 내 함수에는 파일을 삭제하고 wget의 명령을 실행하는 명령이 포함되어 있으며 javac 및 java 명령을 실행합니다. 그리고 그놈 터미널에서 시도했을 때 제대로 작동하지 않습니다. 문제가 있다고 생각하십니까?
Abel Melquiades Callejo

대신 무엇을합니까?
Oli

이미 수정되었습니다. 이 답변을 통해 해결
Abel Melquiades Callejo

음 ... 사용자 스크립트가 /usr/local/bin대신 $PATH?
브라이 암

~/.bashrc( sourced 그대로) 함수를 넣을 때 작지만 가치가있는 장점은 Bash가 PATH 조회를 수행하기 전에 함수를 찾는 것입니다.
잔나

4

최선의 선택은 ~/.bashrc파일입니다.

당신도 당신에 직접 쉘 함수 정의를 작성할 수 있습니다 ~/.bashrc당신이 그들을 많이 가지고하고 어수선하지 않으려면, 파일 또는 ~/.bashrc단지 수 있는지 소스 - 파일을 당신은 당신의 선택의 다른 파일에 모두 넣을 수 있습니다, 파일에 ~/.bashrc파일. 예를 들어, 함수가있는 파일의 이름이 bash_functions이면 ~/.bashrc파일에 다음 행을 추가하십시오 .

if [[ -f /path/to/bash_functions ]]; then
    source /path/to/bash_functions
fi

또는 동등하게 :

if [[ -f /path/to/bash_functions ]]; then
    . /path/to/bash_functions
fi

여기서는 .단지 상징적 인 표현입니다 source. if테스트 차종 확인 파일 /path/to/bash_functions을 소스하기 전에 존재한다.

이 기술은 ~/.bashrc호출 된 파일을 작성하고 위의 파일 ~/.bash_aliases과 유사한 구문을 사용하여 파일 ~/.bashrc의 존재 여부를 테스트 한 후 소싱 하여 별명을 설정하는 것과 매우 유사 합니다.


고마워요. 그런데 .profile과의 차이점은 무엇입니까? 일부 리눅스에서는 bashrc에 함수를 넣을 수 없습니다
Abel Melquiades Callejo

2
~/.profile파일은 로그인 쉘의 명령 인터프리터에 의해 실행됩니다. GUI를 사용하고 터미널을 열면 로그인하지 않은 쉘에 있기 때문에 해당 파일이 실행되지 않습니다.
Radu Rădeanu

1

영구 함수를 선언하기위한 필수 절차는 다음과 같습니다.

  1. ~/.bashrc텍스트 편집기에서 파일을 엽니 다 . 사용 방법을 알고있는 한 텍스트 편집기를 열면 아무 텍스트 편집기 나 중요하지 않습니다./home/<username>/.bashrc

  2. ~/.bashrc선언 이 끝나면 자신의 함수를 선언하십시오.

    find_dirs(){
        find "$1" -type d
    }
  3. 파일을 저장하고 닫습니다.

~/.bashrc파일은 (새 터미널 탭, 로그인을 통해입니다 대화 형 쉘 열 때마다 읽을 수있다 ssh, 또는 오픈 TTY1 또는 다른 가상 콘솔). ~/.bashrc비 대화식 쉘에서는 읽지 않기 때문에 스크립트 파일에서는 사용할 수 없습니다. 당신이 실행하는 경우에도 사용할 수 없습니다 bash--norc옵션을 선택합니다.

현재 열려있는 탭에서 기능을 즉시 사용할 수있게하려면 source ~/.bashrc명령을 사용하십시오 .


함수는 일반 명령처럼 인수를 사용합니다. 예를 들어, $1통해 $9함수를 호출 할 때 위치 매개 변수 를 나타냅니다. 위의 예 find_dirs에서 하나의 위치 매개 변수 만 사용하며이라고합니다 find_dirs /etc. $@모든 위치 매개 변수를 참조하는 데 사용할 수도 있습니다 . 함수는 또한 리디렉션을 허용합니다. find_dirs $1 > /dev/null; 로 함수를 호출 할 수 있습니다 . 또한 다음과 같이 선언 할 수 있습니다.

find_dirs(){
    find "$1" -type d
}

참고 사항 man bash: "현재 쉘의 컨텍스트에서 기능이 실행되며이를 해석하기위한 새로운 프로세스가 생성되지 않습니다." 즉, 쉘 실행 환경을 변경할 수있는 기능 (변수 및 터미널 설정 변경)도 알고 있어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.