루트 사용자로 파일 끝에 텍스트를 추가하는 방법은 무엇입니까?


1

그래서 나는 라스베리에 대한 설치 스크립트를 만들려고 노력하고 있습니다. 먼저 정적 IP를 제공하는 것입니다.

echo -e "Enter static IP"
read static_ip

echo -e "Enter DNS IP"
read dns_ip

echo -e ""
echo -e "The following settings will be set"

echo -e "\e[32mStatic IP:\e[0m\t${static_ip}"
echo -e "\e[32mDNS IP:\e[0m\t${dns_ip}"

sudo echo "interface wlan0" >> /etc/dhcpcd.conf
sudo echo "static ip_address=${static_ip}/24" >> /etc/dhcpcd.conf
sudo echo "static routers=${dns_ip}" >> /etc/dhcpcd.conf
sudo echo "static domain_name_servers=${dns_ip}" >> /etc/dhcpcd.conf

그러나 그것은 "권한이 거부되었습니다"라고 계속 말하는데, 내가 여기서 뭘 잘못하고 있는지 궁금해하고 있었습니까?

답변:


4

리디렉션 ( >>)은 셸에서 수행됩니다. 당신의 sudo영향 echo만.

이 트릭을 사용할 수 있습니다 :

echo "something" | sudo tee -a /output/file > /dev/null

이 방법으로 tee텍스트를 /output/file적절한 권한으로 추가합니다 .

편집 (응답 코멘트) : tee입력을 전달하고 복제합니다 (일반적으로 곱하기). 이 경우 하나의 사본이 파일로 이동하고 다른 사본이 파이프를 따라 이동합니다. 첫 번째 사본 만 필요하기 /dev/null때문에 두 번째 사본을 콘솔로 표시하지 않도록 리디렉션합니다 . /dev/null사라지는 모든 것 .


하나의 질문으로 매력처럼 작동했습니다. 여기서 / dev / null은 무엇을합니까?
killstreet

@killstreet 나는 대답을 확장했다.
Kamil Maciorowski 2016 년

0

리디렉션이 작동하도록 서브 쉘에서 실행해야합니다.

sudo sh -c echo "문자열">> 파일

[sudo 매뉴얼 페이지에서 : 예제]


이것은 작동하지 않습니다. 리디렉션은 여전히 ​​외부 쉘에 의해 구문 분석됩니다. 와 같이 올바르게 인용해야합니다 sudo sh -c 'echo "string" >> file'.
Kamil Maciorowski
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.