2017-02-07 4 views
0

次のコードをご覧ください。tee -a:そのようなファイルまたはディレクトリはありません

#!/bin/sh 
LOG_FILE=/home/admin/scriptLogs.log 
rm -f ${LOG_FILE} 
echo "`date`:: Script Execution Started" | tee -a ${LOG_FILE} 
DATABASE ACCESS CODE 2>&1 
echo "`date`:: Script Execution Successful " | tee -a {$LOG_FILE} 
exit 0 

は出力次の生成:

> Tue Feb 7 12:14:49 IST 2017:: Script Execution Started 
> tee:{/home/admin/scriptLogs.log}: No such file or directory 
> Tue Feb 7 12:14:49 IST 2017:: Script Execution Successfull 

しかし、ファイルが指定された場所に存在します。また、最後のecho文を除いてデータが付加されます。なぜそのような振る舞いですか? (ここでそれについて読む:http://www.tldp.org/LDP/abs/html/quotingvar.html)を常に再解釈を避けるために、それらを拡大する前に、変数を引用することを確認します

#!/bin/sh 
LOG_FILE=/home/admin/scriptLogs.log 
rm -f ${LOG_FILE} 
echo "`date`:: Script Execution Started" | tee -a ${LOG_FILE} 
DATABASE ACCESS CODE 2>&1 
echo "`date`:: Script Execution Successful " | tee -a ${LOG_FILE} 
exit 0 
+9

だけ(そうするのは間違いではありませんが)私は、中括弧を削除しましたtypo - '{$ LOG_FILE}'から '$ {LOG_FILE} 'に変更してください。 '' ''を使う方がさらに優れています。 – codeforester

+1

ところで、ここの余分なブレースは役に立たないので、この文脈であなたを助けません。 'tee -a" $ LOG_FILE "'のようにパスに埋め込まれた空白がある場合は、二重引用符を使うと便利です。 – cdarke

答えて

0

としては@codeforester、使用によっても指摘 、あなたはとしてLOG_FILEを定義する必要があります文字列(以下引用符に注意してください):@codeforesterで述べたように言ったことで

LOG_FILE="/home/admin/scriptLogs.log" 

を、あなたのスクリプトのタイプミスを持って

また、実際に実行されていないことを確認せずに、実行が成功したことを印刷します。

だからコードは次のようになります。

#!/bin/sh 
    LOG_FILE="/home/admin/scriptLogs.log" 
    rm -f "$LOG_FILE" 
    echo "`date`:: Script Execution Started" | tee -a "$LOG_FILE" 
    DATABASE ACCESS CODE 2>&1 
    if [ $? -eq 0 ]; then 
     echo "`date`:: Script Execution Successful " | tee -a "$LOG_FILE" 
    else 
     ... 
    exit 0 

注:彼らはここでは必要としないよう

0

関連する問題