![실행 중인 프로덕션 환경을 새로 고치는 올바른 방법은 무엇입니까?](https://linux55.com/image/171624/%EC%8B%A4%ED%96%89%20%EC%A4%91%EC%9D%B8%20%ED%94%84%EB%A1%9C%EB%8D%95%EC%85%98%20%ED%99%98%EA%B2%BD%EC%9D%84%20%EC%83%88%EB%A1%9C%20%EA%B3%A0%EC%B9%98%EB%8A%94%20%EC%98%AC%EB%B0%94%EB%A5%B8%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
여기에는 많은 코드가 표시되지 않지만 수정 요청이 있습니다. 우리 파일에는 프로덕션의 다양한 쉘 스크립트에 사용되는 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 스크립트가 해당 파일을 선택합니다.
이는 각각 하나의 함수 정의만 포함하는 파일을 생성할 수 있는 유연성을 제공합니다. 더 이상 거대한 라이브러리 파일이 없습니다.