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

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Обычно я массивы в баше эмулирую строками и операциями "отбросить первый префикс", "отбросить последний суффикс".
    Заводится пара (тройка, четверка) строк с одинаковым количеством элементов и синхронно по ним двигаемся.
    Ответ написан
    Комментировать
  • Как реализовать запуск собственной программы перед выполнением команды в линукс?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    чтобы PATH содержал папки sbin

    Зачем? Если запуск в sbin для юзера не нужен - просто закройте туда доступ, если конечо не боитесь, что что-то сломается (а вполне может)
    Судя по чрезвычайной корявости решения, Вы взялись решать проблему неправильно. Озвучьте изначальную проблему - может быть есть другой способ ее решения.
    Ответ написан
    Комментировать
  • Как объеденить несколько команд в скрипт?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Обычно я не даю готовых скриптов, предпочитая давать удочку, а не рыбу, но тут я подумал и решил, что я у себя использую эту идею - я тоже бэкаплю нечто примерно подобным образом, поэтому тут у нас будет вот:
    #!/bin/sh
    dirlist="dir1 dir2 dirN"
    
    for onedir in $dirlist
     do
       # Это собственно бэкап
       tar zcf - /mnt/md4/${onedir} | ssh user@192.168.0.XXX "cat > /mnt/BACKUP/${onedir}_$(date '+%F_%T').tar.gz"
       # А это проверка того, что что-то сбэкапилось
       # Отбрасываем ->, чтобы исключить линки
       line=`ssh user@192.168.0.XXX \
            "cd /mnt/BACKUP/ && ls -la | grep ${onedir}_$(date '+%F_%T').tar.gz | grep -v -e \"->\""`
    
       # Если в результате пусто - такого файла нет
       if [ ${#line} -eq 0 ]; then
         echo "Backup failed"
        else
           # Берем длину и проверям, что она не нуль
           size=`echo $line | awk '{print $5}'`
    
           if [ $size -ne 0 ]; then
             echo "Backup Success"
           else
              echo "Backup failed"
           fi
        fi
     done
    Ответ написан
    4 комментария
  • Как вы уменьшаете размер пути в приглашении bash?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Никак. Нет у меня таких длинных путей, да и большая часть работы не в голом баше, а в mc
    Ответ написан
    Комментировать
  • Как вызвать source при выполнении .sh файла?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Большая часть кода написана и доработана GPT,

    Поржал. Вот GPT и спрашивайте, почему не так. GPT - огромная библиотека, само оно ни строчки кода написать не может.
    Что хотите сделать?
    Начинаем разбор:
    # Вывели сообщение
    echo "Starting.."
    # Перешли в некий каталог
    cd /home/technocat/PyShell/bin/
    # Ничего не делаем, но видимо пытались вызвать окно терминала, только странно как-то
    #gnome-terminal -e "bash -c \"source activate; exec bash\""
    # Подгружаем скрипт activate из общих путей - такой скрипт существует? Он действительно находится на общих путях?
    source activate 
    # Вызываем вложенный шелл в режиме логина (при этом выполняется .bash_profile, а не только .bashrc)
    exec bash --login

    Вы делаете чушь. Полностью. Как сформулировали задачу?

    И больше не используйте GPT. Никогда Потому что он вам посоветует патч Бармина - тоже установите? :)
    Ответ написан
    2 комментария
  • Как изменить консоль по умолчанию linux?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Вопрос читается следующим образом "Как с помощью палки и веревки изменить руль автомобиля на педаль тормоза?" то есть набор каких-то терминов, которые вроде как к линуху относятся, но каждый сам по себе.

    syslinux - загрузчик, сейчас применяется для iso-образов в legacy режиме
    init - стартовый процесс, который порождает другие процессы
    bash - командная оболочка, которая запускается обычно после логина пользователя (если не в графике)
    "консоль" - это как правило терминал, на котором запущен линух (аппаратный - монитор и клава) либо виртуальный терминал VPS

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

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    echo -n $1
    интерпретирует аргументы перед передачей, поэтому может произвольно обращаться с переданной строкой. Чтобы получить строку неизменной - ее нужно "защитить" :)
    echo -n "$1"
    вот таким образом
    Ответ написан
    Комментировать
  • Есть ли open-source Bash скрипты, позволяющие собирать информацию с серверов?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Тут недавно был подобный вопрос.

    Нет, таких скриптов нет.

    Что касается железа, то это все не так сложно - man lshw. А вот что касается софта... Существует наверное около десятка разных пакетных установщиков, у каждого свой формат и свои параметры запросов. Кроме того, существуют LFS, где нет вообще никаких установщиков - только голые руки :) Есть еще локальная сборка - когда программа собирается непосредственно на компе, где устанавливается.

    Как ты представляешь себе в этом разбираться?
    Ответ написан
    6 комментариев
  • Существуют ли open-source скрипты для Linux для сбора информации о сервере?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Хм. Опросить железо несложно - lshw в помощь. А вот опросить установку ПО - это будет задчей со звездочкой.

    Почему?

    Существует как минимум шесть основных веток дистрибов, каждый из которых имеет свой пакетный менеджер и свою систему управления пакетами. В этих ветках существуют подветки, где существуют свои собственные пакетные менеджеры. Кроме того, существует LFS и установка софта из исходников вручную.

    Как все это автоматизировать - я не представляю.
    Ответ написан
    Комментировать
  • Как написать скрипт deploy.sh,?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Можно мне хоть минимальный пример кода

    Там нет никакого особого кода, разве только банальные директивы управления.

    Записываете в файл подряд команды, которые выполняете вручную для всех необходимых действий.
    Проверяете возврат - чтобы не делать следующую, если предыдущая отвалилась
    Придумываете оповещение о работе

    Пишете первой строкой шебанг.
    ПРОФИТ!
    Ответ написан
    Комментировать
  • Как добавить право записи для группы в Bash скрипте?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Если пофиг файл это или каталог, то тут вообще и думать не о чем
    cd /var/log
    chmod g+w *
    Ответ написан
    Комментировать
  • Как создать скрипт для выключения нескольких пк?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    У Putty есть такая штука как plink, она обычно решает проблемы. Но ssh сервера в винде по умолчанию нет :)
    Ответ написан
  • Как перенести вывод переменной в bash на новую строку?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    man printf. Да-да, в баше есть такая штука. Вот там будет нужное форматирование.
    Ответ написан
    Комментировать
  • Как реализовать подобный bash-интерфейс?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    ESC-последовательности для управления терминалом. Обычно их используют для цветного вывода - вот у меня есть библиотечка colorprint.sh, но там есть и команды управления курсором, и они работают!
    Ответ написан
  • Как записать информацию из вывода в файл с неизвестным названием?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    curdate=`date "+%Y-%m-%d_%H-%M"`
    echo "Golaktiko opasnoste!" > /tmp/$curdate
    Ответ написан
  • Как написать bash мониторинг файловой системы EXT4?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Если втупую - парсинг вывода ls :), потом sleep и так до бесконечности. Когда триггер сработал - там оповещение, буде надо.
    Ответ написан
  • Как в bash-скрипте ограничить ввод двумя вариантами?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Держи :) Копирайт мой

    # Check entered answer on presence "yes" or "no" - another answers
    # is prohibited
    #
    # Input:        $1 (string)     - user answer
    #               $2 (string)     - warning sign. 
    #                                 When parameter set to "warn", script claims about missed input
    # Output:       $_isavalid (int) - 0, when answer is not valid
    #                                  1, when answer is valid
    check_yesno()
    {
      local _check _warn
      
      _warn=${2:-no}
    
      # At start name claimed as NOT valid!
      _isavalid=0
    
      # Check on presence any data, passed as answer
      if [ ${#1} -eq 0 ]; then
        if [ $_warn = "warn" ]; then
          echo "There is no defaults, please answer \"Yes\" or \"No\""
        fi
        return
      fi
    
      # Check name through specified regexp
      regexp="^([Yy][Ee][Ss])$|^([Nn][Oo])$|^[Yy]$|^[Nn]$"
      _check=`echo $1 | grep -v -E -e "$regexp"`
    
      if [ ${#_check} -ne 0 ]; then
        return
      fi
    
      _isavalid=1
    }
    Ответ написан
  • Можно ли в bash-скриптах использовать объекты?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Нет.
    Ответ написан
    Комментировать
  • Как правильно в bash скрипте использовать $?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    pg_dump -U postgres zkgu | gzip > /mnt/NStore/1c-sqldump/$n$d.gz

    Если pg_dump по какой-то причине сломался, gzip ничего не получит и если ошибку и вернет - то не имеющую никакого отношения к pg_dump

    Нужно проверять правильность завершения pg_dump, а уже потом, если не сломался - паковать и удалять лишнее.
    То есть уберите из строки выше gzip и внесите упаковку в блок if-then
    Ответ написан
    Комментировать
  • Как отловить пропажу интернета?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Не гугл, а свой провайдерский роутер. Ситуации, когда провайдер работает, а где-то там пропала связность и гугла нет - тоже бывают. Ну и кроме того, вовсе не факт, что гугл скоро останется в нашей сети :)
    Ответ написан