コマンド練習のサンプル第三回目?
何気にテストしてると「あ~サーバの現在時刻あと40秒、あと32秒...」ってdateコマンド連打する事ありますよね。(いや余りないかも。)ただ自作コマンドって作れるようになると便利なのでサンプルだと思って読んでもらえればの第3弾。
過去の自作コマンドやコマンドのサンプルは以下
企業で使われている文字の一覧を作成してみた(文字列変換処理のサンプル)
tailコマンドとかでも強調表示する自作コマンド
結論(今回のサンプル)
#!/usr/bin/env bash
while true; do
printf "\r`date "$@"`だよ!!"
sleep 1
done
このコマンドを/usr/local/bin/datef って名前で保存して、chmod +x datefって実行権限付与。
$ ll /usr/local/bin/datef
-rwxr-xr-x 1 root root 75 7月 4 10:32 /usr/local/bin/datef
こんな感じにして使いましょう。
使った時のサンプル
$ datef "+%Y%m%d-%H%M%S" ←dateコマンドのOptionは全て使えます。無しでもOK
20220704-104241だよ!! ←ここの行が更新され続ける。
コマンドの解説
while true : どこにもbreakがないので永遠ループですね!tail -f コマンド的な雰囲気で作ったdatefコマンドなのでCtrl+Cとかで終了してください。
printf "\rxxxxxxx" : printf は頭にある\rこれがミソですね。後で解説
sleep 1 : 1秒待ってね。
\rとは何か?
rはリターンの略で、正式にはキャリッジリターンと言われています。
バイオハザードとかでしか私は見た事ないですが、タイポライターという昔の手紙を印刷する機械の入力カーソルを先頭に「ガチャコンッ!」って戻す作業をパソコンの世界になっても使い続けてるんですね。なんか素敵。
つまり printf "\rhoge"
とすれば、カーソルを先頭に移動してhogeと入力せよ!という意味になる。
例題でいうなら、 printf "ho\rge"
とすればどうなるか? hoと入力して先頭に移動してgeと入力するので画面上にはgeしか残りません。
同様に printf "1234\r**"
とすればどうか?答えは"**34"
私のサンプルが「だよ!!」をつけているのもdateの出力文字数が0埋めの関係で崩れるのを心配してつけていたりします。
ではでは!