일부 변수를 내보내고 일부 장소에서 사용하는 스크립트가 있습니다 sudo
.
간단한 예는 다음과 같습니다.
export Name=John
sudo envsubst < SourceFile > TargetFile
SourceFile
변수 가 있으면 비어 $Name
있는 것으로 인쇄됩니다.
삭제하면 sudo
작동됩니다 .
export
모든 사용자에게 공통 인가요 ? 전체 기계에 대한 변수를 내보내는 방법은 무엇입니까?
답변1
기본적으로 sudo
해당 환경은 안전 조치로 전달된 일부 정리된 변수(및 명시적으로 일반 값으로 설정된 일부 변수)를 제외하고 지워집니다.
sudo 구성에서 허용하는 경우 -E
/ --preserve-env
변수를 사용하여 이 문제를 해결할 수 있습니다.
어쨌든 명령 인수와 같은 환경 변수는 실행 시 한 명령에서 다른 명령으로 전달되는 것이며 모든 프로세스가 액세스할 수 있는 비현실적인 공간에 존재하는 것이 아닙니다(이를 위한 파일 시스템이 있습니다).출구영국전체 기계에 대한 변수무의미한.
또한 이 envsubst
명령에는 특별한 권한이 필요하지 않으므로 로 처리합니다 root
. 소스 파일을 열거나 대상 파일을 으로 생성하려고 하면 root
다음과 같은 이유로 잘못된 것입니다.
sudo envsubst < SourceFile > TargetFile
리디렉션은 sudo
원래 사용자로 호출되는 쉘에 의해 수행됩니다.
실행해야 하는 파일을 여는 명령은 다음과 같습니다 root
.
sudo cat SourceFile | envsubst | sudo sh -c 'exec cat > TargetFile'
cat
이는 SourceFile을 열고(읽고 전달하고) sh
TargetFile을 열고 cat
여기에 데이터를 쓰는 데 사용됩니다 .
GNU 시스템을 사용한다면 다음과 같이 할 수도 있습니다:
sudo dd bs=64k status=none if=SourceFile |
envsubst |
sudo dd bs=64k status=none of=TargetFile
바라보다stdin에서 읽고 파일에 쓰는 Unix 명령이 있습니까(예: 출력을 stdout으로 보내지 않고 tee)?자세한 내용 및 기타 방법을 알아보세요.