#linux #shell #ubuntu #ssh
#linux #оболочка #ubuntu #ssh
Вопрос:
В настоящее время я пытаюсь написать сценарий оболочки, который будет принимать две пользовательские переменные ($uname и $dname) и добавлять в виде строки в /etc/rc.local .
Он должен создавать новую строку после строки начала при каждом запуске.
Я использую sed для этого, но, похоже, не могу найти наилучший способ вставить эти переменные в скрипт, в настоящее время у меня есть это, но он выдает «Синтаксическая ошибка: строка без кавычек»:
sed '/begin/ mount --bind /var/www/'"$dname"'/htdocs /home/'"$uname"'/'"$dname"'/htdocs' /etc/rc.local
Я также хотел бы иметь скрипт, который находит и удаляет эту строку из этого файла на основе $dname.
Любая помощь будет высоко оценена!
Комментарии:
1. Предупреждение: если два пользователя (
$uname
) имеют равные$dname
значения, вы можете получить неожиданное поведение.2.Совет:
sed
позволяет использовать другой символ, чем/
для разделения регулярного выражения. При использовании путей я бы рекомендовал использовать#
вместо этого, поэтому вам не нужно использовать разделяющий путь символ с/
:sed 's#...#...#'
3. Ошибка: вам нужно указать
sed
действие для выполнения. Поскольку вы хотите заменить строки, вам нужно добавить ans
в начале вашего регулярного выражения (непосредственно перед разделением символа).:sed 's...'
4. Совет: Чтобы заменить строки в файле и сохранить результаты в том же файле, необходимо добавить
sed
опцию-i
или--in-place
:sed 's#...#...#' -i /etc/rc.local
5. Совет: Вместо использования одного изменяемого скрипта для всех подключений я бы рекомендовал использовать один неизменяемый скрипт, вызывающий все неизменяемые скрипты, присутствующие в папке. Затем вы создаете (возможно, используя шаблон и / или
sed
команду) или удаляете файлы вместо того, чтобы изменять их. Это будет намного проще в обслуживании. Вы можете использоватьrun-parts
для запуска всех скриптов в папке.