linux在執行shell命令之前,就會確定好所有的輸入輸出位置,並且從左到右依次執行重定向的命令。
command > /dev/null 2>&1
1. >/dev/null
這條命令的作用是將標準輸出1重定向到/dev/null中。/dev/null代表linux的空設備文件,所有往這個文件裏面寫入的內容都會丟失,俗稱“黑洞”。那麼執行了 > /dev/null
之後,標準輸出就會不再存在,沒有任何地方能夠找到輸出的內容。
2. 2>&1
這條命令用到了重定向綁定,採用&可以將兩個輸出綁定在一起。這條命令的作用是錯誤輸出將和標準輸出同用一個文件描述符,說人話就是錯誤輸出將會和標準輸出輸出到同一個地方。
command > out.txt 2> out.txt
採用這種寫法,標準輸出和錯誤輸出會搶佔往out文件的管道,所以可能會導致輸出內容的時候出現缺失、覆蓋等情況,最後的情況是無法預估的。
而且,由於out文件被打開了兩次,兩個文件描述符會搶佔性的往文件中輸出內容,所以整體IO效率不如 > /dev/null 2>&1
來得高。