Kanji Naitoです。
>> $ source alarm
>
>[alpha _at_ etower alpha]$ source alarm
>82707
>82701 <<とりあえず結果は良いですね。
>82707
>82767
>[alpha _at_ etower alpha]$ source alarm
>82713
>82767
## 上記一部修正しております
>[alpha _at_ 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
## だらだら書いたから余計に混乱するかも
References:
- Prev by Subject: [vine-users:056049] Re: スクリプトのエラー
- Next by Subject: [vine-users:056051] 2.1.5 で運用中のサーバーアップグレード
- Previous by thread: [vine-users:056047] Re: スクリプトのエラー
- Next by thread: [vine-users:056046] Re: スクリプトのエラー
- Indexes:[Main][Thread]