Ответы пользователя по тегу bash
  • Как в bash-скрипте сделать двойное условие?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    if [ "$projectDir" = "video" -o "$projectDir" = "audio" ] && [ "$flag" != "noflag" ]; then
    Ответ написан
    Комментировать
  • Что означает ошибка, выводящаяся при выполнении bash-скрипта?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Внутри оператора [] нельзя использовать &&, потому что это не синтаксис [] а синтаксис внешнего баш.
    Правильно так
    [ "$projectDir" == "video" -a "$flag" != "noflag" ]

    или
    [ "$projectDir" == "video" ] && [ "$flag" != "noflag" ]
    Ответ написан
    Комментировать
  • Как в bash из массива удалить элемент c с конкретным значением?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    for (( i=0; i <= ${#lng[*]}; ++i )); do
      [ "${lng[$i]}" == "none" ] && unset lng[$i]
    done
    Ответ написан
    Комментировать
  • Как передать большой файл по ssh без промежуточного хранения?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    tar -cz /home/target | sshpass -p 'pwd' ssh -p 23 username@server.com 'cat > /home/backups/destination.tar.gz'


    Все должно так работать. Если у вас ошибка от tar, то может это не stdout а stderr?
    Приведите текст что там не так. Файл в конечно счете правильный выходит?
    Ответ написан
    Комментировать
  • Как написать скрипт на bash для ansible чтоб автоматически разослать публичные ключи на машины?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Продебажить что происходит, добавить echo внутри цикла?
    Руками если выполнить ssh-copy-id работает?
    Какую ошибку выдает?

    ssh-copy-id достаточно тупая команда. может не учитывать текущие настройки sshd, например sshd настроен на authorized_keys2, а он пишет в authorized_keys

    В общем проверить руками результат команды, проверить что внутри цикла.
    Ответ написан
    6 комментариев
  • Как в Linux найти файлы одинакового размера?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    1. Поискать готовые инструменты, их есть.

    2. написать скрипт, который например через find находит все файлы рекурсивно, вычисляет для каждого контрольную сумму, например md5, и скидывает в какой-то текстовый файлик хеш и путь+имя файла.
    Сортируешь по хешу, находишь одинаковые.

    3. найти все файлы, которые не отличаются друг от друга более чем на 10 Кб
    С этим сложнее. Есть софт, который может определять похожие изображения, но именно файлы, там непонятно как с критериями работать.
    Ответ написан
    Комментировать
  • Возможно ли отправлять команды коммутатору через Bash?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    А почему нельзя обычный ssh с ssh ключами?
    Ну ив ообще-то нет проблем однострочник на баше написать..
    Ответ написан
    Комментировать
  • Как передавать get параметр ссылки боту Телеграма?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Надо разобраться как работает экранирование и разные типы кавычек в шелле.
    TEXT_ARTIFACT_URL_HREF="Ссылка на артефакт: <a href=\"$TEXT_ARTIFACT_URL\">Download Artifact</a>"
    Ответ написан
  • Почему выводится только одна единица?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    echo -e "\n"PC-{001..150}


    for i in {0..150}; do printf "%03d\n" $i; done


    for i in $(seq -w 1 150); do echo "PC-$i"; done

    ну или сравнение чисел делается через спец. операторы -gt, -ge, -lt, -le, -eq, -ne
    #!/bin/bash
    
    for ((i=1; i < 150; i++)); do
        if [[ $i -lt 10 && $i -ge 0 ]] ; then
            out="00$i"
        fi
        if [[ $i -lt 100 && $i -ge 10 ]] ; then
            out="0$i"
        fi
        if [[ $i -lt 1000 && $i -ge 100 ]] ; then
            out="$i"
        fi
        echo PC-$out
    done
    Ответ написан
    2 комментария
  • Как при выполнении команды bash, которая использует grep, получить код выхода команды, а не самого grep?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Храни результат diff в промежуточном значении
    result="git diff --diff-filter=AM --name-only origin/master"
    grep "app/" <"$result" > ./log

    соответственно каждую команду можешь отдельно почекать
    result="git diff --diff-filter=AM --name-only origin/master"
    if [ $? -eq 0 ]; then echo OK; else echo NOT OK; fi
    grep "app/" <"$result" > ./log
    Ответ написан
    2 комментария
  • Почему команда ls -l возвращает только total 0?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    ls -ld testdir

    по умолчанию, команда ls выводит указанные файлы, если же указаны директории, то их содержимое.
    Чтобы "залочиться" в текущей папке, нужно использовать опцию -d
    Ответ написан
    Комментировать
  • Как вызвать source при выполнении .sh файла?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Так вы source загрузили, а потом запускается новый баш, в котором уже ничего не загружено
    exec bash --login

    Или я что-то не понял?
    Ответ написан
    Комментировать
  • Скрипт на bash для мониторинга таблицы из Postgresql?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    DB_HOST = '***'
    DB_PORT = '****'
    DB_NAME = '****'
    DB_USER = '***'
    DB_PASS = '***'


    Для объявления переменных, нужно убрать пробелы и до и после равно.
    VARIABLE = VALUE
    ошибка

    VARIABLE=VALUE
    нормально
    Ответ написан
    Комментировать
  • Как запустить несколько команд в bash вместе, но не дожидаясь ответа?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Проблема в том, что вы не понимаете сути команд.
    У вас не запуск нескольких команд в баше, а запуск конкретной программы, а затем выполнение команд уже не в баше, а в этой программе. Баш тут уже не причем.

    Тут нужно разобраьтся как работает ваша программа. Если она просто ждет ввода пользователя, можно взять, написать список команд (каждая команда в новой строке) в отдельный текстовый файлик и перенаправить его в вашу программу, тогда она будет думать что это пользователь очень быстро все вводит.
    вот как пример echo -ne "uci\n" |stockfish
    то есть перенаправляем команду в команду, словно ее ввел пользователь.

    Если нужно проверять результат вывода, это уже отдельный вариант. Но нужно уточнить как stockfish себя ведет, если можно выполнить одну команду в stockfish и выйти, то можно как-то так

    result="$( echo -ne "uci\nexit\n" | stockfish)"
    echo "result is [$result]"
    ну и проверять.

    Короче тут нужно с самим stockfish разобраться.Или изучить как работает expect
    Ответ написан
    Комментировать
  • Как изменить консоль по умолчанию linux?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    init это не консоль, это процесс ядра операционки.

    оболочка bash запускается после того, как юзер залогинился, и дефолтная оболочка указывается для юзера в /etc/passwd. И это тоже не консоль.

    Нужно разобраться с терминологией и что именно нужно сделать.
    Ответ написан
    Комментировать
  • Почему при передаче аргумента в функцию у него обрезаются пробелы?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Возьмите параметр в кавычки, иначе команда echo не видит где заканчивается ваш параметр.
    Ну и если версия баш не древняя, то команда read сама умеет промпт выводить типа
    read -p "$1" var
    Ответ написан
    Комментировать
  • Есть ли open-source Bash скрипты, позволяющие собирать информацию с серверов?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    В крайнем случае интересуют любые исходники подобных сервисов на иных ЯП, в которых можно прокопаться и поглядеть, как оно изнутри работает.


    Так подучите системное администрирование линукс. Вся информация о хосте берется из /proc и /dev.
    Все системные утилиты оттуда все забирают и парсят.
    Банальные команды типа df, cpuinfo, free лазят именно там
    Ответ написан
    4 комментария
  • Существуют ли open-source скрипты для Linux для сбора информации о сервере?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    базовую информацию о железе собрать несложно, и это умеет практически любая система мониторинга в штатном режиме (экспортеры стандартных линукс метрик у всех систем, это обычно скрипты на баш/перл/питон/го)

    А вот про установленный софт, такое врядли возможно в принципе, ибо что-то может ставиться через пакет менеджер, что-то просто распаковываться, что-то копироваться, что-то ставиться из файла другим менеджером.
    Общего и единственного реестра среди разных линуксов нет. Путь установки может зависеть от организации.
    Поэтому тут нужно взять hand.sys и стандартизировать свою инфраструктуру, скрипт писать под нее.
    Ответ написан
    Комментировать
  • Скомпилировать Bash программу в exe?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Какая цель такой "компиляции", поскольку баш изначально не предназначался для компиляции, это скриптовый язык, и штатных средств для такого нет.
    Кроме того, баш собственно хорошо заточен на вызов внешних утилит, поэтому их все "вкомпилировать" в баш врядли возможно
    Ответ написан
    3 комментария
  • Как перехватить ввод extra-button в Zenity?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    вопрос не понят. Что перехватит, как перехватить?
    Вы тут просто вызываете внешнюю команду, для которой нужно указать набор переменных, а в options попадает аутпут этой команды, а не ее параметры
    Ответ написан
    Комментировать