Я пытаюсь написать скрипт, который использует sed, чтобы скопировать файл по умолчанию для apache и пишет новый файл, заменив /var/www
($DOC_ROOT
ниже) моим собственным каталогом, $NEW_SITES_DIR
. Тем не менее, sed работает неправильно под sudo: я получаю сообщение об ошибке "Отказано в доступе" :
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
И вот ключевая фраза из этой ссылки:
Не теряйте сон из-за этого, но когда-нибудь это пригодится, и когда вы сможете выяснить, почему «sudo» не применяется после «>» в вашей команде, запомните «ти» и возвращайтесь сюда.