#!/usr/bin/env python3
from subprocess import run
from sys import modules
def main():
doas()
def doas():
ch = input("Ready to proceed with setting up doas?[Y/n]?")
if ch == 'y':
run("sudo passwd", shell=True)#If you would prefer to access the root account with su or by logging in directly, you must set a root password with "sudo passwd".
run("sudo apt install -y doas", shell=True)
run("""echo -e "permit $(whoami) as root
permit root as $(whoami)
permit nopass root as $(whoami)"|sudo tee /etc/doas.conf""", shell=True) and run("doas apt -y purge sudo", shell=True)
print("doas set up.")
else:
print("Run me again when you are ready.")
이 코드의 문제점은 옵션을 다음과 같이 넣는다는 것 -e
입니다 doas.conf
.
-e permit jim as root
permit root as jim
permit nopass root as jim
doas.conf
다음과 같이 보이려면 필요하지만 :
permit jim as root
permit root as jim
permit nopass root as jim
내가 아는 가장 쉬운 빠른 수정은 와 -e
함께 사용하지 않는 것입니다 echo
. 이 문제를 해결할 수 있는 다른 방법이 있나요?
큰따옴표로 묶지 않으면 왜 -e
작성이 끝나나요 ? doas.conf
내가 달릴 때
echo -e "permit $(whoami) as root
permit root as $(whoami)
permit nopass root as $(whoami)"|tee doas.conf
내 쉘(Bash)에서는 모든 것이 잘 작동하고 원하는 결과를 얻습니다. 파이썬과 왜 다른가요? 나는 Ubuntu 22.04 LTS를 사용하고 있는데 내 echo는 -e를 지원하는 것 같습니다. 예를 들어 echo -e "a\nb\nc" 줄 바꿈으로 문자를 인쇄합니다.
답변1
다른 구현에서는 and와 같은 옵션을 echo
지원하거나 지원하지 않거나 and와 같은 C 스타일 백슬래시 이스케이프를 -e
처리하거나 처리하지 않기 때문입니다.-n
\n
\t
이것에코유틸리티는 XBD 유틸리티 구문 가이드 10에 지정된 대로 "--" 매개변수를 인식하지 못합니다. "--"는 문자열 피연산자로 인식됩니다.
구현은 어떤 옵션도 지원해서는 안 됩니다.
대신 사용하십시오 printf
. 바라보다:왜 printf가 echo보다 나은가요?
따옴표(큰 따옴표 또는 작은 따옴표)는 명령이 실행되기 전에 셸에서 처리되고 해당 옵션을 처리할 기회가 있기 때문에 관련이 없습니다. 전체적으로
echo -e foo
echo "-e" foo
echo '-e' foo
이 echo
명령에는 두 개의 매개변수 -e
와 가 표시됩니다 foo
.