나는 이것을 가지고있다:
foo(){
install_ores_gitflow;
command foo "$@"
}
export -f foo;
나는 다음과 같은 것을 찾고 있습니다 :
export foo(){
install_ores_gitflow;
command foo "$@"
}
그러나 구문이 올바르지 않습니다.
제가 발견한 한 가지 기술은 다음과 같습니다. 파일의 모든 Bash 기능을 한 줄로 내보내는 방법은 무엇입니까?
이것은 내가 이것을 할 수 있다는 것을 의미합니다:
set -a;
foo(){
install_ores_gitflow;
command foo "$@"
}
set +a;
하지만 소싱 스크립트에 set -a
매우 잘못된 스크립트가 있을 수 있으므로 이 솔루션이 마음에 들지 않습니다. 이는 내 스크립트가 이를 덮어쓰게 된다는 것을 의미합니다.
답변1
불쾌한 해킹이지만 적어도 export
명령을 내릴 수는 있습니다.이상함수 정의를 더 쉽게 볼 수 있습니다.
# a function to create a dummy function and export it
export_function() { eval "function $1 { :; }; export -f $1"; }
# then
export_function foo
foo() { echo "here is the *real* function"; }
답변2
-a
예를 들어 옵션의 상태를 확인하여 옵션 echo $-
이 설정되어 있으면 아무 것도 할 필요가 없도록 사용하는 것은 어떨까요 ?
답변3
글쎄요, 저는 이것이 합리적이고 신뢰할 수 있는 접근 방식이라고 생각합니다.
#!/usr/bin/env bash
if [[ ! "$SHELLOPTS" =~ "allexport" ]]; then
set -a;
all_export=nope;
fi
ores_git_merge_with_integration(){
install_ores_gitflow;
command "$FUNCNAME" "$@"
}
ores_git_tools(){
install_ores_gitflow;
command "$FUNCNAME" "$@"
}
if [ "$all_export" == "nope" ]; then
set +a;
fi
Bash 스크립트에서는 내보내려는 모든 함수를 그룹화하고 set -a / set + 명령으로 묶을 수 있습니다.
환경 변수를 확인하는 목적 $SHELLOPTS
은 set -a가 켜져 있지 않은지 확인하는 것입니다. 그렇지 않은 경우 완료되면 꺼야 합니다.