10.shell重定向

shell中將輸入、輸出和錯誤用三種描述符表示:
  • 標(biāo)準(zhǔn)輸入STDIN,用0表示,接受鍵盤輸入
    使用cat命令接受鍵盤輸入
  • 非標(biāo)準(zhǔn)輸入-文件輸入,即使用cat讀取文件
  • 標(biāo)準(zhǔn)輸出STDOUT,對應(yīng)終端顯示,1表示
  • 標(biāo)準(zhǔn)錯誤STDERR,2表示


??Demo1:重定向輸出到文件中

ls -l顯示文件的信息
>>追加內(nèi)容
>替換內(nèi)容
who命令打印當(dāng)前登錄的系統(tǒng)用戶信息

ls -l hello.sh
cat hello.sh
#追加內(nèi)容
who>>hello.sh
cat hello.sh

??Demo2:重定向錯誤信息輸出到文件中

-al查找文件
?錯誤做法:

ls -al hello.sh > aim.sh

上面執(zhí)行后,如果沒有aim.sh文件,則會自動創(chuàng)建aim.sh文件,但是最終都不會將錯誤信息輸出到目標(biāo)文件aim.sh
所以如果我們需要保存錯誤信息,就需要采用STDERR實現(xiàn)

?正確做法:
將STDERR文件描述修改為2

ls -al a.sh 2>hello.sh

??Demo3:同時保存錯誤和數(shù)據(jù)到不同文件
#將錯誤數(shù)據(jù)重定向到error.sh文件中,將查找結(jié)果保存到hello.sh文件中
ls -al a.sh b.sh c.sh 2>error.sh >hello.sh

??Demo4:同時保存錯誤和數(shù)據(jù)到同一個文件

使用命令符&>

ls -a file.sh &>result.sh
#查看文件內(nèi)容
cat result.sh


臨時重定向輸出:

&命令

#將輸出信息作為錯位日志
echo "haha" >& 2

執(zhí)行:將STDERR信息重定向到error.sh文件中
./hello.sh 2>error.sh


永久重定向輸出:

exec命令
保存數(shù)據(jù):

#在文件內(nèi)部
exec 1 > new.sh
echo "haha"

重定向輸入:

命令符<
一旦設(shè)置了輸入重定向指令,則read指令會自動連接輸入的內(nèi)容

#從hello.sh文件中讀取數(shù)據(jù)
exec 0< hello.sh
count=0
while read line
do
    echo "當(dāng)前行的內(nèi)容數(shù)據(jù)是:$line,當(dāng)前行數(shù):$count"
    count=$[$count + 1]
done 

自定義重定向輸出:

使用exec命令
??下面這種方式,會替換掉要定向文件里面的所有內(nèi)容:

exec 3> hello.sh
#臨時重定向,標(biāo)記文件
echo "haha" >&3

??如果在要定向的文件中追加內(nèi)容,而不是替換:

exec 3 >> hello.sh
#臨時重定向,標(biāo)記文件
echo "haha" >&3

重定向輸出恢復(fù):

#將3重定向為1
exec 3 >& 1
exec 1> hello.sh
echo "haha"
#將1恢復(fù)到3
exec 1 >& 3
echo "xixi"

創(chuàng)建讀寫文件描述符:

exec 3<>hello.sh
#從hello文件中讀取內(nèi)容
read line >&3
echo "$line"
#寫入內(nèi)容
echo "hah" >& 3
#注意:此寫入會替換掉從第二行開始的所有內(nèi)容
#因為上面讀取完第一行后,此時文件指針指向到了第二行



關(guān)閉讀寫文件描述符:

exec 3 >&-


阻止命令輸出:

輸出到系統(tǒng)一個臨時文件中,但是此臨時文件不會保存內(nèi)容

ls -al > /dev/null

使用阻止輸出來清空文件:

cat /dev/null > hello.sh
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容