같은 스크립트에서 명령을 실행하기 위해 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.