Ubuntu 16.04에는 시스템의 다양한 일반 작업을 자동화하기 위한 몇 가지 기능이 포함된 Bash 파일이 있습니다.
bashrc
필요할 때 터미널 어디에서나 각 함수를 쉽게 호출할 수 있도록 파일을 가져와서 "함수 자체를 가져왔다"고 할 수 있도록 했습니다.
때로는 이러한 소스 기능 중 하나를 사용해야 할 때가 있습니다.스크립트 내에서,해야 해뻣뻣한이 작업은 다음과 동일합니다.
export -f myFunc_0 myFunc_1 myFunc_2 ...
그렇지 않으면 이 기능을 사용할 수 없습니다.
내가 이걸 어떻게 할 수 있지?모두특정 기능을 지정하지 않고 파일에 기능을 추가합니까?
답변1
함수 파일 자체 내 set -a
에서 사용 하는 경우 내보낼 모든 함수를 표시합니다..bashrc
-ㅏ
생성되거나 수정된 모든 변수나 함수에는 내보내기 속성이 부여되고 후속 명령 환경으로 내보내기 위해 표시됩니다.
내보내지 않으려는 변수를 설정하면 원하지 않는 결과가 발생할 수 있지만 다음과 같은 내용을 다음과 같이 추가할 수 있습니다 .bashrc
.
set -a
source ~/my_funcs
set +a
답변2
실제로 해야 할 일은 스크립트 자체 내부에 함수가 포함된 파일을 가져와서 컨텍스트에 종속되지 않도록 하는 것입니다(또는 컨텍스트에 덜 의존하게 됩니다).
답변3
다음과 같이 시도해 볼 수 있습니다.
declare -fx $(bash -c 'source /path/to/my-file &> /dev/null; compgen -A function')
파일에서 함수만 내보내고 싶기 때문에 bash의 새 인스턴스에서 가져오고 사용하면 compgen -A function
파일에 정의된 모든 함수가 이름별로 나열됩니다(이전에 내보낸 함수도 포함되지만 여기서는 문제가 되지 않습니다). . 그런 다음 출력을 사용하여 export -f
또는 declare -fx
이러한 기능을 내보낼 수 있습니다.
bashrc에서 파일을 가져온 후 다시 가져오는 것은 문제가 되지 않을 것입니다.
답변4
set
정의된 모든 함수를 추출하는 방향으로 출력이 정렬된 것 같습니다. 변수로 시작한 다음 함수를 표시합니다.
set |awk '/^[^=()]*\(\)/ {functions=1} functions' > functions.sh
이것은 첫 번째 비할당( ()
첫 번째 비할당 이전에 발생 =
)을 찾은 다음 인쇄해도 괜찮다고 말합니다. 변수 functions
가 true이면 두 번째 awk 섹션은 기본 인쇄 작업을 사용합니다. 출력은 다음에 저장 functions.sh
되며 다른 곳에서 검색할 수 있습니다.