Форум русскоязычного сообщества Ubuntu


За новостями русскоязычного сообщества и Ubuntu в целом можно следить на нашей страничке в Google+

Автор Тема: Вставить текст в определённую строку из терминала  (Прочитано 561 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн makla4nik

  • Автор темы
  • Любитель
  • *
  • Сообщений: 67
  • Linux Mint 18 KDE
    • Просмотр профиля
Всем добра! Начал я писать простенький скрипт, который из "голой" системы делает заточенную под производственные нужды машину. Суть вопроса в том, что нужно добиться того, чтобы в уже существующий системный скрипт по адресу "/etc/mdm/Init/Default" можно было вставить строку с командой. Команда эта должна выполняться до команды "exit 0" в уже существующем системном скрипте. Другими словами, мне нужно вставить строку /usr/bin/x11vnc -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -o /var/log/x11vnc.log -auth guess в файл /etc/mdm/Init/Default перед последней строкой. Курил man по sed, который все яростно советуют в интернетах, но поскольку регулярки не знаю, к своему случаю применить не смог. Поиск по форуму тоже не дал результата. На крайний случай можно и заменить предпоследнюю строку (всё равно пустая), но как это сделать, не уяснил. Известно, что строк всего 46 в системном скрипте. Сначала хотел сделать это силами bash`a, но теперь уже плевать, честно говоря, лишь работало, главное, чтобы не нужно было дополнительно что-либо устанавливать в системе для этого.

Нашёл половину решения данного вопроса, вот код:
sed '44 a\ \//usr/bin/x11vnc -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -o /var/log/x11vnc.log -auth guess' /etc/mdm/Init/DefaultПроисходит следующее - действительно вставляется строка сразу после 44-ой и видно это, поскольку результат команды выводится на экран. Но проблема в том, что при попытке записать вывод в текущий файл либо удаляют его содержимое (>), либо добавляют к существующему в файле вывод с экрана (>>). Как с этим бороться?
« Последнее редактирование: 13 Октябрь 2016, 19:03:58 от makla4nik »
прорвёмся!

Онлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5662
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Ecли уверены что exit 0 на последней строке
Код: Bash
  1. sed -i '
  2. $i\
  3. /usr/bin/x11vnc -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -o /var/log/x11vnc.log -auth guess
  4. ' /etc/mdm/Init/Default
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн makla4nik

  • Автор темы
  • Любитель
  • *
  • Сообщений: 67
  • Linux Mint 18 KDE
    • Просмотр профиля
спасибо, всё получилось! правда, немного изменил расстановку символов, для эстетичности и конечный результат выглядит так:
sed -i '$i\/usr/bin/x11vnc -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -o /var/log/x11vnc.log -auth guess' /etc/mdm/Init/Default
« Последнее редактирование: 13 Октябрь 2016, 19:19:58 от makla4nik »
прорвёмся!

Онлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5662
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Более корректно
Код: Bash
  1. sed -i "
  2. $(sed -n '/exit 0/=' flist | tail -1)i\
  3. /usr/bin/x11vnc -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -o /var/log/x11vnc.log -auth guess
  4. ' /etc/mdm/Init/Default

Пользователь добавил сообщение 13 Октябрь 2016, 19:58:26:
Ну или
Код: Bash
  1. tac /etc/mdm/Init/Default |
  2. sed '
  3.    1,/exit 0/{
  4.        /exit 0/i\/usr/bin/x11vnc -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -o /var/log/x11vnc.log -auth guess
  5.    }' |
  6. tac >tmp
  7. mv -f tmp /etc/mdm/Init/Default

Пользователь добавил сообщение 13 Октябрь 2016, 20:09:21:
Для новых версий sed можно и так
Код: Bash
  1. sed -zi '
  2. s|\(.*\)\(exit 0\)|\1/usr/bin/x11vnc -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -o /var/log/x11vnc.log -auth guess\n\2|
  3. ' /etc/mdm/Init/Default
« Последнее редактирование: 13 Октябрь 2016, 20:09:22 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

Страница сгенерирована за 0.075 секунд. Запросов: 24.