Сайт | Скачать | Видео | Wiki

Автор Тема: NumlockSwitcher или Как скриптом заменить строку в файле?  (Прочитано 9948 раз)

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

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
топик http://forum.puppyrus.org/index.php/topic,1821.new.html#new навел на мысль.
Цитата
сделать в меню изменялку для настроек

Думаю, как это реализовать. Например, для вкл\выкл numlock

Цитата
чтобы NumLock включилась, нужно отредактировать файл /root/.xinitrc. Прокручиваем до упора вниз, находим строчку
/usr/X11R6/bin/numlock off   и заменяем off на on.

итак, как скриптом заменить строку? самый простой метод, конечно, переписывать целиком сам xinitrc (если он изменен, тогда все изменения теряются, так что это не подходит)

вот тут нашел инфу кой-какую но не совсем понимаю как применить http://www.instanceof.ru/linux/bash-scripts

« Последнее редактирование: 22 Май 2009, 15:29:54 от Zloy_T »

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
Как скриптом заменить строку в файле?
« Ответ #1 : 21 Май 2009, 11:37:00 »
пробовал так
Код
#!/bin/sh
find -name ‘*.xinitrc’ -exec sed -i -e s//usr/X11R6/bin/numlockx off//usr/X11R6/bin/numlockx on/g {} \;
и так
Код
#!/bin/sh
FROM=”/usr/X11R6/bin/numlockx off”
TO=”/usr/X11R6/bin/numlockx on”
find -name ‘*.xinitrc’ -exec sed -i -e “s/$FROM/$TO/g” {} \;
# NUMLOCK ON
#find -name ‘*.xinitrc’ -exec sed -i -e “s/$TO/$FROM/g” {} \;
# NUMLOCK OFF

не получается

DdShurick

  • Гость
Как скриптом заменить строку в файле?
« Ответ #2 : 21 Май 2009, 14:41:10 »
Код
#!/bin/sh
cat /root/.xinitrc | sed -e 's/\/usr\/X11R6\/bin\/numlockx off/\/usr\/X11R6\/bin\/numlockx on/' > /tmp/xinitrc
mv /tmp/xinitrc /root/.xinitrc

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
Как скриптом заменить строку в файле?
« Ответ #3 : 21 Май 2009, 17:38:32 »
Спасибо. Поковырялся и написал такую фичу:

Код
#! /bin/sh
# копируем файл на всякий случай
cp .xinitrc xinitrc.bak
#Выбор Yes или No (результат в $?, 0 - yes, 1 - no, 255 - закрыто окно), "0 0" - размер окна по умолчанию:
    Xdialog --title "Включить NumLock при загрузке?" --yesno "Включить?" 10 60
# Эта переменная, значение возвращено диалогом
retval=$?

if [ "$retval" = "0" ]; then
# Если условие верно, то выполняем
# Если нет, то ничего не делаем, типа нам пофигу
cat /root/.xinitrc | sed -e 's/\/usr\/X11R6\/bin\/numlockx off/\/usr\/X11R6\/bin\/numlockx on/' > /tmp/xinitrc&&
mv /tmp/xinitrc /root/.xinitrc&&
# Информационный диалог, если не нужен, то можно закомментировать
Xdialog --title "Успешно!" --no-buttons --infobox \
" Numlock включен " 10 40 2000
#время показа окна в ms
fi

if [ "$retval" = "1" ]; then
   cat /root/.xinitrc | sed -e 's/\/usr\/X11R6\/bin\/numlockx on/\/usr\/X11R6\/bin\/numlockx off/' > /tmp/xinitrc&&
mv /tmp/xinitrc /root/.xinitrc&&
Xdialog --title "Успешно!" --no-buttons --infobox \
" Numlock выключен " 10 40 2000
fi

if [ "$retval" = "255" ]; then
# при нажатии ESC выйти
exit 255
fi

Можно засунуть в пет-пакет и юзать. Пакет прилагаеца, ярлык создается в категории "Утилиты"
« Последнее редактирование: 22 Май 2009, 15:31:16 от Zloy_T »

Оффлайн rogiram

  • Пользователь
  • **
  • Сообщений: 92
  • Репутация: +14/-0
Как скриптом заменить строку в файле?
« Ответ #4 : 21 Май 2009, 21:00:27 »
А можно и так:
В файле /root/xinitrc строчку
/usr/X11R6/bin/numlockx off
заменить на
/usr/X11R6/bin/numlockx 'cat /root/.numlock'
Разумеется этот файл надо туда положить и записать в него "off".
А менять это дело соответственно так:
Код
#! /bin/sh
echo off > /root/.numlock
и
Код
#! /bin/sh
echo on > /root/.numlock

Оффлайн rogiram

  • Пользователь
  • **
  • Сообщений: 92
  • Репутация: +14/-0
Как скриптом заменить строку в файле?
« Ответ #5 : 21 Май 2009, 21:32:16 »
Готово.
Код
#! /bin/sh
nl=`cat /root/.numlock`
if [ "$nl" == "off" ]; then
  echo on > /root/.numlock
else
  echo off > /root/.numlock
fi

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
Как скриптом заменить строку в файле?
« Ответ #6 : 21 Май 2009, 21:36:38 »
Код
#! /bin/sh
# копируем файл на всякий случай
cp .xinitrc xinitrc.bak

echo off > /root/.numlock
#  создаем файл с дефолтным значением off

