Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック問題112

問題112 日付の取得

wslとlinuxの違いが浮き彫りになった気がする。/sys/ や /dev/ 以下の中身がlinuxとはかなり違った構成になっていることを知った。あるはずのものがないということが本当によくある。今回の問題はdateコマンドを使わないで日付と日時を取得する問題だったがあてにしていたファイルが存在しないので解答のしようがなかった。最終章ではlinuxの中身に触れる問題がメインとなるようなので何か対策をしないといけない。

解答例は

echo "$(cat /sys/class/rtc/rtc0/date)" "$(cat /sys/class/rtc/etc0/time)"

となる。

何回使ってもコマンド置換とプロセス置換の違いがわからないのでここでまとめておく。コマンド置換は$(コマンド) と表記するもので、これはその場で中身のコマンドの出力がただの文字列に置き換わるふるまいをする。ファイルは関係ないのでコマンドの引数のところに書いてもたいていしょうがない。書いたところで出力結果がファイル名と解釈され、そんなものはないとエラーを吐かれるのが関の山だ。ただしechoの引数はただの文字列なので今回は意味がある。一方でプロセス置換は<(コマンド)と表記するもので、これはコマンドの出力結果を中身として持つファイルを生成する。なのでプロセス置換はコマンドの引数の部分に書くことができる。