Комментарии 48
echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]"
Можете объяснить что это за уличная магия?
tput hpa N — сдвиг курсора на N позиций
tput cols получает ширину окна терминала
tput cub 6 — сдвигает курсор на 6 позиций влево
Таким образом [OK] прижимается к краю.
tput cols получает ширину окна терминала
tput cub 6 — сдвигает курсор на 6 позиций влево
Таким образом [OK] прижимается к краю.
"Изучаем 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 символов от правого края. Потом печатается нужный текст.
А ещё хотелось бы знать, во всех ли системах есть команда tput, насколько она стабильна и т.п. А то по прошествии года университетские лабораторки почему-то не запустились — обновление что-то сломало…
>rm test_file || ok=0
есть же $? — статус выполнения последней команды.
кроме того, скрипт из примера съедает ошибку и в своем коде возврата всегда возвращает 0, типа ничего и не было.
есть же $? — статус выполнения последней команды.
кроме того, скрипт из примера съедает ошибку и в своем коде возврата всегда возвращает 0, типа ничего и не было.
whiptail забыли. там же такие красивые менюшечки ((:

whiptail --title Habr --checklist "Simple checkbox menu" 12 35 3 $(echo {hello,habra,habr}" '' 0" )

Можно сказать, что не забыл. Помните, в статье я рассказывал про 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" )
И смотрим, что получилось :)

Есть еще getopts. Когда надо передать различные параметры и ключи, удобнее чем через ${1-9}
Ни слова про функции, думаю это фундаментально.
А также ничего про то как включить файл конфигурации, хотя про него сказано. Для быстрого справочника который Вы пытаетесь сделать, думаю информация была бы уместной.
Материал интересный, но продолжение нужно обязательно, т.к. есть еще много нераскрытых моментов, как например (заметили уже) — функции.
Нашел свой скрипт, на котором немного изучил bash. Он помогает обновлять систему на машине без интернета, с помощью обычной флешки: сначала создаётся список пакетов, на другой машине (с интернетом) они закачиваются, потом на первой машине устанавливаются.
Там есть примеры взаимодействия с пользователем, функции, всяческие условия-циклы, использование других утилит (gpg в частности), комменты и сообщения на русском, короче, вдруг пригодится кому:
dl.dropbox.com/u/22991016/updates.sh
Нашел свой скрипт, на котором немного изучил bash. Он помогает обновлять систему на машине без интернета, с помощью обычной флешки: сначала создаётся список пакетов, на другой машине (с интернетом) они закачиваются, потом на первой машине устанавливаются.
Там есть примеры взаимодействия с пользователем, функции, всяческие условия-циклы, использование других утилит (gpg в частности), комменты и сообщения на русском, короче, вдруг пригодится кому:
dl.dropbox.com/u/22991016/updates.sh
Спасибо за примеры!!!
ncurses я не увидел тут
Как видите, явным недостатком этого метода является привязанность к конкретной среде рабочего стола. Да и вообще к графической среде, которая может и отсутствовать. Но, тем не менее, может и пригодиться когда-нибудь.
Можно в скрипте анализировать переменную окружения DESKTOP_SESSION. Различать GNOME, KDE, какую-то другую (переменная определена, но не равна ни GNOME, ни KDE) и текстовую консоль (переменная не определена) для того, чтобы выбрать gdialog/zenity (думаю стоит указать, что zenity это обновленный gdialog, доступный в GNOME уже давно), kdialog, dialog.
Пытался в свое время найти какой-то стандартный способ определения в скриптах не только среды исполнения, но и пользовательских предпочтений — не смог. Может кто знает?
Я не сталкивался с необходимостью использования GUI в скриптах. Да и неправильно это как-то. Консольный вывод привычнее.
Гуястам:
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
А если пишем скрипт установки какой-нибудь игрушки? Юникс не только для серверов!
Паковать в deb/rpm/etc
Не надо вот этих вот скриптов установки.
Не надо вот этих вот скриптов установки.
А если политика партии требует устанавливать только для текущего пользователя, в $HOME? Причём дело может быть не только в копирастии, но и в желании не требовать для неё прав супер пользователя.
Это не совсем оболочки. Я хотел публиковать в интерфейсы, но тогда кармы не хватило. Хотя сейчас думаю, что *nix все-таки более подходящий блог. Можно считать два последних заголовка приложением.
В любом случае, полезно иметь на счету такие инструменты, как GUI. Есть пользователи, которые панически боятся консоль. Или захочется получить эстетическое удовольствие.
А вообще, GUI будет полезен, если скрипт автостартует с графической оболочкой.
А вообще, GUI будет полезен, если скрипт автостартует с графической оболочкой.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Взаимодействие bash-скриптов с пользователем