Ответы пользователя по тегу bash
  • Как проверить установленные права на /etc/shadow?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Если права на файл не go-rwx

    разрешения на файл не могут быть go-rwx, эта запись означает "отнять rwx у g и o". Разрешения могут быть u=rw,go=. Получить их можно например так: stat -c %A /etc/shadow, а проверить условие -- командой test, например: if [ `stat -c %A /etc/shadow` != "-rw-------" ], или командой grep, например:
    if ! stat -c %A /etc/shadow | grep -q '^....------$'
    .

    Кроме того, можно не париться и просто всегда делать chmod go-rwx /etc/shadow.
    Ответ написан
    Комментировать
  • Ошибка в bash скрипте: bash unexpected EOF while looking for matching `'' - что именно не так?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    На вид всё выглядит корректно, все кавычки парные и вовремя закрыты.
    domains="$(cat /opt/cloudfave/cluster_config.js | grep domain | awk '/domain: / { print $2 }' | sed -e \"s/[,']//g\")"

    вот здесь одиночная кавычка в строке sed портит разбор
    Ответ написан
    4 комментария
  • Как подставить в echo переменную?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как я могу данные из них подставить в echo, сохранив при этом функционал запроса?

    eval "echo {$A1}.{$A2}.{$A3}"
    Потому что расширение таких конструкций со скобками -- функция shell, поэтому они должны буквально в таком виде попасть в shell. eval применяет функциональность shell к произвольной строке.
    Ответ написан
    3 комментария
  • Как записать информацию из вывода в файл с неизвестным названием?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как перенаправить информацию из вывода команд в файл, который создается в процессе проверки командой
    #touch $( date '+%Y-%m-%d_%H-%M' )

    Записать имя файла в переменную и дальше везде использовать её. Например:
    …
    file=$( date '+%Y-%m-%d_%H-%M' )
    touch "$file"
    …
    echo -e "               Product Name : $PN_FRU" >> "$file"
    …
    Ответ написан
    Комментировать
  • Как правильно подменить (скопировать) скрипта в самом скрипте?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Есть ли способ из самого скрипта подменить сам скрипт чтобы он не портился?

    Когда cp или mv заменяет открытый интерпретатором файл, исходный файл не портится. Если интерпретатор взаимодействует с файлом через один и тот же файловый дескриптор, то никакого значения замена файла не имеет. Нужно разбираться с деталями того что портится, чтобы понять, как это пофиксить.
    Ответ написан
    Комментировать
  • Почему файл не выполняется под пользователем user1?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Биты setuid/setgid не работают со скриптами. Они работают только с двоичными исполняемыми файлами. Скрипт -- это текстовый файл интерпретируемый другой программой. Чтобы выполнить скрипт под другим пользователем воспользуйтесь командой sudo.
    Ответ написан
    Комментировать
  • Как в bash через sed заменить строку через регулярное выражение?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    lang="[a-zA-z]{2}"
    диапазон из 2-х любых латинских букв

    Должно быть lang="[a-zA-Z]\{2\}"
    Ответ написан
    Комментировать
  • Как добавить к тексту слово, после последнего совпадения через sed?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Необходимо добавить после ips_addr_1 слово ips_addr_2, нужно чтобы было совпадение по последнему слову

    sed 's/\(.*ips_addr_[0-9]\)/\1 ips_addr_2/'
    Ответ написан
    Комментировать
  • Почему не отрабатывает exit на третьем уровне скрипта?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Написали многоуровневое меню при помощи функций, работает без проблем все, кроме выхода.
    Примерно на 2-3 уровне меню "Exit" не выходит из скрипта, а возвращается на уровень выше.

    всё зависит от того, как эти функции вызываются. Если так:

    clear; ./1_1_ipmi_menu.sh ; unem ;;

    то разумеется вызов exit внутри скрипта 1_1_ipmi_menu.sh приведёт в возврату в unem, вы же тут отдельный процесс создаёте.
    Чтобы exit в функциях приводил к выходу из приложения нужно импортировать (source) функции из этих скриптов и вызывать функции вместо запуска скриптов.
    Типа того:
    #!/bin/bash
    unem() {
            read b
            case $b in
              1) clear ; … ; unem ;;
              2) clear; PMI ; unem ;;
              3) clear ; menu ;;
              0) exit 0 ;;
            esac
    }
    source 1_1_ipmi_menu.sh
    source 1_1_system_menu.sh
    unem
    Ответ написан
    Комментировать
  • Как создать такой вывод в bash script?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    С чего начинать разбираться?

    man 7 inode -- обзор того, какие атрибуты есть у файлов
    man 1 mkdir -- создавать каталоги и назначать им разрешения
    man 1 touch -- создавать файлы и менять даты файлам и каталогам
    man 1 chmod -- менять разрешения файлам и каталогам
    man 1 ln -- создавать символьные ссылки
    Ответ написан
    7 комментариев
  • Как правильно в bash скрипте использовать $?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    дамп postgres, после чего, если комманда с дампом выполнилась…
    pg_dump -U postgres zkgu | gzip > /mnt/NStore/1c-sqldump/$n$d.gz
    EXIT_STATUS=$?
    if [[$EXIT_STATUS -eq "0"]]

    Вместо двух лишних действий с текстовым представлением то же самое можно сделать идиоматично:
    if pg_dump -U postgres zkgu | gzip > /mnt/NStore/1c-sqldump/$n$d.gz


    Но есть одно "но": написанная вами команда делает не то, что вы хотели: $? -- это статус завершения последней команды, а у вас там пайплайн и последняя команда -- gzip. Статус завершения именно pg_dump не проверяется, ни первым вариантом, ни вторым.
    Ответ написан
    Комментировать
  • Как разархивировать архив tar.gz, в котором архив и т.д?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Studencheskaya32 --to-command -- это прикольно.
    Но мне больше нравится решение с -O:
    tar -xzvOf archive.tar.gz | tar -xzvO | tar -xzvO | … | tar -xzvO | tar -xzv
    Ответ написан
    Комментировать
  • Как удалить все строки до n через sed?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как отредактировать это, чтобы работало?
    получаю n через grep
    Далее пытаюсь понять как удалить через sed все строки от 1 до n

    Можно всё это выполнить в одном скрипте sed:
    sed -i '0,/string:/d' file1
    Ответ написан
    2 комментария
  • Как осуществить преобразование вывода в переменную с вычитанием установленного числа в одну строчку?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как осуществить

    Подставить одно в другое:
    maxiter=$(( $(cat $1 | wc -l) - 1 ))
    Ответ написан
    Комментировать
  • Как сравнить вывод скрипта с файлом?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как все-таки правильно сверить, должно быть 100 процентное совпадение с эталонным файлом в результате команды должна быть 1.

    ./test.sh | if cmp -s - test ; then echo 1 ; else echo 0 ; fi


    result=$(./test.sh)| cmp -s $result test

    это почти попытка сравнить текст выводимый test.sh с содержимым файла test, но здесь не нужен конвейер и cmp так не работает.

    cmp -s (./test.sh) test

    Это почти рабочий вариант для bash, полностью рабочий выглядит так: cmp -s <( ./test.sh ) test. Но из-за того, что конструкция <(…) специфична для bash этот вариант на мой взгляд менее предпочтителен чем вариант ./test.sh | if cmp -s - test.
    Ответ написан
    Комментировать
  • Почему не заменяет перенос строки на пробел?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    sed -e '/\n\/\s/g'
    Но почему ентер не меняется на пробел.

    Что тут вообще написано? Судя по g в конце имелось в виду 's/\n/ /g'?
    Не работает потому что sed читает ввод построчно и конец строки как символ обычно не попадает в паттерн спейс. Но есть команда N которая добавляет \n и следующую строку к уже прочитанной: speedtest --simple | sed '1d;N;s/\n/ /g'
    Ответ написан
    4 комментария
  • Почему не срабатывает условие в bash-скрипте?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему не срабатывает условие в bash-скрипте?

    Потому что не хватает пробелов: вот так [[ "$ip" != "127.0.0.1" ]] будет работать.
    Ответ написан
    Комментировать
  • Как в Си вывести в консоль без записи в буфер?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Если я использую printf("asd"), то весь текст в кавычках будет выведен на экран и записан в лог файл. Вот такая команда: './a.out > file.log'.

    Здесь несколько несуразностей: 1) printf в ./a.out > file.log не выведет ничего на экран, всё будет перенаправлено в файл. но 2) сам printf об этом ничего не знает. Он выводит данные в поток стандартного вывода, куда они перенаправляются потом -- не его дело. 3) оператор > перенаправляющий вывод -- это инструкция командной оболочке как запускать программу, к самой программе отношения не имеет.

    Есть ли какая другая команда вывода, которая будет текст выводить только в терминал, без записи в файл?

    Есть! ./a.out, без каких-либо изменений в коде.
    Ответ написан
    4 комментария
  • Как найти имя процесса НЕ содержащее в названии заданную строку при помощи bash?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    если нам нужны имена процессов с именем НЕ содержащим в названии подстроку

    grep -v
    Ответ написан
    2 комментария
  • Как решить ошибку сборки bashdb?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Please specify the compatibility level in debian/compat
    or via Build-Depends: debhelper-compat (= X)

    Искал в тексте упоминания debhelper-compat, но не нашел.

    Насколько я понял этот документ, рекомендуется указывать зависимость от debhelper-compat вместо зависимости от debhelper. Т.е. надо самому написать
    Build-Depends: debhelper-compat (= 13), texi2html, texinfo
    Ответ написан
    Комментировать