shell腳本中取消重定向的方法實(shí)例
在上一篇關(guān)于shell編程的例子中,有講到把shell腳本進(jìn)行擴(kuò)展之后重定向到一個(gè)文件中,以便進(jìn)行查看和調(diào)試http://www.dhdzp.com/article/62435.htm。但是,若是有另一種情況:只是在某些地方進(jìn)行重定向,而其他地方不進(jìn)行重定向。那么我們就來修改一下上一篇中的例子來進(jìn)行這種需求的滿足:
#!/bin/bash
function setlogfile
{
if ! [ -z "$1" ]; then
echo "logfilename is not empty!" >> kthh
exec 3>&1
exec 4>&2
exec 2>> $1
exec 1>> $1
fi
}
num1=$1
logfile=$2
execlogfile=$3
setlogfile ${execlogfile}
set -x
if [ $num1 -eq 0 ]; then
echo "num1 is 0">> ${logfile}
elif [ $num1 -ge 0 ]; then
echo "num1 is grate 0">> ${logfile}
else
echo "num1 is less 0">> ${logfile}
fi
exec 2>&4
exec 1>&3
if [ $num1 -eq 0 ]; then
echo "num1 is 0 again">> ${logfile}
fi
在函數(shù)setlogfile中添加了exec 3>&1;exec 4>&2這兩句,而其中,3、1、4、2都是表示文件描述符,1是標(biāo)準(zhǔn)輸出,也即是STDOUT,2是標(biāo)準(zhǔn)錯(cuò)誤輸出,即是STDERR,1和2本來是輸出在顯示器上的,而3、4是表示兩個(gè)文件描述符,可理解成是兩個(gè)保存1和2的臨時(shí)變量, 3>&1表示把文件描述符1的賦值給文件描述符3,也可以理解為是把文件描述符1(當(dāng)前標(biāo)準(zhǔn)輸出)的規(guī)則保存到了文件描述符3中,這時(shí)再把1的輸出重定向到文件中,在下面的shell程序中,我們又使用了1>&3這就表示是把保存在文件描述符3中的原標(biāo)準(zhǔn)輸出的規(guī)則重新賦值給文件描述符1,原來標(biāo)準(zhǔn)輸出的規(guī)則是輸出到顯示器上,而不是輸出到一個(gè)文件中。這就是整個(gè)重定向和取消重定向還原的過程。2和4也是一樣的道理。
閑話少說,先看運(yùn)行結(jié)果:
[root@UFO shellprogram]# ./testexecutelog.sh 0 msglog execlog
+ exec
+ '[' 0 -eq 0 ']'
+ echo 'num1 is 0 again'
[root@UFO shellprogram]# cat execlog
+ '[' 0 -eq 0 ']'
+ echo 'num1 is 0'
+ exec
看到結(jié)果了嗎??? 沒看到么??? 那就仔細(xì)看了,^_^
相關(guān)文章
linux中編寫自己的并發(fā)隊(duì)列類(Queue 并發(fā)阻塞隊(duì)列)
這篇文章主要介紹了linux中編寫并發(fā)隊(duì)列類,功能有:并發(fā)阻塞隊(duì)列、有超時(shí)限制、有大小限制2013-12-12
shell腳本 自動(dòng)創(chuàng)建用戶詳解及實(shí)例代碼
這篇文章主要介紹了shell腳本 自動(dòng)創(chuàng)建用戶詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03
Idea使用Bashsupport插件編輯Shell腳本的方法
這篇文章主要介紹了Idea插件之——Bashsupport編輯Shell腳本的相關(guān)知識(shí),功能非常齊全有檢查錯(cuò)誤并且還可以在idea中直接運(yùn)行shell腳本,本教程帶領(lǐng)大家一步步演示插件的安裝和配置,需要的朋友可以參考下2021-05-05

