FC2ブログ
ブログパーツ アクセスランキング
インフラ情報まとめ
アクセスランキング
サーバー、クライアント関係の構築、運用等のまとめ書きです。旧名 ほぷぅ(。・ω・)ノPCまとめ

シェル リダイレクションの使用に関する注意




にほんブログ村 IT技術ブログ IT技術メモへ

シェル リダイレクションの使用に関する注意


コマンドにリダイレクションを使用する場合、それぞれのコマンドごとに指定しなければなりません。
あるコマンドに対するリダイレクトは他のコマンドには影響を与えません。


command1 2>ErrorFile1 | command2 2>ErrorFile2


command1のエラーを書くファイルと、command2のエラーを書くファイルは別物であり、
コマンドごとにリダイレクトしなければいけません。


注意
標準入力と標準出力を同じファイルにリダイレクトしてはいけません。
同時に指定すると読み込むファイルが不当にものになります。


echo "foo" > file
sed 's/foo/bar/' < file > file #入力と出力が同じファイルではいけない
cat file


この例では、fileというファイルにfooというデータを書き込みます。
このファイルのfooという文字列をsedコマンドでbarという文字列に変え、そのまま同じfileに書き込もうとしています。


結果はfileの中にはなにも残りません。fileからデータを読み込む前に、出力ファイルにfileを指定したため、中身をクリアしてしまったからです。


パイプを使った使用例

DEVICE=lp1
# DEVICE=lp2
# DEVICE=lp3
pr $* |
case $DEVICE in
lp1) rsh host1 lp -dlp1 ;;
lp2) rsh host2 lp -dlp2 ;;
lp3) rsh host3 lp -dlp3 ;;
esac

この例は、ネットワーク上のプリンタのどれかを使ってファイルをプリントするためのシェルスクリプトの一部抜粋例みたいなイメージのものです。どのプリンタが使用可能かによって書き換えるようにします。


ここではデフォルトでは lp1を使用していますが、コメントの行を変えることによりlp2やlp3に割り当てを変えることもできます。


コマンド行に入力されたもの($*)を受け取ってprコマンドで処理し、結果を標準出力に出します。
これはパイプによってcase文の中で実行されるコマンドの標準入力でもあるのです。

変数DEVICEの値によってこの3つのパターンのうちどれかが実行されます。
ここでは直接リダイレクション記号を使って処理させているわけではありませんが、こういう考え方で処理させます。


次のようなwhile文のネストもあります。

while read FILENAME
do
while read LINE
do
..........
done < $FILENAME
done < file


外側のwhileループはfileから1行ずつ読み込んで処理します。内側のループは、
その読み込んだ行をまたさらに処理します。

標準入力をファイルから読み込ませているとき、実際の端末から何らかの入力をさせたい場合には、
その使っている端末を意味する /dev/tty ファイルをリダイレクトさせます。


ttyというコマンドは、現在使用している端末を教えてくれるので、この結果使って
直接端末からの入力をリダイレクトさせることができます。

TTY='tty' #TTYには /dev/ttyp3といった「今使っている端末デバイス」が入る


while read FILENAME
do
echo "Do you want to purge $FILENAME ?"
read ANSWER < $TTY
.....
done < file


こうすることによって、標準入力をファイルから利用している場合でも、端末からのデータ入力が可能となります。


関連記事







テーマ:UNIX/Linux - ジャンル:コンピュータ


  1. 2012/12/13(木) 19:30:31|
  2. Linux/Unix シェル
  3. | トラックバック:0

トラックバック

トラックバック URL
http://pcmemorin.blog.fc2.com/tb.php/461-3f506c11
この記事にトラックバックする(FC2ブログユーザー)


サイトマップ・お奨め記事

CentOS7 まとめ
Ubuntu14 まとめ
Ubuntu12用無線アダプタ紹介
Ubuntu12 まとめ
Server 2008R2 まとめ
SCCM2012R2 まとめ
Windows10 アップグレード
Windows7 まとめ
Windows7 SSD まとめ
Windows8 まとめ
EaseUS Todo Backup Server
Linux Destbision まとめ
Linuxコマンド関連Index
Zorin8.1まとめ
Fedora17まとめ
Fedora15まとめ
VB Script まとめ
USB3.0で快適バックアップ
リンク集・メール


スポンサードリンク


リンク


サイト登録Paseon

・はじめての自宅サーバ構築 - Fedora/CentOS -

・Fedoraで自宅サーバー構築

・CentOSで自宅サーバー構築

・ぼくんちのTV別館

・ネットセキュリティブログ

・まとめ横丁

・オールフリーソフト


相互リンク更新情報
BookMark
GPUベンチマーク(ドスパラ)
VMware OS仮想化
EaseUS
Fedora releases ISO
【Http外部からの表示確認】
ポートスキャンチェック
IPA情報処理推進機構
無料DNS ieServer
無料DNS-MyDNS
yahooログイン履歴チェック
メール不正中継拒否テスト
Fedora Project
allbootdisks
Edy Viewer
ESXi動作実績ハードウェア@Wiki
IEEE Standards

---ライセンス認証解除系リンク---
ShadowProtect Personal
.NET製品
弥生



--所有サーバーWiki--
NEC Express5800/S70
HP ProLiant ML110G5
PRIMERGY TX100 S3

このブログをリンクに追加する

カテゴリ

Linux (45)
Linux-CentOS7 (70)
Linux-Ubuntu14.04 (87)
Linux-Ubuntu12.04 (76)
Linux-Zorin8.1 (36)
Linux-Fedoras.soft (19)
Linux-Fedora18 (11)
Linux-Fedora17 (39)
Linux-Fedora15 (60)
Linux-Fedora11 (36)
Linux-Fedora16 (1)
Linux-Security (3)
Linux/Unix シェル (38)
Linux Distribution (53)
仮想OS (31)
Windows Server 2008 (254)
Windows Server 2012 (30)
Windows Server コマンド (39)
Windows Server アプリ (14)
Windows (40)
Windows 10 (3)
Windows 7 (59)
Windows 8 (257)
Windowsアプリ (23)
Windows 8 アプリ (29)
Windows レジストリ (6)
Windows BAT (17)
ネットワーク (5)
MySQL (1)
ニュース (8)
ハードウェア (11)
Windows VBScript-Basp21 (1)
VBScript (29)
Windows Vista (1)
Windows グループポリシー (3)
Security (6)
未分類 (4)
クールなアイテムまとめ (5)
Game (1)
PowerShell (4)


Linux ブログランキングへ

カテゴリ2

SCCM Backup 遠隔操作 VirtualBox FeliCaポート/パソリ ESXi 

カウンター

RSSリンクの表示

アクセスランキング

[ジャンルランキング]
コンピュータ
101位
アクセスランキングを見る>>

[サブジャンルランキング]
その他
19位
アクセスランキングを見る>>



フィードメーター - ほぷぅ(。・ω・) ノ PCまとめ Linux,Win,自宅サ..


Windows ブログランキングへ

にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

 



Linux ブログランキングへ





<%plugin_third_title>

<%plugin_third_description>

<%plugin_third_content>

<%plugin_third_description2>