Реализовать пакетную опцию --yes в скрипте bash

RSS — это объем памяти без возможности замены, который не считается свободной памятью. Это часть используемой памяти. И не забывайте, что столбец VSZ показывает объем памяти, занимаемой процессом.

5
01.11.2019, 16:22
3 ответа

Вы можете использовать да (1 ), что вообще не потребует каких-либо изменений в вашем скрипте.

$ grep. test.sh
#!/bin/bash
read -rp 'What say you? ' answer
echo "Answer is: $answer"
read -rp 'And again? ' answer2
echo "Answer 2 is: $answer2"
$
$ yes |./test.sh
Answer is: y
Answer 2 is: y

Указанное ругательство будет повторяться бесконечно, если оно не указано, оно будет использоваться по умолчанию y.

10
27.01.2020, 20:31

Если вы используете readтолько для этих вопросов, а переменная всегда называется answer, заменитеread:

# parse options, set "$yes" to y if --yes is supplied
if [[ $yes = y ]]
then
    read () {
        answer=y
    }
fi
10
27.01.2020, 20:31

Я бы поместил всю логику принятия решения в функцию, как проверяющую автоматический режим -, так и, возможно, опрашивающую пользователя. Затем вызовите только это с основного уровня в каждом случае. want_actниже возвращает true/falsy само по себе, нет необходимости в сравнении строк на основном уровне, и читателю ясно, что делает условие.

#!/bin/bash
[[ $1 = --yes ]] && yes_mode=1

want_act() {
    [[ $yes_mode = 1 ]] && return 0
    read -r -p "Include step '$1' (y/n)? " answer
    [[ $answer = [Yy]* ]] && return 0
    return 1
}

if want_act "frobnicate first farthing"; then
    echo "frobnicating..."
fi
6
27.01.2020, 20:31

Теги

Похожие вопросы