Ряд библиотек как ncurses в сценарии оболочки

[118365] Вы упомянули, что "sudoers file прокомментировал [119049]# Defaults requiretty[119050]". [12415]Это не будет иметь никакого эффекта, если ваша сборка sudo имеет по умолчанию [119051]requiretty[119052], что и моя сборка. Используйте целевую спецификацию по умолчанию для соответствующего пользователя:[12416]
1
13.09.2014, 17:40
2 ответа

Хорошо, я чувствую, что вы можете задавать один из двух вопросов, поэтому я постараюсь ответить на обои.

  1. Какие библиотеки могут использовать для создания NCurses, таких как интерфейсы для сценариев Shell?

    На самом деле, я бы никогда не рекомендовал NCurses непосредственно для сценариев Shell, поскольку он действительно не предназначен для использования языками оболочки. Вместо этого я бы порекомендовал диалог . Диалог - это прокладка библиотеки, которая сидит между NCURSES и оболочкой, что делает его использование намного проще.

    Это функционально дает вам два зависимостясь (один на NCURSES и один на диалоговом окне ), который вы, кажется, против по какой-то причине.

  2. Учитывая, что я не хочу никаких внешних зависимостей, как я могу создать свою собственную библиотеку TUI NCURSS-TUI?

    Это Way вне области * nix.se. Создание новой библиотеки TUI не будет иметь тривиальной (особенно если вы пытаетесь создать его в чистом оболочке). Было много проектов, чтобы попытаться сделать новые библиотеки для замены некоторого использования NCurses (например, Termbox , является одним из более успешных).

    Если вы намереваетесь создать собственную библиотеку, вы можете посмотреть на проекты более низкого уровня, такие как NCURSES и TERMBOX и проекты более высокого уровня, такие как диалог. Глядя на их работу, может дать вам представление о том, как начать.


Окончательная рекомендация:

зависимости от внешних проектов, хотя им требуется дополнительная работа (для интеграции и поддержки), не . Это означает, что вы можете сосредоточиться только на инструменте, который вы хотите сделать, и оставить наземную работу тем, кто делает нижнюю инфраструктуру. Linux, в частности из платформ * NIX, имеет длинную историю взаимодействия зависимостей.

Если ваша цель состоит в том, чтобы узнать, как проводится медленные вещи, отлично посмотрите на него. Если вместо этого вы пытаетесь сделать инструмент, который выиграет от такого низкого уровня работы, просто зависит от внешнего инструмента. Вы будете счастливее, и поэтому будут все, кто смотрит на ваш код.

8
27.01.2020, 23:11
#/bin/bash
      E='echo -e';e='echo -en';trap "R;exit" 2
    ESC=$( $e "\e")
   TPUT(){ $e "\e[${1};${2}H";}
  CLEAR(){ $e "\ec";}
  CIVIS(){ $e "\e[?25l";}
   DRAW(){ $e "\e%@\e(0";}
  WRITE(){ $e "\e(B";}
   MARK(){ $e "\e[7m";}
 UNMARK(){ $e "\e[27m";}
      R(){ CLEAR ;stty sane;$e "\ec\e[37;44m\e[J";};
   HEAD(){ DRAW
           for each in $(seq 1 13);do
           $E "   x                                          x"
           done
           WRITE;MARK;TPUT 1 5
           $E "BASH SELECTION MENU                       ";UNMARK;}
           i=0; CLEAR; CIVIS;NULL=/dev/null
   FOOT(){ MARK;TPUT 13 5
           printf "ENTER - SELECT,NEXT                       ";UNMARK;}
  ARROW(){ read -s -n3 key 2>/dev/null >&2
           if [[ $key = $ESC[A ]];then echo up;fi
           if [[ $key = $ESC[B ]];then echo dn;fi;}
     M0(){ TPUT  4 20; $e "Login info";}
     M1(){ TPUT  5 20; $e "Network";}
     M2(){ TPUT  6 20; $e "Disk";}
     M3(){ TPUT  7 20; $e "Routing";}
     M4(){ TPUT  8 20; $e "Time";}
     M5(){ TPUT  9 20; $e "ABOUT  ";}
     M6(){ TPUT 10 20; $e "EXIT   ";}
      LM=6
   MENU(){ for each in $(seq 0 $LM);do M${each};done;}
    POS(){ if [[ $cur == up ]];then ((i--));fi
           if [[ $cur == dn ]];then ((i++));fi
           if [[ $i -lt 0   ]];then i=$LM;fi
           if [[ $i -gt $LM ]];then i=0;fi;}
REFRESH(){ after=$((i+1)); before=$((i-1))
           if [[ $before -lt 0  ]];then before=$LM;fi
           if [[ $after -gt $LM ]];then after=0;fi
           if [[ $j -lt $i      ]];then UNMARK;M$before;else UNMARK;M$after;fi
           if [[ $after -eq 0 ]] || [ $before -eq $LM ];then
           UNMARK; M$before; M$after;fi;j=$i;UNMARK;M$before;M$after;}
   INIT(){ R;HEAD;FOOT;MENU;}
     SC(){ REFRESH;MARK;$S;$b;cur=`ARROW`;}
     ES(){ MARK;$e "ENTER = main menu ";$b;read;INIT;};INIT
  while [[ "$O" != " " ]]; do case $i in
        0) S=M0;SC;if [[ $cur == "" ]];then R;$e "\n$(w        )\n";ES;fi;;
        1) S=M1;SC;if [[ $cur == "" ]];then R;$e "\n$(ifconfig )\n";ES;fi;;
        2) S=M2;SC;if [[ $cur == "" ]];then R;$e "\n$(df -h    )\n";ES;fi;;
        3) S=M3;SC;if [[ $cur == "" ]];then R;$e "\n$(route -n )\n";ES;fi;;
        4) S=M4;SC;if [[ $cur == "" ]];then R;$e "\n$(date     )\n";ES;fi;;
        5) S=M5;SC;if [[ $cur == "" ]];then R;$e "\n$($e by oTo)\n";ES;fi;;
        6) S=M6;SC;if [[ $cur == "" ]];then R;exit 0;fi;;
 esac;POS;done
4
27.01.2020, 23:11

Теги

Похожие вопросы