標準入力の復・活!!
どうもです。
どうやら,やはりというか2日連続の偏頭痛という悲劇に見舞われていたようです,ボク。
日頃の行いが悪いからでしょう。すみません。すみません。うまれてきてすみません。
シェルスクリプトの勉強をしています。
思うところがあって。
リダイレクトで遊んでいました。
あっ。標準出力を/dev/nullっちゃったよ。どうしよ〜。ドラえも〜ん。
% exec 1> /dev/null
/dev/null へのリダイレクトはよく使われると思うのですが,
exec コマンドを使って,カレントシェルの標準出力を
/dev/null ってみたらどうなるだろうと思ってやってみた。
しばらく帰ってこられなくなった。
頑張って!
あいあい〜。
stdoutが実はキーワードなんじゃねとか思って,
/dev/stdout とかやってみたけどダメだった。
でも,色々やっていたら,
なぜか,stdoutというファイルがカレントディレクトリに作成された。
これをヒントに,標準出力は生きていると確信。
ま,そりゃファイルディスクリプタ閉じてねぇんだから,どっかで開いてるわな。
ほいで解決した。
皆さんならどうされますか?
たぶん方法は1つではないと思うので聞いてみたテスト。
ワタシがたどり着いたのは,ttyコマンドを使用する方法。
% exec 1>/dev/null # あっ。 % tty # 何も表示されない。そりゃそうだ。 % tty 1>&2 # ttyの結果を標準エラー出力へリダイレクト /dev/tty4 # よし。この情報がゲットできればあとは簡単。 % exec 1>/dev/tty4 % echo "Hi" Hi # おかえり〜。標準出力〜。
これ書いていて思ったのだが,標準エラー出力も/dev/nullっちゃったら
どうするんだろうか?
ちょっと考えたけど,思いつかん。
ファイルへリダイレクトしても中身を見られない。
うーん,詰みか? いや,方法はあるだろう。
なんか,シェルの状態をリセットするみたいなコマンドがありそうな予感。
まとめ
というわけで,楽しくシェルスクリプトというかシェルのお勉強をしております。
テキスト
これを使っています。
実は数年前に一度読んだはずなのですが,なにこの初めて読む感は・・・,
な状態でして。
訳書ですが,丁寧に訳されていると感じます。手抜き感がないですね。