나는 껍질을 처음 접했습니다.
저는 매우 기본적인 스크립트를 작성하고 있습니다.
#!/bin/bash
example()
{
echo "Code that don't need sudo."
sudo -s
echo "Code that need sudo"
}
example
이 스크립트를 실행한 후 다음을 기대합니다.
빠르게
Code that don't need sudo.
쉘이 나에게 비밀번호를 묻는다
비밀번호가 맞다면 프롬프트
Code that need sudo.
그런데 올바른 비밀번호를 입력해도 프롬프트가 나타나지 않습니다. Code that need sudo.
이유와 해결 방법은 무엇입니까?
답변1
sudo -s
이는 루트 쉘이 시작되고 비밀번호를 입력하면 이 쉘에서 자신을 찾을 수 있기 때문입니다 . 그런 다음 쉘을 종료하면 다음이 표시됩니다 Code that need sudo
.
$ foo.sh
Code that don't need sudo.
[sudo] password for terdon:
[root@tpad terdon]# exit
Code that need sudo
일반적으로 모든 스크립트에서 명령을 실행하라고 지시하면 명령이 완료된 후에만 스크립트가 계속 실행됩니다. 따라서 스크립트가 시작되면 sudo -s
계속하기 전에 스크립트가 완료될 때까지 기다립니다. 이것이 바로 실행 exit
(또는 + 누르기 ) ctrl후에 텍스트가 인쇄되는 이유입니다 D.
답변2
-s
명령이 없으면 대화형 쉘이 실행되므로 더 이상 스크립트와 동일한 쉘에 있지 않습니다.
man sudo
자세히보다.
하지만 이렇게 하면 작동합니다.
#!/bin/bash
example()
{
echo "Code that don't need sudo."
sudo -s echo "Code that need sudo"
}
example