Bashシェルスクリプト上での `read` コマンドの便利な使い方いろいろ
Bashシェルスクリプトで標準入力からの情報を取り扱う read
コマンドと declare
コマンドを組み合わせると便利 で read
コマンドについて触れたついでに、 read
コマンドの便利な使い方にも触れておきます。
検証環境
変数をバラす
read
コマンドは 区切り文字を元に標準入力からのデータをばらして変数に投入してくれる という機能があるので、それを上手に使うと変数をバラすのが楽になります。
例)年、月、日を別の変数に代入する
date
コマンドを3回実行すれば取得できます。
date
コマンドの実行結果を read
コマンドに 食わせることで同じことができます。
ちなみに以下のコマンドではうまくいきません。
パイプで繋いだコマンドは、現在実行中のBashプロセスの子プロセスとなります。
上記例では Y
/ M
/ D
のそれぞれの変数は、子プロセス終了とともに破棄されてしまうので、後続処理では参照できません。
ログにタイムスタンプを表示
Linuxサーバ上でログ監視やリソース監視をすることがあります。
tail -f
を使って監視を行う場合に、タイムスタンプが出力されていない場合があります。
(データが正しく連携されてきたかな?みたいなのを眺めてるときに、データそのものに書き込み時間のような情報がない場合もあります。)
以下のようにすれば、 tail -f
で逐次流れてきたデータに対して、タイムスタンプを付与できます。
(本当は書き込みタイミングとの時間のずれがあるが、ズレが許容できるなら便利な方法)
いきなり出てきた変数 REAPLY
について。read
コマンドが引数無しで呼び出された場合、変数 REPLY
に値が代入されます。
メッセージを表示し、ユーザの入力を促す
インタラクティブなスクリプトを書くときに、 read -p
コマンドでメッセージを表示し入力を促すことができます。
入力された合言葉が見えるのはさすがに、という場合もあります。read -s -p
コマンドで入力された内容が表示されないようにできます。
echo
コマンドを追加しているのは、入力情報がエコーされないので、入力最後の改行が表示されず、プロンプトがおかしな場所に表示されるのを回避するため。
ディスカッション
コメント一覧
まだ、コメントがありません