bash_ リダイレクト

July 30, 2021

exec でリダイレクト先を指定する

ファイルを分ける

exec 2>> stderr.log 1>> stdout.log

ファイルを一緒にする

exec >> stdouterr.log 2>&1

リダイレクト 入力と出力 - UNIX & Linux コマンド・シェルスクリプト リファレンス

”{}” のグループをリダイレクト

{
echo "1. hogehoge"
echo "2. fugafuga"
echo "3. foofoo"
echo "4. barbar"
} >>file

ヒアドキュメントをリダイレクト

cat <<__END_OF_MESSAGE__ >>file
1. hogehoge
2. fugafuga
3. foofoo
4. barbar
__END_OF_MESSAGE__

for 文のブロックをリダイレクト

for i in `seq 1 10`; do
  echo "number $i"
done >>file

if [ -f "$str" ]; then
  ls "fugafuga"
  else
  echo "FUGAFUGA"
fi >>file

case "$str" in
"hoge" ) ls "hogehoge" ;;
"fuga" ) cat "fugafuga" ;;
* ) echo "NG..." ;;
esac >>file

関数全体をリダイレクト

func()
{
[ $#- ne 3 ] && return 1

echo "NO MESSAGE..."
echo "NO ERROR MESSAGE..." 1>&2

grep -v "$1" $2 >$3
} >/dev/null 2>&1

複数コマンドの出力をまとめてパイプに流す

複数コマンドの出力をまとめてパイプに流し込みたいときは、 ”{}” によるコマンドのグルーピング機能を利用する。

{ echo "hogehoge"; echo "fugafuga"; } | wc -l

→ ”{}” で複数コマンドをグループ化することにより出力を一つにまとめる。

コマンドの数が多い場合は、次のように記述すると可読性が高くなる。

{
date
echo "hoge"
echo "HOGE"
echo "fuga"
echo "FUGA"
} | tee -a file

Profile picture

Written by tin-machine 技術関連のメモ Twitter