파일의 모든 Bash 기능을 한 줄로 내보내는 방법은 무엇입니까?

파일의 모든 Bash 기능을 한 줄로 내보내는 방법은 무엇입니까?

Ubuntu 16.04에는 시스템의 다양한 일반 작업을 자동화하기 위한 몇 가지 기능이 포함된 Bash 파일이 있습니다.

bashrc필요할 때 터미널 어디에서나 각 함수를 쉽게 호출할 수 있도록 파일을 가져와서 "함수 자체를 가져왔다"고 할 수 있도록 했습니다.

때로는 이러한 소스 기능 중 하나를 사용해야 할 때가 있습니다.스크립트 내에서,해야 해뻣뻣한이 작업은 다음과 동일합니다.

export -f myFunc_0 myFunc_1 myFunc_2 ...

그렇지 않으면 이 기능을 사용할 수 없습니다.


내가 이걸 어떻게 할 수 있지?모두특정 기능을 지정하지 않고 파일에 기능을 추가합니까?

답변1

함수 파일 자체 내 set -a에서 사용 하는 경우 내보낼 모든 함수를 표시합니다..bashrc

4.3.1 내장 컬렉션

-ㅏ

생성되거나 수정된 ​​모든 변수나 함수에는 내보내기 속성이 부여되고 후속 명령 환경으로 내보내기 위해 표시됩니다.

내보내지 않으려는 변수를 설정하면 원하지 않는 결과가 발생할 수 있지만 다음과 같은 내용을 다음과 같이 추가할 수 있습니다 .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되며 다른 곳에서 검색할 수 있습니다.

관련 정보