sudo로 인해 envsubst가 빈 출력을 인쇄합니다.

sudo로 인해 envsubst가 빈 출력을 인쇄합니다.

일부 변수를 내보내고 일부 장소에서 사용하는 스크립트가 있습니다 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을 열고(읽고 전달하고) shTargetFile을 열고 cat여기에 데이터를 쓰는 데 사용됩니다 .

GNU 시스템을 사용한다면 다음과 같이 할 수도 있습니다:

sudo dd bs=64k status=none if=SourceFile |
  envsubst |
  sudo dd bs=64k status=none of=TargetFile

바라보다stdin에서 읽고 파일에 쓰는 Unix 명령이 있습니까(예: 출력을 stdout으로 보내지 않고 tee)?자세한 내용 및 기타 방법을 알아보세요.

관련 정보