2016-10-06 98 views
0

我是相對較新,以在bash腳本,並提出以下腳本:慶典LS輸出到文件時,LS發現沒有結果

# Set variables 
logfile=/tmp/peter/logfile.log 
indir=/mls/indir/IG/ 
tempdir=/mls/indir/IG/IGTEMP/ 
MLSready=/mls/indir/IG/MLSready 

#Log current date/time 
date >>$logfile 

#Check whether processing files are present and one MLSready file exists. If not, exit the script. 
if ls ${tempdir}R* 1> /dev/null 2>&1; then 
    mv $MLSready $tempdir 
    if [ $? -eq 0 ] ; then 
     echo MLSready move succeeded, copy processing files from $tempdir to $indir >>$logfile 
     ls -l ${tempdir}MLSready >>$logfile 
     find $tempdir -type f -name 'RPUO*' -mmin +1 -exec mv {} $indir \; 
     find $tempdir -type f -name 'RFRO*' -mmin +3 -exec mv {} $indir \; 
    else 
     echo MLSready does not exist, exit script >>$logfile 
     exit 1 
    fi 
else 
    echo no processing files in $tempdir, exit script >>$logfile 
    exit 1 
fi 

echo set new MLSready file >>$logfile 
# date >$MLSready 
ls -l $MLSready 1>&2 >>$logfile 

exit 

在腳本的末尾,我不作新MLSready文件。 當我執行腳本時,我期望在日誌文件中看到最新的'ls -l'命令的結果,但是(因爲我沒有創建一個新的MLSready文件?)輸出被重定向到我的提示符而不是我的日誌文件:

DC3_igsy3ft3.sonic:/tmp/peter> ./move_bmp_files.sh 
ls: 0653-341 The file /mls/indir/IG/MLSready does not exist. 

我怎麼能安排一下最新的「ls -l命令」命令的結果總是被重定向到我的日誌文件?

我也試圖與:

ls -l $MLSready 2>&1 >>$logfile 
ls -l $MLSready >>$logfile 

下面我的日誌文件:

do okt 6 09:22:39 2016 
MLSready move succeeded, copy processing files from /mls/indir/IG/IGTEMP/ to /mls/indir/IG/ 
-rw-rw-rw- 1 oracle 505    0 okt 06 09:22 /mls/indir/IG/IGTEMP/MLSready 
set new MLSready file 

在此先感謝!

回答

0

這是爲了:

$ ls -l $MLSready >>$logfile 2>&1 
$ 
+0

太好了!這似乎是訣竅! 我還沒搞懂它..我想將錯誤輸出重定向到默認輸出(2>&1),然後我想記錄它.. 爲什麼它會以其他方式工作? –

+0

您首先將您的stdout重定向到您的日誌文件,然後將您的stderr重定向到stdout,即。輸出的所有內容 - 好的和壞的 - 將被重定向到您的日誌文件。爲什麼訂單?打敗了我,從來沒有打擾過去想這件事。 :D –

+0

謝謝詹姆斯!奇蹟般有效! :) –