내 파일에 새로운 USE 플래그를 더 쉽게 추가할 수 .zshrc
있도록 파일에 함수를 추가하려고 합니다 . /etc/portage/package.use
보통은 내가 해야 할 일
su -c 'echo "net-misc/aria2 bash-completion bittorrent" >> /etc/portage/package.use'
그래서 다음과 같은 기능을 만들어 보았습니다.
new_use() {
su -c 'echo "$1" >> /etc/portage/package.use'
}
그러나 나는 이것이 효과가 없을 것이라는 것을 깨달았습니다. 이 기능을 작동시킬 수 있는 방법이 있는지, 아니면 적어도 이 기능이 이에 적합한지 궁금합니다. 그런데 이 함수를 호출할 때마다 루트 비밀번호를 입력해야 하는 것은 괜찮습니다.
답변1
다음과 같이 루트 권한으로 프로그램에 stdin을 제공할 수 있습니다.
new_use() {
sudo tee -a /etc/portage/package.use <<< "$1" > /dev/null
}
답변2
따옴표를 반대로 바꾸십시오.
new_use() {
su -c "echo '$1' >> /etc/portage/package.use"
}
이렇게 하면 $1
실행 전에 확장 됩니다 su
.
답변3
함수의 매개변수는 기본 쉘로 전달되지 않습니다. 루트 쉘에 전달될 문자열의 매개변수를 바꿀 수 있지만 su
문자열은 루트 쉘에 의해 구문 분석되므로 문자열의 특수 문자가 확장됩니다. 이러한 추가 확장(임의의 코드가 루트로 실행될 수 있음)을 방지하려면 작은따옴표 사이에 문자열을 삽입하고( '
문자 그대로 제외한 모든 문자가 해석되도록 함) 문자열에서 작은따옴표 문자를 보호하십시오( '\''
문자열 리터럴 종료). , 작은따옴표를 추가하고 새 리터럴을 시작합니다. 이는 '\''
실제로 작은따옴표로 구분된 리터럴 안에 작은따옴표를 넣는 방법임을 의미합니다.
new_use() {
su -c "echo '${1//\'/\'\\\'\'}' >> /etc/portage/package.use"
}
또 다른 가능한 접근법은사용tee
.