ユーザーに入力したい日付を尋ねたいです。その後、応答を読み、入力した内容に従ってディレクトリに移動します。
ほとんど今日の日付になると思います。できますか?
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
)
vared
ed
iable に組み込まれたコマンドです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
に置き換えます)。vi
vi
ここ%F
(の略)は、国際形式で日付を提供する標準的な%Y-%m-%d
ガイドラインです。詳しくはマニュアルページをご覧ください。strftime()
YYYY-MM-DD
strftime(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}"
}