같은 스크립트에서 명령을 실행하기 위해 bash 스크립트를 사용하여 사용자 ID를 전환 / 채우는 방법은 무엇입니까?


14

스크립트 내에서 사용자 ID를 전환하여 설치 프로세스의 일부로 루트로 실행되어 외부 스크립트를 호출하지 않고 일부 명령을 실행 한 다음 root다른 명령을 실행하도록 돌아가는 방법이 있습니까?

일종의:

#!/bin/bash
some commands as root
SWITCH_USER_TO user
some commands as user including environment variables checks, without calling an external script
SWITCH_USER_BACK
some other stuff as root, maybe another user id change...


이 답변을 살펴보십시오. stackoverflow.com/a/17758312/1243547
— Klaus

답변:


28

그러나 sudo쉘을 실행하고 heredoc을 사용하여 명령을 제공 할 수 있습니다.

#!/bin/bash
whoami
sudo -u someuser bash << EOF
echo "In"
whoami
EOF
echo "Out"
whoami

이것은 반드시 동일한 스크립트에서 사물을 함께 유지하는 작업을 수행하며 모든 것이 EOF 다음에 닫는 대괄호로 묶인 경우 명령 대체를 사용할 수도 있습니다
— a1an

이 답변은이 질문에 나오는 질문의 모든 답변보다 낫습니다 .
— Dan Dascalescu

1
나는 이것을하기 위해 EOF를 사용하지 않고 heredoc의 이름을 SUDO로 바꾸는 것이 거의 궁금합니다. 그렇게하면 포함 코드 내에서 슈퍼 사용자로 실행 중임을 기억합니다.
— Joe Heyming

어떤 이유로 heredoc 명령에서 vars를 설정하면 vars가 설정되지 않은 것 같습니다. BLA="something"예를 들어 다음과 같이 시도하면 : echo "In: $BLA"BLA가 비어있는 것 같습니다
— Efren
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.