2013年5月12日 星期日

shell stdout/stderr redirect

# ls -l test.txt > test.err 2>&1

我實在受不了這是什麼了, 一次把它弄懂。
寫個程式來測試。

dir.c
1 #include <stdio.h>
2 
3 int main(int argc, char *argv[])
4 {
5   fprintf(stdout, "stdout\n");
6   fprintf(stderr, "stderr\n");
7   return 0;
8 }

test_result
 1 descent@w-linux:progs$ ./a.out 
 2 stdout
 3 stderr
 4 descent@w-linux:progs$ ./a.out 2> err
 5 stdout
 6 descent@w-linux:progs$ cat err 
 7 stderr
 8 descent@w-linux:progs$ ./a.out 1> out
 9 stderr
10 descent@w-linux:progs$ cat out 
11 stdout
12 descent@w-linux:progs$ ./a.out >& both
13 descent@w-linux:progs$ cat both 
14 stderr
15 stdout
16 descent@w-linux:progs$ ./a.out >  both 2>&1
17 descent@w-linux:progs$ cat both 
18 stderr
19 stdout
20 descent@w-linux:progs$ rm both 
21 descent@w-linux:progs$ ./a.out >  both 2>&1
22 descent@w-linux:progs$ cat both 
23 stderr
24 stdout

打完收工。
這樣清楚的寫法若你不習慣用
12 descent@w-linux:progs$ ./a.out >& both

> filea 將 stdout 轉到 filea
& filea 將 stderr 轉到 filea, 不過需配合 > 使用
清楚明瞭

還是要用這種寫法
16 descent@w-linux:progs$ ./a.out >  both 2>&1
那就照自己的習慣, 知道有另外的用法即可。

ref:

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。