나는 나를 위해 단순화 할 수있는 기능을 만들 계획입니다. 기능은 다음과 같습니다
function lazymode()
{
echo "Hello World!";
}
셸 에서 명령 lazymode
을 사용하면 을 출력합니다 .Hello World!
사용자 정의 함수를 어떤 파일에 넣어야합니까?
나는 나를 위해 단순화 할 수있는 기능을 만들 계획입니다. 기능은 다음과 같습니다
function lazymode()
{
echo "Hello World!";
}
셸 에서 명령 lazymode
을 사용하면 을 출력합니다 .Hello World!
사용자 정의 함수를 어떤 파일에 넣어야합니까?
답변:
기능에 따라 다릅니다. 이처럼 아주 간단한 단일 라이너라면 별칭을 만들거나 함수가 ~/.bashrc
시작될 때 bash가로드되는 파일을 만들 수 있습니다 .
조금 더 고기를 만들려면 ~/bin/
기본적으로 존재하지 않지만 (디렉토리 일뿐) 경로에 있어야하는 자체 실행 스크립트를 작성하는 것이 더 합리적 입니다. 이를 위해 파일은 실행 파일이어야 chmod +x filename
하고 ( ) 적절한 #!/bin/bash
스탠자로 시작해야합니다 .
두 번째 경로에는 몇 가지 분명한 이점이 있습니다.
~/bin/
해당 쉘의 경로에있는 한 모든 쉘에서 사용할 수 있습니다 (대부분의 경우 AFAIK 여야 함)./usr/local/bin
대신 $PATH
?
~/.bashrc
( source
d 그대로) 함수를 넣을 때 작지만 가치가있는 장점은 Bash가 PATH 조회를 수행하기 전에 함수를 찾는 것입니다.
최선의 선택은 ~/.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
파일은 로그인 쉘의 명령 인터프리터에 의해 실행됩니다. GUI를 사용하고 터미널을 열면 로그인하지 않은 쉘에 있기 때문에 해당 파일이 실행되지 않습니다.
영구 함수를 선언하기위한 필수 절차는 다음과 같습니다.
~/.bashrc
텍스트 편집기에서 파일을 엽니 다 . 사용 방법을 알고있는 한 텍스트 편집기를 열면 아무 텍스트 편집기 나 중요하지 않습니다./home/<username>/.bashrc
~/.bashrc
선언 이 끝나면 자신의 함수를 선언하십시오.
find_dirs(){
find "$1" -type d
}
파일을 저장하고 닫습니다.
~/.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
: "현재 쉘의 컨텍스트에서 기능이 실행되며이를 해석하기위한 새로운 프로세스가 생성되지 않습니다." 즉, 쉘 실행 환경을 변경할 수있는 기능 (변수 및 터미널 설정 변경)도 알고 있어야합니다.