シェルスクリプト - 質問を反響し、答えを読んでみませんか?

シェルスクリプト - 質問を反響し、答えを読んでみませんか?

ユーザーに入力したい日付を尋ねたいです。その後、応答を読み、入力した内容に従ってディレクトリに移動します。

ほとんど今日の日付になると思います。できますか?

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}"
}

関連情報