Loose-Info.com
Last Update 2022/09/03
TOP - 各種テスト - bash - リダイレクト

展開


テスト項目

(01) 入力・出力のリダイレクト

(02) リダイレクト出力の追加

(03) 標準出力と標準エラー出力のリダイレクト

(04) ヒアドキュメント

(05) ヒアストリング


(01) 入力・出力のリダイレクト


サンプルコード
sample.c
#include <stdio.h> int main(int argc, char *argv[]) { char buf[100]; if (argc > 1) { /* 引数有りの場合、引数の文字列を標準出力と標準エラーへ出力 */ fprintf(stdout, "argv-->stdout --- %s\n", argv[1]); fprintf(stderr, "argv-->stderr --- %s\n", argv[1]); } else { /* 引数無しの場合、標準入力の入力値を標準出力と標準エラーへ出力 */ fgets(buf, 100, stdin); fprintf(stdout, "stdin-->stdout --- %s\n", buf); fprintf(stderr, "stdin-->stderr --- %s\n", buf); } return 0; }

実行結果
$ ./a.out sample_string <--- サンプルコードをリダイレクト無しで実行 argv-->stdout --- sample_string argv-->stderr --- sample_string $ ./a.out sample_string > sample1.txt <--- 出力リダイレクトを使用して実行 argv-->stderr --- sample_string $ cat sample1.txt argv-->stdout --- sample_string <--- 標準出力への出力は指定ファイルへ出力される $ ./a.out < sample1.txt <--- 入力リダイレクトを使用して実行 stdin-->stdout --- argv-->stdout --- sample_string <--- sample1.txtの文字列が入力値となる stdin-->stderr --- argv-->stdout --- sample_string

(02) リダイレクト出力の追加


実行結果
$ ls /usr > sample1.txt <--- sample1.txtへのリダイレクト(書き込み) $ cat sample1.txt bin <--- sample1.txtへ新規の書き込み include lib libexec local sbin share src $ ls /var >> sample1.txt <--- sample1.txtへのリダイレクト(追加) $ cat sample1.txt bin include lib libexec local sbin share src cache <--- 以降が追加出力 db lib local lock log mail opt run spool tmp

(03) 標準出力と標準エラー出力のリダイレクト


サンプルコード
sample.c
#include <stdio.h> int main(int argc, char *argv[]) { char buf[100]; if (argc > 1) { /* 引数有りの場合、引数の文字列を標準出力と標準エラーへ出力 */ fprintf(stdout, "argv-->stdout --- %s\n", argv[1]); fprintf(stderr, "argv-->stderr --- %s\n", argv[1]); } else { /* 引数無しの場合、標準入力の入力値を標準出力と標準エラーへ出力 */ fgets(buf, 100, stdin); fprintf(stdout, "stdin-->stdout --- %s\n", buf); fprintf(stderr, "stdin-->stderr --- %s\n", buf); } return 0; }

実行結果
$ ./a.out sample_string <--- サンプルコードをリダイレクト無しで実行 argv-->stdout --- sample_string argv-->stderr --- sample_string $ ./a.out sample_string &> sample1.txt <--- 「&>」で標準出力と標準エラー出力をsample1.txtへリダイレクト $ cat sample1.txt argv-->stderr --- sample_string argv-->stdout --- sample_string $ ./a.out sample_string >& sample2.txt <--- 「>&」で標準出力と標準エラー出力をsample2.txtへリダイレクト $ cat sample2.txt argv-->stderr --- sample_string argv-->stdout --- sample_string $ ./a.out sample_string > sample3.txt 2>&1 <--- 「2>&1」で標準出力と標準エラー出力をsample3.txtへリダイレクト $ cat sample3.txt argv-->stderr --- sample_string argv-->stdout --- sample_string

(04) ヒアドキュメント


サンプルコード
sample.c
#include <stdio.h> int main(void) { char buf[1000]; while (fgets(buf, 1000, stdin) != NULL) { /* 標準入力から読み取った文字列に、接頭辞を付加して出力 */ printf("stdin--> %s", buf); } printf("\n"); return 0; }

実行結果(1)
$ ./a.out << "EOF" <--- 「<<」以降の引用符を除去した「EOF」が区切り文字となる > sample string <--- ここからヒアドキュメント > line 1 > line 2 > EOF <--- 区切り文字「EOF」で終了 stdin--> sample string <--- ヒアドキュメントが標準入力から入力されコードが実行される stdin--> line 1 stdin--> line 2

実行結果(2)
$ SAMPLE1="SAMPLE" <--- シェル変数の設定 $ ./a.out << "EOF" <--- 引用符付きの区切り文字指定 > $SAMPLE1 > EOF stdin--> $SAMPLE1 <--- 変数は展開されない $ ./a.out << EOF <--- 引用符無しの区切り文字指定 > $SAMPLE1 > EOF stdin--> SAMPLE <--- 変数が展開される

(05) ヒアストリング


実行結果
「(04)ヒアドキュメント」でのサンプルコードを使用
$ ./a.out <<< sample stdin--> sample <--- 文字列「sample」が標準入力へ提供される $ ./a.out <<< $(ls /usr) stdin--> bin <--- コマンド展開の結果が標準入力へ提供される stdin--> include stdin--> lib stdin--> libexec stdin--> local stdin--> sbin stdin--> share stdin--> src ヒアストリングでは展開が実行される

実行環境

GNU bash, version 5.1.16
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1


コード例・出力内容中の表記

・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。