Как я могу использовать sed в/etc/apache2/sites-available?

Я пытаюсь записать сценарий, который использует sed для копирования файла по умолчанию для апача и пишет новый файл, заменяя /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” не применяется после “>” в команде, помните мишень и возвратитесь сюда.

4
задан 20.03.2017, 12:17

1 ответ

Ваша проблема -i. Это говорит sed для редактирования файла на месте но Вы обеспечиваете файл на stdin путем перенаправления его. Попытайтесь отбросить -i.

Нет действительно никакой потребности перенаправить входной файл с тех пор sed принимает имя файла как аргумент. Если полномочия чтения на файле ограничиваются затем sudo sed (и не использование перенаправления), будет заботиться об этом. Не используя -i исходный файл оставят неповрежденным.

sudo tee должен заботиться о полномочиях записи для вывода, если это необходимо.

3
ответ дан 07.12.2019, 21:06

Теги

Похожие вопросы