실행 중인 프로덕션 환경을 새로 고치는 올바른 방법은 무엇입니까?

실행 중인 프로덕션 환경을 새로 고치는 올바른 방법은 무엇입니까?

여기에는 많은 코드가 표시되지 않지만 수정 요청이 있습니다. 우리 파일에는 프로덕션의 다양한 쉘 스크립트에 사용되는 100개 이상의 함수가 포함되어 있습니다. 우리는 그것을 명명했습니다.

functions.sh

지금까지 각 스크립트는 업데이트된 기능에 액세스할 수 있도록 그 안에 있는 "functions.sh" 파일을 호출합니다. 이와 같이

#!/bin/bash
# comment
# comment
# Comment

./path/function.sh

echo "Date" > logging()
..

이제 이 통화를 취소하라는 메시지가 표시됩니다.

./path/function.sh

앞으로 개발될 스크립트에서. (더 많은 파일을 추가할 수 있도록) 새로운 "functions.sh"가 프로덕션 환경에 배포되면 환경에서 최신 기능이 자동으로 새로 고쳐지고 모든 스크립트가 여기에 정의된 기능을 직접 사용할 수 있는지 확인하세요. .bashrc 파일에서 호출할 수 있습니다.

~/.functions.sh 

아니면 우리가 해야 할 다른 일이 있습니까? 스크립트는 crontab을 통해 비대화형 모드로 실행된다는 점을 기억하세요. (모든 스크립트는 bash 스크립트입니다.) 어떤 도움이라도 주시면 감사하겠습니다.

감사해요

답변1

읽다https://www.gnu.org/software/bash/manual/bash.html#Bash-Startup-Files

비대화형 쉘(예: cron을 통한 스크립트 실행)의 경우 bash는 BASH_ENV환경 변수를 소스 파일 이름으로 사용합니다.

따라서 유연성을 극대화하려면 다음을 수행할 수 있습니다.

/some/path
├── functions.d
│   ├── func1.sh
│   ├── func2.sh
│   ├── ...
│   └── funcN.sh
└── functions.sh

그리고 functions.sh아마도

#!/usr/bin/env bash
func_dir="${BASH_SOURCE[0]%/*}/functions.d"
if [[ -d "$func_dir" ]]; then
    for f in "$func_dir"/*.sh; do
        if [[ -r "$f" ]]; then
            . "$f"
        fi
    done
fi

crontab 파일에 다음을 추가하세요.

BASH_ENV=/some/path/functions.sh

따라서 사용자가 해야 할 일은 해당 디렉토리에 .sh 파일을 추가하는 것뿐입니다. 그러면 cron 스크립트가 해당 파일을 선택합니다.

이는 각각 하나의 함수 정의만 포함하는 파일을 생성할 수 있는 유연성을 제공합니다. 더 이상 거대한 라이브러리 파일이 없습니다.

관련 정보