/ etc / apache2 / sites-available에서 sed를 어떻게 사용합니까?


4

sed 를 사용 하여 아파치 의 기본 파일 을 복사하고 새 파일을 작성하여 /var/www( $DOC_ROOT아래) 내 디렉토리로 바꾸는 스크립트를 작성하려고합니다 $NEW_SITES_DIR. 그러나 sed가 sudo에서 올바르게 실행되지 않습니다 . 다음에 대해 "permission denied" 오류가 발생합니다.

sudo sed -ie 's:$DOC_ROOT:$NEW_SITES_DIR:g' < default > $NEW_SITE

서브 쉘생성 하려고했습니다

sudo sh -c "sed -ie 's:$DOC_ROOT:$NEW_SITES_DIR:g' < default > $NEW_SITE"

티를 사용

sudo sed -ie 's:$DOC_ROOT:$NEW_SITES_DIR:g' < default | sudo tee $NEW_SITE

그러나 대신 "입력 파일 없음" 오류가 발생합니다.

내가 쓴 마지막 두 번의 시도는 약간 벗어났다고 확신합니다. 어떤 제안이라도 대단히 감사하겠습니다.


대답

도와 주셔서 감사합니다. 정확한 명령은 다음과 같습니다.

sudo sed -e "s:$DEF_SITES_DIR:$NEW_SITES_DIR:g" < $DEF_SITE | sudo tee $NEW_SITE

그리고이 참조 의 핵심 문구는 다음과 같습니다.

이것을 잠들지 말고 언젠가는 편리 할 것이며, 명령에서 ">"다음에 "스도"가 적용되지 않는 이유를 알아낼 수있을 때 티를 ​​기억하고 여기로 돌아 오십시오.

답변:


3

당신의 문제는 -i입니다. sed파일을 제자리에 편집 하라는 메시지가 표시되지만 파일을 리디렉션하여 stdin에 제공하고 있습니다. 를 삭제 해보십시오 -i.

파일 sed이름을 인수로 받아들이 므로 입력 파일을 리디렉션 할 필요가 없습니다 . 파일에 대한 읽기 권한이 제한되어 있으면 sudo sed(및 리디렉션을 사용하지 않음)이를 처리합니다. -i원본 파일을 사용하지 않으면 그대로 남아 있습니다.

sudo tee그 필요의 경우 출력에 쓰기 권한의주의를 기울여야한다.


sudo 티는 확실히가는 길이었다. 정확한 해결책으로 내 질문을 업데이트했습니다.
매트 노리스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.