HaikikyouのIT関連技術メモ

プロセス置換

  • >(list)は、ファイルへの出力がlistへの入力となる。
  • <(list)は、listの出力がファイルへの入力となる。

サンプル lsの結果で*.shファイルのみを出力

  1. a=
  2. while IFS= read -r line
  3. do
  4.   a="$line:$a"
  5. done < <(ls . | grep -e "\.sh$")

サンプル a.txtとb.txtをdiffの入力ファイルとして比較

  1. diff -u <(cat a.txt) <(cat b.txt)

サンプル

  1. exec 3>&1
  2. exec > >(while read line; do echo "$(date): $line";done)
  3.  
  4. echo "hello"
  5. echo "bar"
  6.  
  7. exec 1>&3 3>&-

execを使った入出力のリダイレクト

execコマンドでリダイレクトだけを指定すると、シェル自身のファイル記述子とデバイスの対応を変更することができる。

execを使った入力のリダイレクト
  1. # copy stdin to descriptor 3
  2. exec 3<&0
  3.  
  4. # redirect stdin to test.c
  5. exec < test.c
  6.  
  7. # read a line from test.c
  8. read line
  9. echo $line
  10.  
  11. # restore stdin and close descriptor 3
  12. exec 0<&3 3<&-
execを使った出力のリダイレクト
  1. # save stdout as descriptor 3
  2. exec 3>&1
  3.  
  4. exec > test.txt
  5.  
  6. echo "this message is written into the test.txt"
  7.  
  8. # restore stdout and close descriptor 3
  9. exec 1>&3 3>&-

特定の式や文の出力をまとめてリダイレクトしたい場合は、ブレースを使った複合コマンドでも処理できる。

複合コマンドの出力をファイルにリダイレクトする

  1. #!/usr/bin/env bash
  2.  
  3. # 複合コマンド
  4. {
  5.   # stdout.txtに出力
  6.   echo "this message is written into stdout.txt"
  7.   # stderr.txtに出力
  8.   echo "this message is written into stderr.txt" >&2
  9. } > stdout.txt 2> stderr.txt

参考リンク

[PR]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-03-20 (火) 00:06:21 (243d)
GO TO TOP