2017-11-02 14 views
0

일부 환경 변수 값을 파일에 넣어야합니다."envsubst <file > 파일"로 파일을 다시 쓰는 것이 왜 비워 둡니까?

cat file 
# $VAR 

echo $VAR 
# text 

envsubst '$VAR $VAR' <file> file 파일이 비게됩니다. 이 문제를 해결하려면 envsubst '$VAR $VAR' < file | tee file 2>&1 >/dev/null을 사용하십시오. 하지만 때때로 작동하지 않는데, 파일이 비어 있음을 의미합니다. 첫 번째 질문은 때때로 파일이 비어있는 이유이고 두 번째는 Linux와 * BSD 및 MacOS에서 env vars를 파일로 저장하는 진정한 유닉스 방법이 무엇인가하는 것입니다.

+4

사용 :'envsubst < file > file.tmp && mv file.tmp file' – anubhava

+3

'cmd file> file'은'* nix' (UNIX와 Linux)에서 항상 99.9999 %의 잘못된 접근법입니다. ''* nix'에서해야 할 간단한 파일 변경에 대해 @anubhava의 패턴을 익히십시오. 행운을 빕니다. – shellter

+1

다른 메모 :'bash'는 작은 따옴표로 보지 않습니다. – karakfa

답변

1

항상은 명령을 시작하기 전에 파일을 자르는 출력 리디렉션을 처리합니다. OS를 의미하는 파이프 라인 envsubst ... < file | tee file

, 두 개의 명령 envsubsttee 실행 비동기은 하나 또는 다른 명령을 처음 시작하는 무료입니다. 기본적으로 envsubst이 실행되고 tee이 실행되기 전에 file을 읽는 다이스를 던져 파일을 자릅니다.

올바른 해결책은 임시 파일에 쓰고 그 다음에 원래의 파일을 임시 파일로 바꾸는 것입니다. 후에 명령이 성공했다는 것을 확인했습니다.