Я пытаюсь записать сценарий, который использует 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” не применяется после “>” в команде, помните мишень и возвратитесь сюда.
Ваша проблема -i
. Это говорит sed
для редактирования файла на месте но Вы обеспечиваете файл на stdin путем перенаправления его. Попытайтесь отбросить -i
.
Нет действительно никакой потребности перенаправить входной файл с тех пор sed
принимает имя файла как аргумент. Если полномочия чтения на файле ограничиваются затем sudo sed
(и не использование перенаправления), будет заботиться об этом. Не используя -i
исходный файл оставят неповрежденным.
sudo tee
должен заботиться о полномочиях записи для вывода, если это необходимо.