shell 重定向 2>&1 2>/dev/null 理解筆記

// 函數  輸入輸出重定向    

一、函數     
  
function hello(){  
  echo '1111'  
} 

------- 

hello  

hello(){     // function 能夠省略    
  echo '2222'  
}     

hello     

-------

hello(){
  return 11
}

hello
echo $? // 獲取函數返回的值   

-------

function hello(){    
  echo $1    
  echo $2    
  echo $3     
  echo "第十個參數${10}"     
  echo "參數個數${#}"      
  echo "輸出全部參數${*}"     
  echo "輸出全部參數${@}"     
}     

hello 1 2 3 4 5    

-------  

二、輸入輸出重定向     

> 
>>
< 輸入重定向
<< 

cat < ./1.txt // 把1.txt的內容截取出來     


標準輸入文件(stdin) 0    
標準輸出文件(stdout) 1     
標準錯誤文件(stderr) 2    


重定向解釋:
2>&1    // 標準錯誤輸出重定向到標準輸出     
/dev/null // 空設備 至關於一個黑洞 吞噬一切信息       

// 標準輸出  
echo 123 > ./1.txt 等同於 echo 123 1> ./1.txt  

// 標準錯誤輸出 
echo 123 2> ./1.txt  把標準錯誤輸出重定向到1.txt    
 
./2.sh    
hello   // hello 會報錯 走標準錯誤輸出   
date

./2.sh > 1.txt   // 會看到報錯直接在終端上顯示,未輸出到1.txt,由於這裏是標準輸出,沒有寫標準錯誤輸出重定向到1.txt   

./2.sh 1> 1.txt 2> ./1.txt 這樣就把標準錯誤輸出到了1.txt  
 可是有個問題,這個寫法至關於,打開了兩次1.txt, 標準輸出被標準錯誤輸出給覆蓋了    
 
./2.sh 1> 1.txt 2>&1   // >& 至關於對後面1即標準輸出的引用,而後這句話的意思是標準輸出重定向到1.txt,標準錯誤輸出也重定向到1.txt,所以 ./1.txt裏會顯示

./2.sh:行1: t: 未找到命令    
2019年 03月 30日 星期六 15:29:38 CST  

./2.sh 1> 1.txt 2>/dev/null  // 這裏標準輸出重定向到1.txt, 標準錯誤輸出重定向到空設備,即不輸出錯誤信息,這時./1.txt裏會顯示    
2019年 03月 30日 星期六 15:40:58 CST       
          

三、文件引用   

source ./xx.sh   或者 .  ./1.sh   
相關文章
相關標籤/搜索