#Выбор Yes или No (результат в $?, 0 - yes, 1 - no, 255 - закрыто окно), "0 0" - размер окна по умолчанию:
    Xdialog --title "Включить NumLock при загрузке?" --yesno "Включить?" 10 60

# Эта переменная, значение возвращено диалогом
retval=$?

if [ "$retval" = "0" ]; then
# Если условие верно, то выполняем
# Если нет, то ничего не делаем, типа нам пофигу
echo on > /root/.numlock&&

# Информационный диалог, если не нужен, то можно закомментировать
Xdialog --title "Успешно!" --no-buttons --infobox \
" Numlock включен " 10 40 2000
#время показа окна в ms
fi

if [ "$retval" = "1" ]; then
echo off > /root/.numlock&&
Xdialog --title "Успешно!" --no-buttons --infobox \
" Numlock выключен " 10 40 2000
fi

if [ "$retval" = "255" ]; then
# при нажатии ESC выйти
exit 255
fi

все равно неудобно, ибо приходится в любом случае редактировать xinitrc


Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
Долго бился и сделал скрипт, который меняет
/usr/X11R6/bin/numlockx off
на
/usr/X11R6/bin/numlockx 'cat /root/.numlock'
Код
#!/bin/sh
#cat /root/xin | sed -e 's/\/usr\/X11R6\/bin\/numlockx off/\/usr\/X11R6\/bin\/numlockx on/' > /tmp/xin
sed -e "s/\/usr\/X11R6\/bin\/numlockx off/\/usr\/X11R6\/bin\/numlockx 'cat \/root\/.numlock'/" /root/xin> /tmp/xin
cp /tmp/xin /root/xin
то есть это дополнение к предыдущему скрипту.

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
Код
#!/bin/sh

if [ -f ~/.xinitrc.bak ]  # проверяем, есть ли бекап;
then
  # если есть, выполняем
  echo on > /dev/null
 #  бросаем файл в /dev/null
else
  # Если нет, бекапим
  # копируем файл на всякий случай
  cp ~/.xinitrc ~/.xinitrc.bak
fi

  echo on > /root/.numlock
 #  создаем файл-указатель  с дефолтным значением off

sed -e "s/\/usr\/X11R6\/bin\/numlockx off/\/usr\/X11R6\/bin\/numlockx 'cat \/root\/.numlock'/" /root/.xinitrc> /tmp/xin
#Переписываем строку в xinitrc, вывод бросаем в tmp
cp /tmp/xin /root/.xinitrc
# и копируем в место назначения

#Выбор Yes или No (результат в $?, 0 - yes, 1 - no, 255 - закрыто окно), "0 0" - размер окна по умолчанию:
    Xdialog --title "Включить NumLock при загрузке?" --yesno "Включить?" 10 60
# Генерируем переменную - результат выбора

# Эта переменная, значение возвращено диалогом
retval=$?

if [ "$retval" = "0" ]; then
# Если условие верно, то выполняем
# Если нет, то ничего не делаем, типа нам пофигу
echo on > /root/.numlock&&
# Переписываем наш файл-указатель

# Информационный диалог, если не нужен, то можно закомментировать
Xdialog --title "Успешно!" --no-buttons --infobox \
" Numlock включен " 10 40 2000
#время показа окна в ms
fi

if [ "$retval" = "1" ]; then
echo off > /root/.numlock&&
Xdialog --title "Успешно!" --no-buttons --infobox \
" Numlock выключен " 10 40 2000
fi

if [ "$retval" = "255" ]; then
# при нажатии ESC выйти
exit 255
fi

Добавил проверку бекапа, если есть - не переписывет файл. Также исправил пути, если сделать пакет, то будет работать.
« Последнее редактирование: 22 Май 2009, 12:22:17 от Zloy_T »

Оффлайн melviX

  • Инициатор проекта
  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2096
  • Репутация: +97/-0
    • PuppyRus Linux
А вот к тому пакету если ещё такую возможность сделать по выключению, если уже не нужно включение?
Т.е. скриптик должен иметь функцию "Управление NumLock".
Free software for free people

Оффлайн melviX

  • Инициатор проекта
  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2096
  • Репутация: +97/-0
    • PuppyRus Linux
Re: [Как скриптом заменить строку в файле?]
« Ответ #10 : 22 Май 2009, 10:52:03 »
И по иерархии вроде лучше в /usr/sbin такие скрипты вкладывать.
Free software for free people

Оффлайн melviX

  • Инициатор проекта
  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2096
  • Репутация: +97/-0
    • PuppyRus Linux
Re: [Как скриптом заменить строку в файле?]
« Ответ #11 : 22 Май 2009, 12:55:54 »
Ну вот, теперь скрипт и оформлен как положено, можно копирайтить  ;D
Только нестыковка с языком на кнопках, почему Английский? И в вопросе: ОК или Cancel. Логичнее чтобы и то и то были "Да" и "Нет".
Free software for free people

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
v 0.3
Допилил. Скрипт теперь проверяет, есть ли бекап, если нет, делает, в домашней дире создает скрытый файл .xinitrc
Изменил размер и надпись на окне. Теперь понятно, что скрипт может как включать, так и выключать нумлок.
При установке ярлык делается в категории "Утилиты"
Сам скрипт устанавливается в /usr/sbin, как заказывали.
Сделал русские кнопки (DdShurick выручил, как обычно)