bash 스크립트를 배우려고 합니다. 가끔 root
쓰기 권한이 필요한 파일에 줄을 추가 해야 하는 실제 문제를 해결하고 있습니다 .
코드는 다음과 같습니다.
# some code
echo "add this line to the code" >> fileName
# some code
어떻게든 스크립트에서 루트 비밀번호를 요청하고, 비밀번호를 확인하고, 성공적인 확인 후 파일을 수정하도록 할 수 있습니까? 그런 다음 스크립트는 사용자 모드로 돌아가서 명령을 계속 실행해야 합니다.
답변1
sudo
매뉴얼 페이지에는 이와 같은 작업을 수행하는 방법을 설명하는 팁이 있습니다 . 내가 말한 것은 다음과 같습니다.
#!/usr/bin/bash
sudo sh -c "echo \"add this line to the code\" >> fileName"
당연히 권한을 얻으려면 먼저 사용자를 설정해야 합니다 sudo
. sh
루트가 소유한 파일로 리디렉션되기 때문에 쉘이 사용됩니다 . 또한 echo
명령에 사용된 따옴표를 이스케이프 처리해야 했습니다 .
답변2
su
대부분의 UNIX 시스템에서 사용 가능하며 작동합니다.
su root -c 'echo "add this line to the code" >> fileName'
답변3
당신은 tee
그것을 사용할 수 있습니다 sudo
:
echo "add this line to the code" | sudo tee -a filename > /dev/null
echo
의 출력은 |
(관로) 도착하다 sudo tee
.
tee
다음에서 읽기표준 입력그리고 에 편지를 쓰세요표준 출력주어진 파일(이 경우 filename
. -a
(또는 --append
)) tee
이 파일에 추가되며, 이 파일이 없으면 파일을 덮어쓰게 됩니다. tee
실행하면 sudo
루트 권한이 있는 파일이 열립니다. 마지막으로 출력을 > /dev/null
억제합니다 .tee
표준 출력.
tee
su -c
전체 명령(사용 또는 리디렉션 포함)을 시작하는 대신 사용 의 한 가지 장점 sudo sh -c
은 어떤 방식으로든 초기 명령에 대한 참조를 변경할 필요가 없다는 것입니다(이미 따옴표가 포함된 줄을 인용하면 때때로 매우 보기 흉해질 수 있습니다).
답변4
트릭을 수행합니다.
ssh host "sudo su root -c 'echo "add this line to the code" >> /etc/hosts'"