쉘 스크립트 - 질문을 반향하고 응답을 읽으시겠습니까?

쉘 스크립트 - 질문을 반향하고 응답을 읽으시겠습니까?

사용자에게 입력하려는 날짜를 묻고 싶습니다. 그러면 응답을 읽은 다음 입력한 내용에 따라 디렉토리로 이동합니다.

대부분 오늘 날짜가 될 것 같아요. 할 수 있을까요?

echo "What date would you like?"
read date

그런 다음 현재 날짜를 명령줄에 출력하여 Enter 키를 누르거나 백스페이스하여 지난 달로 변경할 수 있습니다. 예를 들어?

답변1

쉘 사용 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

)

varedediable 에 내장된 명령입니다 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

모두는 라인 편집기에 현재 날짜를 미리 설정하고 이를 편집할 수 있도록 합니다(emacs 스타일 키 바인딩 사용, 스타일을 선호하는 경우 emacs/ default로 교체 ).vivi

여기 %F(의 약어 )는 국제 형식으로 날짜를 제공하는 %Y-%m-%d표준 지침입니다 . 자세한 내용은 매뉴얼 페이지를 참조하세요.strftime()YYYY-MM-DDstrftime(3)

여러 줄 변수를 편집하려는 경우 zsh및 접근 방식 만 제대로 작동합니다.fish

답변2

이건 어때:

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)은 사용자가 결정합니다.

답변3

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'은 의미하므로 로케일에 주의하세요. 미국(2021년 3월 1일)에서는 다른 지역(2021년 1월 3일)과 다릅니다. YYYY-MM-DD 형식을 사용하는 것은 전 세계 어디에서나 작동할 가능성이 높습니다.

대안으로, GUI를 선호한다면 시스템에 내장되어 있거나 표준 저장소에서 사용할 수 있는 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}"
}

관련 정보