셸에서 함수 내보내기
부모 셸 (bash, sh 또는 ksh)에서 함수를 내보내는 방법을 알려주세요. 그러면 부모 프로세스에서 시작된 모든 자식 프로세스에서 함수를 사용할 수 있습니다.
이 export -f
기능은 Bash에만 해당됩니다.
부모의
#!/bin/bash
plus1 () { echo $(($1 + 1)); }
echo $(plus1 8)
export -f plus1
./child 14 21
아이
#!/bin/bash
echo $(plus1 $(($1 * $2)) )
이어 sh
, 그 것이다 하지 같은 기능을 내보낼 수 찰스 더피 하였음 .
ksh 또는 zsh를 사용하는 경우 :
FPATH
모든 함수를 배치 할 수 있는 환경 변수를 사용할 수 있습니다 .
경우는 FPATH
대화 형 인터프리터에 설정되고, 명령이나 함수는 현재 쉘 환경에서 발견되지 않았거나는 PATH
, 디렉토리가 누락 된 명령의 이름을 딴 파일의 존재가 검색됩니다 나열. 하나가 발견되면 현재 쉘 환경에서 소싱되며 함수를 정의 할 것으로 예상됩니다.
따라서 모든 함수를의 위치에 배치 할 수 FPATH
있으며 하위 스크립트도 찾을 수 있습니다.
autoload
쉘 스크립트 에서 명령을 사용하여 필요한 기능을로드 할 수 있습니다.
autoload fun_a fun_b
zsh에서 작동 autoload
하려면이 필요 FPATH
합니다. 에서 ksh
와 그 가까운 친척들, 나는 그것이 직접 정의 된 것처럼 단순히 FPATH
당신의 PATH의 정규 명령을 무시하도록 정의 된 함수를 야기한다고 믿습니다 .
FPATH
및에 대한 세부 정보 autoload
:
- http://docstore.mik.ua/orelly/unix3/upt/ch29_13.htm
- http://users.speakeasy.net/~arkay/216-7.4KshFunctions.html
를 사용하여 서브 쉘을 작성하면 ( )
모든 정의, 매개 변수 및 쉘 변수의 스냅 샷을 상속합니다.
프로그램처럼 실행하면 정의를 .bashrc
.
기존 스크립트를 스푸핑하여 PATH 명령에 대한 래퍼 또는 대체를 실행하려는 경우 실행 .bashrc
세부 정보에 따라 작동합니다. 그렇지 않은 경우 대신 함수를 정의하는 포함 파일 .
또는 source
함수를 정의 하는 래퍼 스크립트를 실행 한 다음 대체 할 명령으로 셸 스크립트에 대해 동일한 작업을 수행 할 수 있습니다.
래퍼 스크립트는 다음과 같습니다.
script=$1
shift
. include.sh
. $script "$@"
첫 번째 매개 변수는 실제 스크립트의 이름이고 나머지 매개 변수는 args이면 위의 스크립트가 대신 실행됩니다.
declare -x -f NAME
더 많은 정보
-f 기능 이름 및 정의에 대한 조치 또는 표시 제한 -x를 사용하여 NAME 내보내기
기능은 본질적으로 내보낼 수 없습니다. 그러나 문자열을 내보낼 수 있으므로 여기에 약간의 트릭이 있습니다.
func="$(typeset -f funcname)"
export func
함수를 가져 오려면 내 보낸 문자열에서 다시 정의하십시오.
# in subshell
eval "$func"
참고 URL : https://stackoverflow.com/questions/1885871/exporting-a-function-in-shell
'IT박스' 카테고리의 다른 글
matplotlib에서 사용중인 백엔드를 어떻게 결정합니까? (0) | 2020.09.17 |
---|---|
Android의 전체 텍스트 검색 예 (0) | 2020.09.17 |
작은 API를 고려할 때 React의 파일 크기가 왜 그렇게 큰가요? (0) | 2020.09.16 |
Entity Framework 새로 고침 컨텍스트? (0) | 2020.09.16 |
양방향 / 역지도 (0) | 2020.09.16 |