Задать вопрос
  • Какие программы есть для автоматизации действий в веб браузере?

    3vi1_0n3
    @3vi1_0n3
    Посмотрите Ссылка удалена модератором. Selenium IDE. Похоже на то, что надо?
    Ответ написан
    1 комментарий
  • Как разобрать данные ssl записи для домена?

    3vi1_0n3
    @3vi1_0n3
    Вот так скачать все одной командой:
    echo "" | openssl s_client -showcerts -connect d.codeartifact.eu-north-1.amazonaws.com:443 | sed -ne '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' > certs.txt


    Если сертификат самого сервера не нужен, то можно его удалить из этого файла (certs.txt), но я, честно говоря, оставил бы, если вам надо проверять аутентичность соединения именно с этим доменом.
    Ответ написан
  • Selenium или что другое?

    3vi1_0n3
    @3vi1_0n3
    Из своего опыта с селениумом подозреваю, что в какие-то моменты элемент DOM может там уже не быть, когда вы пытаетесь его использовать, это одна из проблем, которые вылезают в селениуме на динамических приложениях, в частности на многих SPA на реакте.

    Это из-за того, что визуально сам веб-элемент как бы не изменился, но на самом деле это уже вообще не тот элемент, даже если локатор совпадает. При поиске элемента по локатору возвращается element id (выглядит как UUID) этого элемента, с которым и происходят операции. Если дерево было перестроено после получения element id, то возникает ошибка поиска этого элемента, чтобы осуществить над ним действие.

    Обычно может помочь получать элемент по локатору прямо перед его использованием (типа find_element().click()), либо ждать, пока обновления закончатся и как-то это определять. Сам selenium не ждет, пока обновление всего DOM закончится окончательно (хотя у него и есть таймаут поиска), так что над этим придется поэкспериментировать, чтобы определять, что в момент действия вероятность обновления либо нулевая, либо низкая. Его, собственно, многие за это и не любят, хотя при правильном понимании и приготовлении (что обычно занимает время), он может быть очень стабильным.

    Собственно таймаут поиска элемента не всегда работает, когда изменение страницы происходит после того, как элемент найден, но до того, как с ним что-то пытаются сделать.

    Такие вот дела. Я бы попробовал посмотреть, с чем возникает ошибка и, если это по причине того, что элемент не найден, попытался пере-найти этот элемент и потом выполнить действие.
    Ответ написан
  • Необычная проблема с Linux Mint. Почему не работает Linux Mint?

    3vi1_0n3
    @3vi1_0n3
    Тут больше, чем один вариант на самом деле.
    1. В Mint'е был баг с похожими симптомами, когда установлено больше одного графического окружения. Если это тот вариант, то переключиться через Alt+2 или Ctrl+Alt+2 в терминал, удалить второе графическое окружение и перезагрузиться
    2. Есть вариант, что что-то не так в файловой системой. Тут тоже переключиться в терминал, попробовать fsck. Если вдруг проблемы найдены, но не может починить, может потребоваться переключиться в другой уровень загрузки (init 3 или типа того, не готов сказать, что там в минте)
    3. Есть вариант, что какие-то файлы повреждены, можно попробовать переустановить графическое окружение. Так же в терминал, и там "apt reinstall <название пакета, через который ставится графическое окружение>".

    Можно посмотреть в логах, есть ли ошибки (если есть такие логи):
    1. /var/log/Xorg.0.log
    2. /var/log/messages
    3. /var/log/syslog
    4. /var/log/kern.log
    5. /var/log/user.log
    Больше по этой информации тяжело сказать, без логов и прочего.

    P.S. Обновить пакеты пробовали?
    P.P.S. Могут быть еще проблемы с драйверами видеокарты потенциально.
    Ответ написан
    Комментировать
  • Линукс. Есть ли способ заполнять пути в консоли из файлового менеджера?

    3vi1_0n3
    @3vi1_0n3
    Если я правильно понимаю задачу, может быть можно обойтись без файлового менеджера?
    Вот так, например:
    alias get='dialog --erase-on-exit --fselect $PWD 30 100 --stdout'
    cp $(get) $(get)

    Тут для каждого вызова $(get) будет отдельный выбор файла в текстовом, гуй с иксами не нужен. По пробелу выбор директории из списка, при наборе символов установка курсора на директорию, которая подпадает под введенный текст.
    Но есть нюансы.
    1. Интерфейс слегка своеобразный, надо попривыкнуть.
    2. Очистка экрана, если --erase-on-exit есть, и остатки текстовых окон на экране, если --erase-on-exit нет.
    3. Сразу вставит в команду, без помещения в командную строку значения
    Ответ написан
    Комментировать
  • Почему не отрабатывает exit на третьем уровне скрипта?

    3vi1_0n3
    @3vi1_0n3
    Я могу предположить, что такая структура скриптов призвана обеспечить определенную независимость каждого подменю. Если брать ровно те скрипты, которые у вас есть, то:
    1. Добавляем код возрата в функцию PMI - просто добавляем строчку "return $g" после "esac". Это не сломает существующий скрипт. Но! Придется разбираться с ошибками выполнения вызовов IPMI меню отдельно.
    2. Проверяем код возврата в unem
    read b
            case $b in
              1) clear ; ./1_1_system_menu.sh && exit; unem ;;
              2) clear; ./1_1_ipmi_menu.sh && exit; unem ;;
              3) clear ; menu ;;
              0) exit 0 ;;
            esac

    " && exit" здесь выполнится, если скрипт возвращает 0, что и произойдет, если PMI() вернет 0. Соответственно, при выборе любого другого варианта выхода не будет.

    Однако, несмотря на то, что с такими минимальными изменениями оно может работать как надо, все-таки имеет смысл сделать так, как jcmvbkbc уже упомянул - не исполнять скрипты, а включать их. Я не согласен по поводу места в скрипте, куда их включать, я бы поставил source до определения функции unem.
    И я лично сделал бы это несколько по-другому. Как-то так:

    menu.sh
    #!/bin/bash
    
    # Insert necessary sub-menus
    . ./ipmi_menu.sh
    
    declare -A MAINITEMS
    MAINITEMS['System settings']="echo 'System settings selected'"
    MAINITEMS['Ipmi tools']="PMI"
    MAINITEMS['Back to previous']="break"
    MAINITEMS['Exit']="exit"
    
    while :
    do
      select menuitem in "${!MAINITEMS[@]}"
      do
        echo "Menu item: $menuitem"
        ${MAINITEMS[$menuitem]}
      done
    done

    ipmi_menu.sh
    #!/bin/bash
    
    PMI(){
    echo "PMI functions"
    
    PMI_TITLES=(\
            "Sensors check" \
            "Writing Motherboard FRU information"\
            "Writing MAC address  BMC"\
            "Wtiting MAC address Motherboard"\
            "Back to previous"\
            "Exit")
    PMIITEMS[1]="echo Sensors check"
    PMIITEMS[2]="echo fru information"
    PMIITEMS[3]="echo mac address"
    PMIITEMS[4]="echo mac address motherboard"
    PMIITEMS[5]="break"
    PMIITEMS[6]="exit"
    
    select pmiitem in "${PMI_TITLES[@]}"
    do
      ${PMIITEMS[$REPLY]}
    done
    }


    В menu.sh я использую associative array, это сильно упрощает добавление элементов в главное меню.

    В ipmi_menu.sh я использую обычный массив, чтобы соблюсти порядок пунктов меню. Тут PMIITEMS[XXX] будет просто имя функции, содержащейся в файле ipmi_menu.sh

    В этом примитивном варианте экран не очищается и перерисовка пунктов текущего меню происходит по нажатию ENTER, зато это должно (по идее) работать в любом, даже самом тупом терминале. Если надо красоты, можно select поменять на echo+read, смысл от этого не поменяется, все равно можно брать список функций из массива.
    Ответ написан
    Комментировать
  • Как сделать так, чтобы программа закрывалась после третьего неудачного ввода?

    3vi1_0n3
    @3vi1_0n3
    #!/bin/bash
    
    FAILS=0
    Func(){
    read -p "Введите имя: "
    case "$REPLY" in
      Саша|Алекс|Alex)
        echo "Полное имя: Александр"
        return 1
        ;;
      *)
        FAILS=$(($FAILS + 1))
        return 0
        ;;
    esac
    }
    
    while [ $FAILS -lt 3 ] && Func
    do
        echo "Неизвестное имя системе, просим прощения"
    done
    Ответ написан
    Комментировать
  • Как можно реализовать выпадающий выбор даты?

    3vi1_0n3
    @3vi1_0n3
    Самый простой вариант - https://www.w3schools.com/html/tryit.asp?filename=...
    То есть
    <input type="datetime-local">
    Ответ написан
    Комментировать
  • Можно ли ограничить доступ к ssh через разрешенный ip таким образом, чтобы эти ограничения не распространялись на sftp?

    3vi1_0n3
    @3vi1_0n3
    Если отвечать на вопрос из заголовка, то да, можно. Это можно сделать на уровне настроек sshd (/etc/sshd_config). Для этого надо сначала настроить дефолтную конфигурацию, которая позволяет использовать только sftp, а потом добавить секцию Match (смотрите man sshd_config), которая по совпадению адреса позволит использовать ssh. Эта секция перегружает дефолтные настройки при совпадении условия.
    Ответ написан
    Комментировать
  • Почему для Linux нет простых VPN приложений?

    3vi1_0n3
    @3vi1_0n3
    Debian + KDE, в системных настройках, из коробки:
    63f6edd7bb192633805192.png
    Ответ написан
    Комментировать
  • Как разархивировать архив tar.gz, в котором архив и т.д?

    3vi1_0n3
    @3vi1_0n3
    Если не надо сохранять все промежуточные файлы, то может так?
    while [ -f *.tar.gz ]; do filename="$(ls -1 *.tar.gz | head -n 1)"; tar -xvf $filename && rm $filename; done;
    Ответ написан
    Комментировать
  • Как правильно установить пакет через скрипт bash?

    3vi1_0n3
    @3vi1_0n3
    У вас в таком варианте никогда не отработает "apt -f install". Штука в том, что после "dpkg -i" код возврата не ноль. В данном случае лучше попробовать без условного выполнения, либо заменить "&&" на "||". Тогда "apt -f install" будет выполняться после безуспешной установки пакета с помощью dpkg (что в вашем случае и происходит).
    Должно быть что-то типа такого:
    install_timeshift(){
    wget "https://.../...deb" && [ -f "...deb" ] && { dpkg -i ....deb ||  apt -f install; }
    }

    Качаем, потом проверяем, есть ли файл, потом, если файл есть, устанавливаем его при помощи dpkg, и (если код возврата не ноль, что автоматом значит, что была ошибка) пытаемся устанавливать зависимости.

    Пример как это работает:
    $ touch file && [ -f file ] && { test -d whatever || echo 'apt -f install called'; }
    apt -f install called
    $ rm file
    $ touch file1 && [ -f file ] && { test -d whatever || echo 'apt -f install called'; }
    $ touch file1 && [ -f file ] && { test -d whatever || echo 'apt -f install called'; } || echo 'no file downloaded'
    no file downloaded
    $
    Ответ написан
    1 комментарий
  • Как записывать в файл до тех пор пока есть место в нем?

    3vi1_0n3
    @3vi1_0n3
    Учитывая, что изначальный размер определяется размером созданного файла (который в теории может быть другим), я бы начал с получения размера и записыванием ровно такого же объема.
    #!/bin/bash
    FILE="test.txt"
    SIZE=$(stat -c %s $FILE)
    { while [ $(stat -c %s $FILE) -lt $SIZE ]
    do
            cat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 76
    done } | head -c $SIZE > $FILE
    Ответ написан
    Комментировать
  • Как вручную подключить второй монитор к DVI интерфейсу видеокарты и сделать для этого скрипт?

    3vi1_0n3
    @3vi1_0n3
    А так включается?
    xrandr --output DVI-D-0 --output VGA-0 --auto --right-of DVI-D-0

    По идее в настройках DE должно что-то быть для настройки дисплеев
    Ответ написан
    1 комментарий
  • Автоматическое выполнение скрипта для инициализации, работающая только в определенной папке?

    3vi1_0n3
    @3vi1_0n3
    Не сильно свежий вопрос, но мало ли, вдруг актуально еще.
    В .bashrc можно задать переменную PROMPT_COMMAND
    PROMPT_COMMAND='[ "$(pwd)" = "/whatever/lineageos-19.1" ] && . build/envsetup.sh'

    Должно сработать прямо сразу, как только выполните "cd lineageos-19.1"
    Ответ написан
    Комментировать
  • Как локализовать скрипт на BASH?

    3vi1_0n3
    @3vi1_0n3
    #!/bin/bash
    
    declare -A LANGUAGES
    
    BASE="./langs"
    for path in $(find $BASE -name '*.lng')
    do
            base=$(basename $path)
            language=${base%.*}
            line=$(grep "language" $path)
            name=${line#*=}
            LANGUAGES[$name]=$language
    done
    
    echo ${!LANGUAGES[@]}
    echo ${LANGUAGES[@]}
    
    select l in ${!LANGUAGES[@]}
    do
            echo "Selected: $l"
            echo "Selected file: " $BASE/${LANGUAGES[$l]}.lng
            break
    done
    Ответ написан
    1 комментарий
  • Как найти и переименовать все файлы, удалив подстроку (-git)?

    3vi1_0n3
    @3vi1_0n3
    #!/bin/bash
    
    find . -name "*-git*.txt" | (
    IFS='
    '
    while read oldname
    do
    newname=${oldname//-git}
    mv "$oldname" "$newname"
    done
    )
    Ответ написан
    3 комментария
  • Как правильно установить Linux на внешний ssd?

    3vi1_0n3
    @3vi1_0n3
    Попробуйте установить VirtualBox, подключить USB-диск к виртуалке и установить. Если виртуалка после этого с него сможет загрузиться, то и обычный компьютер скорее всего сможет.
    Ответ написан
    1 комментарий
  • Как запустить программу / команду в Linux, не выводя её на экран?

    3vi1_0n3
    @3vi1_0n3
    Если программа хочет что-то рисовать на экране, всегда можно использовать systemd service + Xvfb и выводить графику туда.
    Но соглашусь с Adamos, для anbox это очень необычный сценарий. Посмотрел другие ваши вопросы, выглядит так, как-будто вы хотите странного.
    Anbox - нужно устанавливать на Gnome.
    А потом уже запускать на других DE.

    ^-- вообще не ответ на заданный вопрос, надо было просто PATH поправить.
    Вы пытаетесь запускать АндроИд приложение как сервер или как?
    Ответ написан