標準入力の復・活!!

どうもです。


どうやら,やはりというか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っちゃったら
どうするんだろうか?
ちょっと考えたけど,思いつかん。
ファイルへリダイレクトしても中身を見られない。
うーん,詰みか? いや,方法はあるだろう。
なんか,シェルの状態をリセットするみたいなコマンドがありそうな予感。

まとめ

というわけで,楽しくシェルスクリプトというかシェルのお勉強をしております。

テキスト

これを使っています。
実は数年前に一度読んだはずなのですが,なにこの初めて読む感は・・・,
な状態でして。
訳書ですが,丁寧に訳されていると感じます。手抜き感がないですね。