Kanji Naitoです。 >> $ source alarm > >[alpha@etower alpha]$ source alarm >82707 >82701 <<とりあえず結果は良いですね。 >82707 >82767 >[alpha@etower alpha]$ source alarm >82713 >82767 ## 上記一部修正しております >[alpha@etower alpha]$ . alarm >bash: 08: value too great for base (error token is "08") <---これがなぜ出る >のかわかりません ## この件は、回答があったようなので、省略(私も知りませんでした。) >> >> #/bin/sh のため、 >> 子シェル(sh)で実行しているので、export の結果が、 >> 子シェルと同時に消えるでは、ないでしょうか。 >> >> # export は、子シェルには、引き継がれるが、親シェルには無関係と >> # 記憶しております。 >> export の代わりに、適当なファイルに結果を書き出せば、 >> うまく動作しないでしょうか? >適当なファイルに書き出すとはどういうことでしょうか? A1# if [ $current_time -gt $next_alarm_time ] ;then B1# if [ $current_time -gt $(cat ~/next_alarm_time) ] ;then A2# export next_alarm_time=$((current_time+60)) B2# echo $((current_time+60)) > ~/next_alarm_time 変数に書き出さずにファイルに書き出すには、B2の様に変更します。 読み出す場合は、B1の様に変更すれば、良いとおもいますが試していません。 ## 出力が数字だけなら、$(cat file)で数値として読み出せたと思うが? >それとsourceとドット+スペースはどういうコマンドでしょうか? 調べたけれど全然 >わからないのです。 sourceとドット+スペースは、同じ意味を示します。 ## 下のテストをご理解いただいたうえで、 ## . file.sh を source file.sh と置き換えて試してみてください。 sourceとドット+スペースで実行した場合は、直接シェルにコマンドを指示した ことと同じになります。 (1A)のコマンドを(1B)のshで作業をしている事とすると、以下の様になります。 (2A)のshスクリプトは(2B)のshを呼び出し(echoと同じ位置)で shスクリプトに書かれたコマンドを実行して、shスクリプトファイルの 最後で(2B)のshは、終了してしまいます。 この時点で、(2B)のshでexportした結果も同時に消えてしまいます。 (3A)の . で実行すると(2B)のシェルを呼び出さずに(1B,3B)のshで作業をして いるところでshスクリプトに書かれたコマンドを実行します。 (#/bin/sh はコメントとして無視される。) $ cat file.sh #/bin/sh export OUT="test" echo $OUT $ ls -l -rwxr-xr-x 1 u g 41 Nov 23 00:37 file.sh $ export OUT="non" (1A) $ env |grep OUT OUT=non $ ./file.sh (2A)子シェルを育成して実行 test $ env |grep OUT OUT=non $ . file.sh (3A) test $ env |grep OUT $ ps axf 1 pts/0 S 0:00 -bash 2 pts/0 S 0:00 \_ sh (1B,3B) 3 pts/0 S 0:00 \_ sh (2B) 4 pts/0 S 0:00 \_ echo ## だらだら書いたから余計に混乱するかも