사용자 변경 후 스크립트 실행 계속

사용자 변경 후 스크립트 실행 계속

사용자를 변경한 후에도 스크립트를 계속 실행하고 싶습니다. 스크립트는 다음과 같습니다.

echo "xauth add" `xauth list | grep ${DISPLAY:10:2}` >> test.sh

수도수

./test.sh

test.sh 스크립트는 사용자를 변경한 후에 실행되어야 하지만 "sudo su" 이후에는 ./test.sh 명령이 실행되지 않습니다. 우리가 이걸 가능하게 할 수 있을까

답변1

스크립트 도중에 사용자 ID를 변경한 다음 새 사용자로 스크립트를 계속 실행할 수는 없습니다.

그러나 다음 명령을 사용하여 다른 사용자로 다른 명령이나 스크립트를 실행할 수 있습니다 sudo.

sudo ./test.sh

다른 사용자로 여러 명령을 실행해야 하는 경우 해당 명령을 스크립트에 추가하거나 test.sh, 하나 또는 두 개 이상의 명령만 실행해야 하는 경우 다음을 사용하세요.

sudo sh -c './test.sh; other_command'

sudo실행 중인 모든 항목이 종료 되면 sudo제어권이 상위 스크립트(호출 스크립트)로 반환됩니다.

답변2

사용자 중간 스크립트를 변경할 수 있지만 이를 위해서는 쉘에 입력을 공급해야 하며 오래되고 끔찍한 스타일로 이식할 수 없을 수 sh있으며 아마도 나쁜 생각일 것입니다.

$ cat changemidscript
who am i
sudo -i
who am i
$ bash < changemidscript
jhqdoe   tty??    Oct  5 14:21 
root     tty??    Oct  5 14:21 
$ 

하지만! bash changemidscript또는 ./changemidscript둘 다 위와 동일하게 작동하지 않을 것입니다. 이는 stdin을 통해 입력만 제공하면 사용자가 변경할 수 있게 되고 후속 명령은 사용자에게 새로운 명령이 되기 때문에 이것이 나쁜 생각임을 다시 한 번 시사합니다. (다른 방식으로 사용하고 싶다고 말씀드렸나요? 그렇게 해야 합니다!)

strace이것이 작동하는 이유를 설명하는 데 도움이 될 수 있습니다. 쉘이 입력을 한 줄씩 읽는 데 어려움을 겪을 수 있으므로 한 문자씩 읽거나( \n찾을 때 읽기를 중지할 수 있도록) 버퍼로 읽습니다. 그런 다음 \n발견된 위치 에 따라 다음 문자의 각 줄 시작 부분으로 반환됩니다 .

답변3

편집: 실제로 다음 중 하나를 수행하고 싶습니다 sudo su -l -c ./test.sh(로그인 쉘이 필요한 경우) sudo ./test.sh.

su및 에 대한 매뉴얼 페이지를 보십시오 sudo.

관련 정보