![Bash에서 수정 가능한 버퍼를 열고 유지하는 방법](https://linux55.com/image/198301/Bash%EC%97%90%EC%84%9C%20%EC%88%98%EC%A0%95%20%EA%B0%80%EB%8A%A5%ED%95%9C%20%EB%B2%84%ED%8D%BC%EB%A5%BC%20%EC%97%B4%EA%B3%A0%20%EC%9C%A0%EC%A7%80%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
나는 현재 configs 디렉터리에서 다양한 구성을 가져오는 작은 템플릿 시스템을 구현하기 위해 여러 기능을 사용하는 스크립트를 가지고 있습니다. 나는 이것이 bash 스크립팅의 더 광범위한 사용이라는 것을 알고 있으며 대부분의 사람들은 거기에서 Python이나 다른 스크립팅 언어를 사용하도록 강요할 것입니다. 질문에 관하여:
이런 기능이 많네요
a() {}
b() {}
c() {}
...
내가 원하는 것은 오픈 버퍼를 포함하는 전역 상수를 정의하는 것입니다. 이렇게 하면 이러한 함수 중 하나가 읽기 루프를 통해 구성 수정을 시작하면 # % filename.to.use.as.a.template.conf % #
동일한 버퍼를 계속 사용하면서 템플릿 시스템을 담당하는 다른 함수( format 사용)에 일부 로직을 전달할 수 있습니다. 임시 파일을 만들고 거기에 구성을 쓸 수 있다는 것을 알고 있습니다.첫 번째그런 다음 재정의를 사용 mv
하지만 이를 피하려고 합니다.
이상적으로 논리 흐름은 다음과 같습니다.
함수 "A"는 구성에 대해 일부 논리 처리를 수행하다가 "# % example.conf % #" 태그를 발견한 다음 버퍼를 찾는 템플릿 로드를 담당하는 함수 "B"를 호출합니다. 함수 "A"는 템플릿 콘텐츠 "example.conf"를 처리하고 버퍼에 추가한 다음 이를 다시 "A"로 전달합니다. 그런 다음 삽입된 텍스트의 끝으로 이동하여 파일 구문 분석을 계속합니다.
의사 코드 구현 예:
install_template() {
local TEMPLATE_FILE
TEMPLATE_FILE = "${1}"
write_to_buffer "$(cat "${TEMPLATE_FILE}")" # This where I'm hung up at :/
}
while read -r line; do
if [[ line = *#*%*%*#*]]; then
install_template "${line}"
fi
done < "${CONFIGURATION}" > "${SOME_BUFFER}"
위 의사코드의 문제점은 내가할 수 있다echo 함수에서 cat 의 출력이 표시되지만 문제는 내 echo가 읽기 루프에 의해 캡처되어 버퍼로 출력된다는 것입니다. 이상적으로는 그것 없이도 install_template
계속 로그할 수 있습니다.STDOUT
모두읽기 루프에 걸렸습니다.
이를 수행하는 좋은 방법이 있습니까? 아니면 적어도 전역 변수나 캡처하지 않고 버퍼에 쓰는 다른 함수를 통해 작업 중인 버퍼 A를 추적하는 방법이 있습니까 STDOUT
?