Сценарий оболочки -вывести вопрос, прочитать ответ? наполовину напечатать ответ?

Из справочной страницы perlrun:

perl... [ [-e|-E] 'command' ]...

Все, что следует за параметром -e, perl обрабатывает как команду. С -nel, lявляется командой для -e. print $1 if /install\(TARGETS (.*) RUNTIME DESTINATION bin\)/является первым аргументом опции, отличной от -, и он становится входным файлом, который perl пытается открыть и терпит неудачу.

Сравните, скажем, с:

~ echo  foo | perl -neprint
foo

1
20.11.2020, 18:08
3 ответа

С оболочкой zsh:

zmodload zsh/datetime
strftime -s date %F $EPOCHSECONDS
set -o emacs
vared -p 'What date would you like? ' date

(

или используя подсказку с помощьюprint -P:

print -rPv date '%D{%F}'
set -o emacs
vared -p 'What date would you like? ' date

или (другой (и более старый )способ получить быстрое расширение):

date=${(%):-%D{%F}}
set -o emacs
vared -p 'What date would you like? ' date

)

vared— это встроенная команда edдля var.

С оболочкой fish:

fish_default_key_bindings
read -c (date +%F) -P 'What date would you like? ' date

С оболочкой ksh93:

date=${ printf '%(%F)T' now; }
set -o emacs
IFS= read -rv 'date?What date would you like? '

С оболочкой bash:

printf -v date '%(%F)T' -1
set -o emacs
IFS= read -rei "$date" -p 'What date would you like? ' date

All предварительно -заполнит строковый редактор текущей датой и позволит вам редактировать ее (с привязкой клавиш в стиле emacs -; замените emacs/ defaultна vi, если вы предпочитаете стиль vi).

Здесь %F(, сокращение от %Y-%m-%d), является стандартной директивой strftime(), которая дает вам дату в международном формате YYYY-MM-DD. Вы можете адаптироваться к вашим потребностям. Подробности смотрите на справочной странице strftime(3).

Обратите внимание, что только подходы zshи fishработают правильно, если вы хотите отредактировать многострочную переменную -.

3
18.03.2021, 22:48

Вы не указали, какую оболочку используете. Если вы используете Bash, в readэто встроено.

read -ei "$( date +%F )" -p 'What date would you like? ' USER_DATE
echo "You chose ${USER_DATE}"

Пояснение:

-e  Use readline for input.
-i  Specify how to pre-fill the buffer.
-p  Provide a prompt to the user.

Конечно, вам придется включить проверку на ошибку -, чтобы убедиться, что пользователь ввел правильную дату, хотя вы можете использовать dateсаму по себе, потому что она очень гибкая. Будьте осторожны с вашим языком, потому что «03 -01 -2021» означает в Америке нечто иное (1 марта 2021 ), чем в остальном мире (3 января 2021 ). Использование формата ГГГГ -ММ -ДД, вероятно, будет работать во всем мире.

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

Чтобы использовать Zenity, вы можете сделать что-то вроде следующего (это показывает синтаксис Bash):

function findUserDate
{
    declare -gr USER_DATE="$(
        zenity --entry --title='Date query' --text='What date would you like?' --entry-text="$( date +%F )"
                            )"
    [[ -z ${USER_DATE} ]] && exit 2
    echo "You chose ${USER_DATE}"
}
0
18.03.2021, 22:48

Как насчет этого:

read -p "What date would you like (Press enter for today)? " user_date
date="${user_date:-$(date +%Y%m%d)}"

echo "Chosen date is: $date"

Фактический формат даты(%Y%m%d)зависит от вас.

1
18.03.2021, 22:48

Теги

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