.bash_profile
ipyを実行すると、7日以上ごとにログファイルが消去されるようにファイルを変更しています。問題は、if文で変数を参照するたびにreturnが返されることです-bash: command not found
。
1 #!/bin/sh
2 # .bash_profile
...
15 # These lines clear the ipy.log every seven or more days
16 PREV=$(awk '/./{line=$0} END{print line}' days.log)
17 echo $PREV
18 WEEKDAY=$(date '+%Y%m%d')
19 echo $WEEKDAY
20 DIF=$((WEEKDAY-PREV))
21 MARKER=false
22 if [ ${DIF} > 6 ]; then
23 YEAR=$(date '+%Y')
24 MON=$(date '+%m')
25 DAY=$(date '+%d')
26 DIGIT=${DAY:-1}
27 if [ ${DIGIT} -eq 1 ]; then
28 TAG='st'
29 elif [ ${DIGIT} -eq 2 ]; then
30 TAG='nd'
31 elif [ ${DIGIT} -eq 3 ]; then
32 TAG='rd'
33 else
34 TAG='th'
35 fi
36 TIMESTAMP=$(date '+%H:%M:%S')
37 MARKER=true
38 PRINT=$("ipy.log was cleared at ${TIMESTAMP} on ${WEEKDAY} the ${DAY}${TAG} of ${MON}, ${YEAR}")
39 echo ${PRINT}
40 ${PRINT} > ~/ipy.log
41 ${WEEKDAY} > ~/days.log
42 else
43 echo "It has been ${DIF} days since your last write, no need to clear logs"
44 fi
出力:
20200216
-bash: ipy.log was cleared at 14:35:45 on 20200216 the 16th of 02, 2020: command not found
-bash: 20200216: command not found
ファイルの最後の行を呼び出してdays.log
変数に割り当てると、$PREV
nullにのみ割り当てられることがわかります。しかし、この問題は他の投稿で正式に取り上げます。私はcommand not found
これらのステートメントがどのようになぜ行われたのかを知りたいと思います。
ベストアンサー1
15行目では、次の操作を行います。
WEEKDAY=$(date '+%Y%m%d')
したがって、WEEKDAY == "20200216"またはそれに似ています。 41行目では、次の操作を行います。
${WEEKDAY} > ~/days.log
${WEEKDAY}
「20200216」に置き換えられます。 Bashが提供する最初の文字列は常にコマンドです(キーワード、割り当て、その他の項目は除外しますが、今は忘れてください)。したがって、bash
以下を実行しようとします。
20200216
これは存在しません。次のように書きたい場合があります。
echo "${WEEKDAY}" > ~/days.log
代わりに。