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

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    почитать документацию к команде read
    она читает данные не куда-то, а уже в переменную

    #!/bin/bash
    
    read -p  "please enter file names to copy:   " COPYFILE
    cp $COPYFILE /mnt/u/wsl
    Ответ написан
    3 комментария
  • Как сравнить имя имеющихся директорий и создать новую?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Адаптируй эту команду.
    mkdir "folder$(( $(ls -1d ./folder* 2>/dev/null |wc -l) + 1 ))"


    Или эта понадежнее будет:
    mkdir "folder$(( $(ls -1d folder* | cut -c 7- | sort -n | tail -n1) + 1))"
    Ответ написан
    Комментировать
  • Как запустить screen через bash скрипт?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Запуская screen из крона, у вас нет открытой сессии, чтобы скрин знал к чему подключиться.
    Но можно запустить уже открепленный screen с опциями -d -m

    for session in $(screen -ls | grep -oP '\d+\.\w+' | cut -d. -f1); do screen -d -m -S "${session}" -X quit; done

    С другой стороны, не видно чтобы вам вообще нужен был тут скрин, разве что вы хотите именно подключаться в его консоль. Если нет, то прибивайте и перезапускайте ваш бот.
    Ответ написан
    Комментировать
  • Почему результат find в shell скрипте это текущая папка?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    так у вас же скрипт запускается не внутри Melodyne 5, а на рабочем столе, а для него Melodyne 5 это как раз первая папка подходящая под условие "Melodyne*"
    Ответ написан
  • Почему файл не выполняется под пользователем user1?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    suid работает к тем командам, которые собственно создают процесс.
    В случае скриптов, процесс создает не /path/to/script.sh, а /usr/bin/bash, поэтому и suid следует ставить на /usr/bin/bash

    И так со ВСЕМИ скриптами.
    Используйте sudo, su или runuser
    Ответ написан
    1 комментарий
  • Как в bahs скопировать данные ответа программы, вставив часть его в следующий шаг?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    В данном случае наверное нужно man expect
    Ответ написан
    Комментировать
  • Как подтвердить ввод пароля и перенаправить результат на вывод?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Не понятна логика, зачем вам вообще использовать FIFO?
    Почему нельзя так:

    echo "Test123!"  | ./deposit --language English  new-mnemonic --num_validators 1 --chain goerli --eth1_withdrawal_address 0x416D2ec24Da09A321d14C19880850a41F80C9A33 --mnemonic_language English --keystore_password Test123!


    Может быть оно требует перевода строки, тогда так
    echo "Test123!
    "  | ./deposit --language English  new-mnemonic --num_validators 1 --chain goerli --eth1_withdrawal_address 0x416D2ec24Da09A321d14C19880850a41F80C9A33 --mnemonic_language English --keystore_password Test123!


    или

    echo -e "Test123!\n"  | ./deposit --language English  new-mnemonic --num_validators 1 --chain goerli --eth1_withdrawal_address 0x416D2ec24Da09A321d14C19880850a41F80C9A33 --mnemonic_language English --keystore_password Test123!
    Ответ написан
    Комментировать
  • Можно ли в bash-скриптах использовать объекты?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Встроенных структур и объектов в баш нет.
    Но в баш можно и нужно использовать другие консольные команды, которые умеют работать с данными, и с ними вы можете работать с базами данных или другими структурами типа json

    Поставьте себе на хост jq (для JSON) или sqlite (для локального скл) или что вам больше нравится, и используйте данные оттуда.
    Ответ написан
    Комментировать
  • Как в баш красиво запустить многострочный php не создавая файл?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    #!/bin/bash  
    function select_db {
    php << EOF
    <?php
    ...
    ....
    ?>
    EOF
    }
    select_db  "id"


    #!/bin/bash  
    function select_db {
    php <<< "<?php ... ?>"
    }
    select_db  "id"
    Ответ написан
    Комментировать
  • Конвертировать px в rem с помощью bash скрипта?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Вы немного запутались с $line, $new_line
    #!/bin/bash
    css_file="$1"
    
    while read -r line; do
      if [[ $line == *"border"* || $line == *"max-width"* ]]; then
        echo "$line"
        continue
      else
        # Use regular expressions to find pixel values (e.g., "10px", "20px", etc.)
        px_values=$(echo "$line" | grep -oE "[0-9]+px")
        new_line="$line"
    
        # Iterate through each found pixel value
        for px_value in $px_values; do
          # Extract the numeric value from the pixel value
          numeric_value=$(echo "$px_value" | grep -oE "[0-9]+")
    
          # Convert the pixel value to rem and divide by 10
          rem_value=$(awk "BEGIN { printf \"%.2f\", $numeric_value / 10 }")
    
          # Replace the pixel value with the calculated rem value
          new_line=$(echo "$new_line" | sed "s/$px_value/${rem_value}rem/g")
          # sed -i "s/$line/$new_line/" $css_file
        done
        # Print the modified line
        echo "$new_line"
      fi
    done < "$css_file"
    Ответ написан
    1 комментарий
  • Как удалить формат из текста?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Так просто дели по разделителю точке.
    с двойными расширениями могут быть проблемы. Зависит от примера файлов.
    Если у тебя есть
    hello.deman.txt
    hello.tar.gz

    то как тут разобраться где расширение а где имя?
    Ну и где твои собственные попытки?
    Ответ написан
    4 комментария
  • Как в баш подсчитать правильно количество шагов в скрипте до их прохождения?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Ну в том виде, в котором у вас скрипт создан, других вариантов и не видно.
    Если количество шагов меняется, то grep|wc вполне себе вариант
    TOTAL_STEPS=$(grep step_start $0| wc -l )
    только не забыть, что сам grep тоже будет +1.

    Но если количество шагов у вас не меняется, то просто статику добавить в начало скрипта и все.
    Или все зависит от скрипта, от шагов и архитектуры.
    Я вот не очень понимаю зачем вы создаете функцию перед и после каждого шага, ее же вызывать надо?
    Пример не очень релевантент.

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

    steps="initialize build deploy notify"
    
    function initialize() { echo code1; }
    function build() { echo code2; }
    function deploy() { echo code3; }
    function notify() { echo code4; }
    
    echo "We have total $(wc -w<<<"$steps") steps."
    
    for step in $steps; do
      echo "Executing step $step"
      $step
    done


    Или можно работать с массивом
    function initialize() { echo code1; }
    function build() { echo code2; }
    function deploy() { echo code3; }
    function notify() { echo code4; }
    
    steps=( initialize build deploy notify )
    echo "We have ${#steps} steps in total"
    for step in ${steps[@]}; do
     echo executing $step
     $step
    done
    Ответ написан
  • Как изменить имя файла в bash после выполнения условия?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    #!/bin/bash
    for i in {1..255}
    do
      PUB=$(wg genkey)
      PRIV=$(wg pubkey <<<"${PUB}")
      echo -e "$i\n${PUB}\n${PRIV}\n" >> wgkeys.txt
      echo $i
    done
    Ответ написан
    2 комментария
  • Как написать скрипт сбора tcpdump?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    PID=0
    while true; do
    
    ping -q -w 1 -c 1 x.y.z.w > /dev/null
    if [ $? -ne 0 ] && [ $PID -eq 0 ]; then
      tcpdump …. &
      PID=$!
    elif [ $PID -ne 0 ] ; then
        kill $PID
        PID=0
    fi
    
    done
    Ответ написан
    Комментировать
  • Как автоматически сохранять почтовые вложения от определенного адресата?

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

    Либо даже размножить через mailalias в скрипт и на почту, а в скрипте уже отбирать нужные письма и автоматом извлекать то, что нужно
    Например, вы юзаете postfix, и у вас в конфиге постфикса настроен дефолтный путь для алиасов (alias_maps=hash:/etc/aliases)

    Тогда в /etc/aliases нужно прописать
    username: "|/path/to_script"

    можно сделать копирование
    username: username, "|/path/to_script"

    Чтобы вступило в силу, выполнить newaliases после правки /etc/aliases

    если не постфикс, посмотреть доку по вашему почтовому серверу
    Ответ написан
  • Как сделать автоматический ввод данных с консоли в bash скрипт?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Пробовалecho -e "1\n5\n" | bash script.sh но не сработало, как такое можно реализовать?


    Должно было сработать.
    Попробуй следующие варианты
    1.
    echo "1
    5
    "|bash script.sh


    2.
    echo "1
    5
    " > answer.txt
    bash script.sh <answer.txt


    Ну и вообще дебаг бы добавить в свой скрипт, ибо если внутри именно read, то все должно работать правильно и expect в данном случае перебор. Может количество read недостаточно, или разделитель там другой поставил.
    Ответ написан
    3 комментария
  • Как ограничить вывод результатов команды find?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    1. можно увеличить буфер скроллинга, чтобы не затиралось,

    2. перенаправить в файл, который потом прочитать более удобным просмотрщиком
    find > result.txt

    3. Перенаправить в head или tail или more или less через пайп |
    find | head -n 500
    find | less
    Ответ написан
    Комментировать
  • Как правильно передать данные?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Данные в баш скрипт можно передавать тем же json-ом и парсить через jq
    Или фронтом писать в файл, скриптом читать из файла по строкам, убрав проблемы с разными символами
    Можно вообще заворачивать все base64 и передавать аргументы в скрипт уже закодировав - тоже все проблемы с символами пропадают.
    Вариантов много.

    Просто stdout я не могу забирать там много мусора.

    Ну можно же правильный stdout сделать. В самом скрипте писать в лог файлы, а в stdout только то, что нужно для ответа серверу в том формате, который нужен серверу.
    Можно в stderr писать, если нужно в терминал, а не в файл. И соответсвенно контролировать что пошло в stderr а что в stdout. Тут вообще не проблема.
    Ответ написан
  • Как выключить историю команд Bash?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    Может надо не HITSIZE а HISTSIZE, и соответственно не HITFILESIZE а HISTFILESIZE?

    Почитайте также про HISTCONTROL
    Ответ написан
    Комментировать
  • Как отправить ссылку из переменной?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    в кавычки нельзя взять -d="$URLGEN" ?
    Ответ написан
    Комментировать