Comments 48
echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]"
Можете объяснить что это за уличная магия?
+9
tput hpa N — сдвиг курсора на N позиций
tput cols получает ширину окна терминала
tput cub 6 — сдвигает курсор на 6 позиций влево
Таким образом [OK] прижимается к краю.
tput cols получает ширину окна терминала
tput cub 6 — сдвигает курсор на 6 позиций влево
Таким образом [OK] прижимается к краю.
+16
"Изучаем tput"
tput cols — получение числа колонок на устройстве вывода
tput hpa _ — передвинуть курсор в позицию __
$(tput hpa $(tput cols) — передвинуть курсор в конец строки
tput cub 6 — сдвинуть курсор влево на 6 знаков.
Вне зависимости от размера экрана, курсор позиционируется на 6 символов от правого края. Потом печатается нужный текст.
tput cols — получение числа колонок на устройстве вывода
tput hpa _ — передвинуть курсор в позицию __
$(tput hpa $(tput cols) — передвинуть курсор в конец строки
tput cub 6 — сдвинуть курсор влево на 6 знаков.
Вне зависимости от размера экрана, курсор позиционируется на 6 символов от правого края. Потом печатается нужный текст.
+7
А ещё хотелось бы знать, во всех ли системах есть команда tput, насколько она стабильна и т.п. А то по прошествии года университетские лабораторки почему-то не запустились — обновление что-то сломало…
+1
UFO just landed and posted this here
>rm test_file || ok=0
есть же $? — статус выполнения последней команды.
кроме того, скрипт из примера съедает ошибку и в своем коде возврата всегда возвращает 0, типа ничего и не было.
есть же $? — статус выполнения последней команды.
кроме того, скрипт из примера съедает ошибку и в своем коде возврата всегда возвращает 0, типа ничего и не было.
+2
whiptail забыли. там же такие красивые менюшечки ((:
whiptail --title Habr --checklist "Simple checkbox menu" 12 35 3 $(echo {hello,habra,habr}" '' 0" )
+2
Можно сказать, что не забыл. Помните, в статье я рассказывал про dialog. А теперь фокус… Заменяем whiptail на dialog:
dialog --title Habr --checklist «Simple checkbox menu» 12 35 3 $(echo {hello,habra,habr}" '' 0" )
И смотрим, что получилось :)
dialog --title Habr --checklist «Simple checkbox menu» 12 35 3 $(echo {hello,habra,habr}" '' 0" )
И смотрим, что получилось :)
+3
Есть еще getopts. Когда надо передать различные параметры и ключи, удобнее чем через ${1-9}
+3
Ни слова про функции, думаю это фундаментально.
+1
А также ничего про то как включить файл конфигурации, хотя про него сказано. Для быстрого справочника который Вы пытаетесь сделать, думаю информация была бы уместной.
+1
UFO just landed and posted this here
Материал интересный, но продолжение нужно обязательно, т.к. есть еще много нераскрытых моментов, как например (заметили уже) — функции.
Нашел свой скрипт, на котором немного изучил bash. Он помогает обновлять систему на машине без интернета, с помощью обычной флешки: сначала создаётся список пакетов, на другой машине (с интернетом) они закачиваются, потом на первой машине устанавливаются.
Там есть примеры взаимодействия с пользователем, функции, всяческие условия-циклы, использование других утилит (gpg в частности), комменты и сообщения на русском, короче, вдруг пригодится кому:
dl.dropbox.com/u/22991016/updates.sh
Нашел свой скрипт, на котором немного изучил bash. Он помогает обновлять систему на машине без интернета, с помощью обычной флешки: сначала создаётся список пакетов, на другой машине (с интернетом) они закачиваются, потом на первой машине устанавливаются.
Там есть примеры взаимодействия с пользователем, функции, всяческие условия-циклы, использование других утилит (gpg в частности), комменты и сообщения на русском, короче, вдруг пригодится кому:
dl.dropbox.com/u/22991016/updates.sh
+2
Спасибо за примеры!!!
+1
ncurses я не увидел тут
+1
Как видите, явным недостатком этого метода является привязанность к конкретной среде рабочего стола. Да и вообще к графической среде, которая может и отсутствовать. Но, тем не менее, может и пригодиться когда-нибудь.
Можно в скрипте анализировать переменную окружения DESKTOP_SESSION. Различать GNOME, KDE, какую-то другую (переменная определена, но не равна ни GNOME, ни KDE) и текстовую консоль (переменная не определена) для того, чтобы выбрать gdialog/zenity (думаю стоит указать, что zenity это обновленный gdialog, доступный в GNOME уже давно), kdialog, dialog.
Пытался в свое время найти какой-то стандартный способ определения в скриптах не только среды исполнения, но и пользовательских предпочтений — не смог. Может кто знает?
+1
Я не сталкивался с необходимостью использования GUI в скриптах. Да и неправильно это как-то. Консольный вывод привычнее.
+1
> source ./config.cfg
. config.cfg
:)
. config.cfg
:)
+2
А если скрипт запускается из левой директории можно делать так:
MyDir=`cd -P "$(dirname "$0")" && pwd`
. "$MyDir"/config.cfg
+2
Да,
Но вот не пойму зачем:
Разве
. config.cfg
проще и удобнее, но source ./config.cfg
нагляднее (:Но вот не пойму зачем:
MyDir=`cd -P "$(dirname "$0")" && pwd`
. "$MyDir"/config.cfg
Разве
. config.cfg
не всегда сработает?0
Не сработает, если скрипт запущен из другой рабочей директории.
+1
Либо я чего-то не догоняю, либо одно из двух. Команда
cd -P "$(dirname "$0")" && pwd
указывает в ту директорию, их которой запущен скрипт. А значит дает тот же результат, что и . config.cfg
. Так ведь?0
Ох блин…
Ок, на примере :)
Скрипт у нас лежит в /root, называется допустим script.sh.
Находясь в директории /root вызываем /root/script.sh — все ок.
Находясь в любой другой директории вызываем /root/script.sh — получаем ошибку о том что не найден config.cfg.
Ок, на примере :)
Скрипт у нас лежит в /root, называется допустим script.sh.
Находясь в директории /root вызываем /root/script.sh — все ок.
Находясь в любой другой директории вызываем /root/script.sh — получаем ошибку о том что не найден config.cfg.
cd -P "$(dirname "$0")" && pwd
меняет директорию на ту, где расположен скрипт, а не откуда он запущен, таким образом позволяя подгрузить конфиг. Пишу ее в переменную MyDir я для того, чтобы если что иметь возможность переключаться между директориями. Развивая тему:# определяем рабочую директорию
WorkDir=`pwd`
# определяем директорию где расположен скрипт с конфигом и возвращаемся обратно
MyDir=`cd -P "$(dirname "$0")" && pwd && cd "$WorkDir"`
# читаем конфиг
. "$MyDir"/config.cfg
# далее выполняем всю работу как обычно, в текущей рабочей папке
+1
Гуястам:
xmessage -buttons Yes:0,No:1 -default Yes 'Are you sure?'
xmessage, правда, дистроспецифичен. С недавнего времени наличие иксов в арчике не подразумевает автоматически его наличия.
Ну а если делать красиво, то, видимо, анализировать $DESKTOP_SESSION и в зависимости от его значения вызывать kdialog/gdialog
xmessage -buttons Yes:0,No:1 -default Yes 'Are you sure?'
xmessage, правда, дистроспецифичен. С недавнего времени наличие иксов в арчике не подразумевает автоматически его наличия.
Ну а если делать красиво, то, видимо, анализировать $DESKTOP_SESSION и в зависимости от его значения вызывать kdialog/gdialog
0
UFO just landed and posted this here
А если пишем скрипт установки какой-нибудь игрушки? Юникс не только для серверов!
0
Паковать в deb/rpm/etc
Не надо вот этих вот скриптов установки.
Не надо вот этих вот скриптов установки.
0
А если политика партии требует устанавливать только для текущего пользователя, в $HOME? Причём дело может быть не только в копирастии, но и в желании не требовать для неё прав супер пользователя.
0
UFO just landed and posted this here
Это не совсем оболочки. Я хотел публиковать в интерфейсы, но тогда кармы не хватило. Хотя сейчас думаю, что *nix все-таки более подходящий блог. Можно считать два последних заголовка приложением.
0
В любом случае, полезно иметь на счету такие инструменты, как GUI. Есть пользователи, которые панически боятся консоль. Или захочется получить эстетическое удовольствие.
А вообще, GUI будет полезен, если скрипт автостартует с графической оболочкой.
А вообще, GUI будет полезен, если скрипт автостартует с графической оболочкой.
0
Sign up to leave a comment.
Взаимодействие bash-скриптов с пользователем