이 프로그램을 루트로 실행하고 싶습니다. 가상 환경을 활성화하고 해당 가상 환경에서 Python 프로그램을 실행합니다.
프로그램은 다음과 같습니다
$cat myfile.sh
source /pathto/venv/bin/activate
python /pathto/rsseater.py
그냥 루트로 실행하면
$ sudo ./myfile.sh
./myfile.sh: 2: ./myfile.sh: source: not found
내가 찾은이것sudo -s
하지만 파일 맨 위에 추가하려고 하면 프롬프트가 # -으로 변경되는 것 같지만 Python이 예상대로 실행되지 않습니다. 파일 상단에 sudo -s가 있으면 프로그램이 무엇을 하고 있는지 잘 모르겠습니다.
이 프로그램을 루트로 실행하려면 어떻게 해야 합니까?
답변1
일반적으로 다음과 같이 스크립트 상단에 인터프리터에 대한 호출을 추가하려고 합니다.
$cat myfile.sh
#!/bin/bash
source /pathto/venv/bin/activate
python /pathto/rsseater.py
이것은 당신이 가지고 있는 것과 매우 비슷해 보일 수도 있지만 실제로는 매우 다릅니다. 귀하의 시나리오에서는 런타임에 호출되는 셸에서 명령을 실행하려고 합니다 sudo
. 위의 예를 사용하면 #!/bin/bash
호출 라인 뒤에 다양한 명령이 오는 별도의 Bash 쉘이 생성됩니다 . #!/bin/bash
새로운 Bash 셸이 분기되도록 합니다.
통역사와 Shebang
명명법을 #!
shebang이라고합니다. 당신은 할 수이 사이트의 다양한 Q&A를 통해 자세한 내용을 알아보세요.또한 약위키피디아. 그러나 이는 말하자면 주어진 파일이 "실행"(일명 실행)될 때 먼저 프로그램(인터프리터)이 디스크에서 로드된 다음 프로그램의 작업이 파일의 내용을 구문 분석하는 것이라고 시스템에 알려줍니다. 방금 처형되었습니다.
노트:기본적으로 shebang 라인 이후의 모든 것.
통역사
인터프리터는 한 번에 하나의 명령씩 파일을 처리할 수 있는 프로그램입니다. 이 예에서는 Bash 쉘을 인터프리터로 사용합니다. 그러나 여기서는 C 쉘이나 Korne 쉘 등과 같은 다른 쉘을 사용할 수도 있습니다.
Perl, Ruby 또는 Python과 같은 상위 수준 인터프리터를 동일한 방식으로 사용할 수도 있습니다.
"sudo -s"를 사용할 때 오류가 발생하는 이유는 무엇입니까?
매뉴얼 페이지를 보면 sudo
다음과 같이 나와 있습니다 -s
.
-s [command]
The -s (shell) option runs the shell specified by the SHELL
environment variable if it is set or the shell as specified in
the password database. If a command is specified, it is passed
to the shell for execution via the shell's -c option. If no
command is specified, an interactive shell is executed.
따라서 이 명령을 실행하면 다음과 같습니다.
$ sudo -s ./myfile.sh
다음과 같은 일이 발생합니다.
$ /bin/sh
sh-4.2$ source somesource.bash
sh: source: somesource.bash: file not found
쉘은 /bin/sh
이 명령을 지원하지 않습니다 source
.