關於linux管道使用時遇到的坑
這是我第一次在ChinaUnix上發布部落格,以後有機會希望能大家多分享交流一下!
轉到正題:
今天遇到一個坑:
在指令碼中調用server_function檔案中的conf_del方法去刪除設定檔
然後在刪除指令碼所在的目錄
其中,conf_del方法:
function conf_del {
cnt_EV=`grep "export EVSERVER_RUNTIME" $1 | wc -l`
cnt_QT=`grep "export QT_PLUGIN_PATH" $1 | wc -l`
cnt_Flum=`grep "export FLUME_HOME" $1 | wc -l`
[[ $cnt_EV -eq 1 ]] && sed -i "/export EVSERVER_RUNTIME/d" $1
[[ $cnt_QT -eq 1 ]] && sed -i "/export QT_PLUGIN_PATH/d" $1
[[ $cnt_Flum -eq 1 ]] && sed -i "/export FLUME_HOME/d" $1
}
說白了就是刪除.bashrc檔案中的一些資訊
因為我今天是測試別的功能,所以.bashrc檔案中的相應的刪除資訊沒有
所以,在執行到:
[[ $cnt_EV -eq 1 ]] && sed -i "/export EVSERVER_RUNTIME/d" $1
[[ $cnt_QT -eq 1 ]] && sed -i "/export QT_PLUGIN_PATH/d" $1
[[ $cnt_Flum -eq 1 ]] && sed -i "/export FLUME_HOME/d" $1
這個地方的時候杯具了
指令碼只返回:
[[ 0 -eq 1]]
[[ 0 -eq 1]]
[[ 0 -eq 1]]
然後不再執行刪除指令碼所在目錄的操作
經過檢查測試後發現,應該是Linux管道的問題
由於[[ 0 -eq 1]]導致無法退出conf_del方法
解決方案是:在conf_del方法裡面追加一句
function conf_del {
cnt_EV=`grep "export EVSERVER_RUNTIME" $1 | wc -l`
cnt_QT=`grep "export QT_PLUGIN_PATH" $1 | wc -l`
cnt_Flum=`grep "export FLUME_HOME" $1 | wc -l`
[[ $cnt_EV -eq 1 ]] && sed -i "/export EVSERVER_RUNTIME/d" $1
[[ $cnt_QT -eq 1 ]] && sed -i "/export QT_PLUGIN_PATH/d" $1
[[ $cnt_Flum -eq 1 ]] && sed -i "/export FLUME_HOME/d" $1
echo "all informations have been deleted!"
}
之後,主指令碼中的刪除目錄步驟就可以往下繼續執行了。
備忘:至於為什麼會出現這個情況,我也不是很明白。希望各位知道原因的大咖能和我交流一下。萬分感謝!