사용자를 변경한 후에도 스크립트를 계속 실행하고 싶습니다. 스크립트는 다음과 같습니다.
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
.