痛チャリ準備
痛チャリ用にアキワールドのリアホイールカバーを買ってみたので、
まだプリントものは用意できてないけど、とりあえず付けてみたらどんな感じになるのかなぁと、転がってるR500に付けてみました。
こんなかんじ。
プラスチックみたいなのを想像してたけど、ベコンベコンなるブリスターパックみたいなヤツでした。
フィギュアとか入ってる透明のアレね。
左右完全に覆っちゃうので空気どうするんだろう、と思ったけどちゃんと穴があるから大丈夫!
と思ったけど、片方空いてるだけじゃ空気入れの口が入らん・・。
まぁカバー装着したまま空気入れるのは諦めかな・・。
しかし、これ、重い!!
まだスプロケも付けて無い状態なのにわりと重い!
まぁ、スプロケもいちいち付け直すのも面倒だしそんな高いものでもないから、コッチ専用に買ってもいいと思うけど、やっぱり重量がなぁ・・。
タイヤもまぁLUGANOよりもイイヤツ買うとしても・・・ウーンウーン・・・。
ここは痛用に・・リアホイールだけでも・・・ゴクリ・・・。
まだプリントものは用意できてないけど、とりあえず付けてみたらどんな感じになるのかなぁと、転がってるR500に付けてみました。
こんなかんじ。
プラスチックみたいなのを想像してたけど、ベコンベコンなるブリスターパックみたいなヤツでした。
フィギュアとか入ってる透明のアレね。
左右完全に覆っちゃうので空気どうするんだろう、と思ったけどちゃんと穴があるから大丈夫!
と思ったけど、片方空いてるだけじゃ空気入れの口が入らん・・。
まぁカバー装着したまま空気入れるのは諦めかな・・。
しかし、これ、重い!!
まだスプロケも付けて無い状態なのにわりと重い!
まぁ、スプロケもいちいち付け直すのも面倒だしそんな高いものでもないから、コッチ専用に買ってもいいと思うけど、やっぱり重量がなぁ・・。
タイヤもまぁLUGANOよりもイイヤツ買うとしても・・・ウーンウーン・・・。
ここは痛用に・・リアホイールだけでも・・・ゴクリ・・・。
ジャージコレクション
あれやこれやとジャージ買っていたらいろいろ増えてしまったので晒しage
・唯さん
赤い!
・あずにゃん
緑!・・あずにゃんってイメージカラー緑だったのか?
・澪先輩
やったー青い!
と、いうわけでもう暖かくなったし、私はこの前アマゾンでポチったキャノンデールジャージを着ていきます。
・・いや、ホント、通勤で痛ジャージ着てやろうかヒャッハー!みたいな勢いで買ったんですが、
試着してみたら想像以上に痛くて痛くて、視線を無視すれば大丈夫だ!とかそういうレベルじゃなかったのよ。いやホント。部屋の中で着ているだけで痛い。精神が痛い。なんかいろいろとゴメンナサイなかんじ。
あ、そういえばイカ娘ジャージもこの前注文したな!ヒャッハー!!
・唯さん
赤い!
・あずにゃん
緑!・・あずにゃんってイメージカラー緑だったのか?
・澪先輩
やったー青い!
と、いうわけでもう暖かくなったし、私はこの前アマゾンでポチったキャノンデールジャージを着ていきます。
・・いや、ホント、通勤で痛ジャージ着てやろうかヒャッハー!みたいな勢いで買ったんですが、
試着してみたら想像以上に痛くて痛くて、視線を無視すれば大丈夫だ!とかそういうレベルじゃなかったのよ。いやホント。部屋の中で着ているだけで痛い。精神が痛い。なんかいろいろとゴメンナサイなかんじ。
あ、そういえばイカ娘ジャージもこの前注文したな!ヒャッハー!!
標準ストリームを理解して快適bashライフを送ろう
なんか喋って、って言われたのでメモ用に。
間違っていたら申し訳ない!
■ 標準ストリームとはなんぞ
これです。
ババーン!キャー!
■ 標準入力 (stdin)
入力です。
ターミナル上では、キーボードからの入力が標準入力に該当すると思います。シェル先生がそれを解釈して画面上に表示しています。
プログラム上では、yes/noの入力待ちをするプログラムとかも作ればありますが、基本的にはリダイレクト等で渡された文字列とかが使われます。
たとえばphpで標準入力からのcsvデータを一行ずつ解釈してなんかするプログラムを作るなら、
プログラム等で利用する場合は、最後の改行コードも入ってくるのでtrim関数とか使うと良いです。
ちなみにphpでは「STDIN」というすでに標準入力がオープンされたファイルハンドラが定義されてます。
■ 標準出力 (stdout)
そこの見ている黒い画面です。
あんまり意識しないでechoとかprintfとか使ってますが、紐解くと「文字列を標準出力へ出力する」みたいなものだと思います。たぶん。きっと。
これも一応phpではSTDOUTとしてオープンされたファイルハンドラがありますが、普段はechoとかprintfとかするでしょうし、あんまり意識して使うことは少ないでしょう。
■ 標準エラー出力 (stderr)
そこの見ている黒い画面です。でも標準出力とは違います。
主にエラーメッセージ等を出しましょう。
普段は標準出力とあんまり大差ないですが、後述のリダイレクトとかと組み合わせると非常に便利になります。
phpではSTDERRです。
一応スクリプトとしてphpを実行した場合はerror_log()関数が標準エラーに出力してくれます。
■ リダイレクト (入力する方)
「小なり記号」を使うことで指定のファイルの内容を標準入力としてプログラムに渡すことができます。
ちなみに不等号の大なり・小なりが、どっちがどっちかわからなくなったら「左が基準」と覚えておけばOKです。
< → 左の方がが少ない → 「小なり」 → 「less than」 → -lt とか < とか
> → 左が方が多い → 「大なり」 → 「greater than」 → -gt とか > とか
でも、リダイレクトの場合は矢印みたいなイメージだと思います。
■ リダイレクト (出力する方)
「大なり記号」を使うと、出力をファイルへ書き込むことができます。
極端に言うと、lsコマンドの結果とかもリダイレクトを使えばファイルに落としたりできます。
上記の例はファイルの上書きモードです。リダイレクトするファイルが存在していてもそのファイルを上書きします。
実際には、コマンドを実行した瞬間にファイルを0バイトにするので、たとえばコマンドが失敗した場合でも出力先のファイルの内容は消えてしまうのでご注意を。
追記モードにするときは不等号を二重に。
■ リダイレクト両方使おう
リダイレクトの入力・出力は組み合わせることができて、
この場合はtestdata.csvを入力として処理した結果をresultdata.txtに吐き出しています。
こうする利点としては、
・スクリプトの中でいちいちファイルのオープン・クローズ・書き込み等をしなくて済む
・好きなファイルを入出力に使える(スクリプト内部でやろうとするとファイル名も全部書く必要がある)
・楽なのよ
とかがあると思います。とにかく楽なのよ。便利なのよ。パッとファイル弄るならシェルがいいの。
■ 標準出力と標準エラー出力
リダイレクトで吐き出したとき、デフォルトでは標準出力を使います。
そのままですと、たとえばスクリプト内で何かしらエラー出力を出した場合、
でも標準出力へ出力されたものに関してはちゃんとファイルに書き込まれています。画面に出てきたエラーに関してはファイルには入ってません。
ではエラーも全部ファイルに落としたい場合ですが、
1とか2っていうのはファイルディスクリプタといって・・・細かいことは説明できません!
標準出力が1で標準エラー出力が2です。
そういうものです。
何も書かないときは1が省略されていたってことで。
ちなみに標準入力が0です。
上記の例ですと、
「標準エラー出力を標準出力にリダイレクトする」=「標準エラー出力も標準出力へ出力する」
みたいなかんじです。
普段使いで便利な場面としては、コマンド実行結果のエラーを消したい場合とか。
/dev/nullっていうのはスペシャルファイル(デバイスファイル)っていう特殊なファイルで、null先生は、受け取ったものを全部破棄します。ここから読み込むとEOFを返します。知ってるとちょっと便利。
■ パイプ
普段何食わぬ顔でパイプ使いまくってますが、これは実際には「手前のスクリプトの標準出力を次のスクリプトの標準入力へ渡す」っていう動作をしています。
sedやwc、sort、awk・・などの入力データを整形する系のコマンドは、引数でファイル名を渡すとそちらを処理しますが、それが無いときは標準入力を処理してくれる賢いヤツです。
標準エラー出力もパイプで次のスクリプトへ渡したかったら 2%>&1 を使いましょう。
■ 応用編
・crontabのスクリプトを無駄なエラー出ないようにする。
・標準出力と標準エラー出力を別々のファイルに出力する。
・標準出力と標準エラー出力を入れ替える(なんのこっちゃ)。
3番以降も仮想的に使うことができます。
・標準入力を1行ずつ何かしらの処理をする、っていうのをbashだけで実現する。
■ まとめ
ちょいちょいファイル内容を整形したりなんだりするのはシェル便利だから!使ってみようYO!
間違っていたら申し訳ない!
■ 標準ストリームとはなんぞ
これです。
ババーン!キャー!
■ 標準入力 (stdin)
入力です。
ターミナル上では、キーボードからの入力が標準入力に該当すると思います。シェル先生がそれを解釈して画面上に表示しています。
プログラム上では、yes/noの入力待ちをするプログラムとかも作ればありますが、基本的にはリダイレクト等で渡された文字列とかが使われます。
たとえばphpで標準入力からのcsvデータを一行ずつ解釈してなんかするプログラムを作るなら、
while($line=fgets(STDIN,1024))
{
$datas=explode(',',trim($line));
・・・なんか処理・・・
}
とか。{
$datas=explode(',',trim($line));
・・・なんか処理・・・
}
プログラム等で利用する場合は、最後の改行コードも入ってくるのでtrim関数とか使うと良いです。
ちなみにphpでは「STDIN」というすでに標準入力がオープンされたファイルハンドラが定義されてます。
■ 標準出力 (stdout)
そこの見ている黒い画面です。
あんまり意識しないでechoとかprintfとか使ってますが、紐解くと「文字列を標準出力へ出力する」みたいなものだと思います。たぶん。きっと。
これも一応phpではSTDOUTとしてオープンされたファイルハンドラがありますが、普段はechoとかprintfとかするでしょうし、あんまり意識して使うことは少ないでしょう。
■ 標準エラー出力 (stderr)
そこの見ている黒い画面です。でも標準出力とは違います。
主にエラーメッセージ等を出しましょう。
普段は標準出力とあんまり大差ないですが、後述のリダイレクトとかと組み合わせると非常に便利になります。
phpではSTDERRです。
fputs(STDERR, "Wow! Error!!\n");
とか書いたらいいと思います。一応スクリプトとしてphpを実行した場合はerror_log()関数が標準エラーに出力してくれます。
■ リダイレクト (入力する方)
「小なり記号」を使うことで指定のファイルの内容を標準入力としてプログラムに渡すことができます。
~$ ./nullpo.php < testdata.csv
こうすると上の方にあったwhileのプログラムでtestdata.csvの内容をなんかするスクリプトが作れます。ちなみに不等号の大なり・小なりが、どっちがどっちかわからなくなったら「左が基準」と覚えておけばOKです。
< → 左の方がが少ない → 「小なり」 → 「less than」 → -lt とか < とか
> → 左が方が多い → 「大なり」 → 「greater than」 → -gt とか > とか
でも、リダイレクトの場合は矢印みたいなイメージだと思います。
■ リダイレクト (出力する方)
「大なり記号」を使うと、出力をファイルへ書き込むことができます。
~$ ./nullpot.sh > testdataResult.csv
これはnullpot.shを実行した出力をファイルに書き出しています。極端に言うと、lsコマンドの結果とかもリダイレクトを使えばファイルに落としたりできます。
上記の例はファイルの上書きモードです。リダイレクトするファイルが存在していてもそのファイルを上書きします。
実際には、コマンドを実行した瞬間にファイルを0バイトにするので、たとえばコマンドが失敗した場合でも出力先のファイルの内容は消えてしまうのでご注意を。
追記モードにするときは不等号を二重に。
~$ ./nullpot.sh >> testdataResult.csv
こうすると、すでにファイルがあったら末尾に追記してくれます。ファイルが無かったら新規作成してくれます。ログ出力とかに便利。■ リダイレクト両方使おう
リダイレクトの入力・出力は組み合わせることができて、
~$ ./nullpo.php < testdata.csv > resultdata.txt
なんてのも可能です。この場合はtestdata.csvを入力として処理した結果をresultdata.txtに吐き出しています。
こうする利点としては、
・スクリプトの中でいちいちファイルのオープン・クローズ・書き込み等をしなくて済む
・好きなファイルを入出力に使える(スクリプト内部でやろうとするとファイル名も全部書く必要がある)
・楽なのよ
とかがあると思います。とにかく楽なのよ。便利なのよ。パッとファイル弄るならシェルがいいの。
■ 標準出力と標準エラー出力
リダイレクトで吐き出したとき、デフォルトでは標準出力を使います。
そのままですと、たとえばスクリプト内で何かしらエラー出力を出した場合、
~$ ./nullpot.sh > testdataResult.csv
ERROR!
DATA ERROR! (line:20)
みたいな感じになります。ERROR!
DATA ERROR! (line:20)
でも標準出力へ出力されたものに関してはちゃんとファイルに書き込まれています。画面に出てきたエラーに関してはファイルには入ってません。
ではエラーも全部ファイルに落としたい場合ですが、
~$ ./nullpot.sh > testdataResult.csv 2>&1
ってやるとできます。(bashの場合)1とか2っていうのはファイルディスクリプタといって・・・細かいことは説明できません!
標準出力が1で標準エラー出力が2です。
そういうものです。
何も書かないときは1が省略されていたってことで。
ちなみに標準入力が0です。
上記の例ですと、
「標準エラー出力を標準出力にリダイレクトする」=「標準エラー出力も標準出力へ出力する」
みたいなかんじです。
普段使いで便利な場面としては、コマンド実行結果のエラーを消したい場合とか。
/var/log$ find . -type d
./httpd
:
find: ./squid: Permission denied
:
find: ./audit: Permission denied
:
たとえばですが、findしたとき読み込み権限がないディレクトリはこんなふうにエラーが出ますが、それがウザかったら./httpd
:
find: ./squid: Permission denied
:
find: ./audit: Permission denied
:
/var/log$ find . -type d 2>/dev/null
ってやるとエラー出力だけ消せます。/dev/nullっていうのはスペシャルファイル(デバイスファイル)っていう特殊なファイルで、null先生は、受け取ったものを全部破棄します。ここから読み込むとEOFを返します。知ってるとちょっと便利。
■ パイプ
普段何食わぬ顔でパイプ使いまくってますが、これは実際には「手前のスクリプトの標準出力を次のスクリプトの標準入力へ渡す」っていう動作をしています。
~$ ./nullpot.sh | sed "s/test/hoge/g" | sort | nkf -w >result.data
スクリプトの結果をさらにもうちょっと手を加えたいな、っていうのがあったらパイプでさらに別コマンドとか通すこともできます。sedやwc、sort、awk・・などの入力データを整形する系のコマンドは、引数でファイル名を渡すとそちらを処理しますが、それが無いときは標準入力を処理してくれる賢いヤツです。
標準エラー出力もパイプで次のスクリプトへ渡したかったら 2%>&1 を使いましょう。
■ 応用編
・crontabのスクリプトを無駄なエラー出ないようにする。
# crontab for nullpo
0 * * * * /home/nullpo/bin/monitoring.sh >/dev/null 2>&1
リダイレクト等しないと、cron実行時に何かしら出力された場合に、全部メール飛んできますので、それを無視したい場合はこんなかんじに。0 * * * * /home/nullpo/bin/monitoring.sh >/dev/null 2>&1
・標準出力と標準エラー出力を別々のファイルに出力する。
~$ ./nullpot.sh >result.dat 2>>error.log
・標準出力と標準エラー出力を入れ替える(なんのこっちゃ)。
~$ ./nullpot.sh 3>&1 1>&2 2>&3
順番が重要。3番以降も仮想的に使うことができます。
・標準入力を1行ずつ何かしらの処理をする、っていうのをbashだけで実現する。
~$ while read DATA; do echo $DATA;done <data.csv
もしくは~$ cat data.csv | while read DATA; do echo $DATA;done
さらっと1行シェルを書けるとカッコイイ!■ まとめ
ちょいちょいファイル内容を整形したりなんだりするのはシェル便利だから!使ってみようYO!






