Linuxから他のunixにシェルスクリプトを持っていって、動かないなんてことはたまにある。
例えば、usleepコマンドを使っているスクリプトをBSD系のunixに持っていくとusleepがなくて、動かなかったりする。
Linuxでもモノによってはusleepが初めからは入っていないかもだけど。
# そもそもシェルスクリプトで秒未満の待機なんてするデザインが悪い。ってのはとりあえず置いといて。。。
じゃあ、usleepコマンドがない状態でどうしよっかって考えたんだけど、マニュアルを確認して気づいてしまった。
http://www.freebsd.org/cgi/man.cgi?sleep(1)
BSDではパラメータはstrtodが受け付ける小数でもOKということになっている。
確かに待機時間が0.5秒になっている。この仕様であれば、usleepコマンドは必要ないかなってのも分からなくはない。
https://linuxjm.osdn.jp/html/gnumaniak/man1/sleep.1.html
Linuxのsleepは最小単位は秒になっている。
https://linuxjm.osdn.jp/html/GNU_coreutils/man1/sleep.1.html
GNU_coreutilsのマニュアルだと、小数の指定もできるよ、ってことになっている。
確かにLinuxでも、小数が指定できるようになっている。
でもsleepコマンドで小数が指定できるのはあくまで拡張仕様であって、移植性を考えると難しいところですね。。。
例えば、usleepコマンドを使っているスクリプトをBSD系のunixに持っていくとusleepがなくて、動かなかったりする。
Linuxでもモノによってはusleepが初めからは入っていないかもだけど。
# そもそもシェルスクリプトで秒未満の待機なんてするデザインが悪い。ってのはとりあえず置いといて。。。
じゃあ、usleepコマンドがない状態でどうしよっかって考えたんだけど、マニュアルを確認して気づいてしまった。
http://www.freebsd.org/cgi/man.cgi?sleep(1)
BSDではパラメータはstrtodが受け付ける小数でもOKということになっている。
$ uname Darwin $ time sleep 0.5 real 0m0.510s user 0m0.002s sys 0m0.003s
確かに待機時間が0.5秒になっている。この仕様であれば、usleepコマンドは必要ないかなってのも分からなくはない。
https://linuxjm.osdn.jp/html/gnumaniak/man1/sleep.1.html
Linuxのsleepは最小単位は秒になっている。
https://linuxjm.osdn.jp/html/GNU_coreutils/man1/sleep.1.html
GNU_coreutilsのマニュアルだと、小数の指定もできるよ、ってことになっている。
確かにLinuxでも、小数が指定できるようになっている。
$ uname Linux $ time sleep 0.5 real 0m0.503s user 0m0.002s sys 0m0.001s
でもsleepコマンドで小数が指定できるのはあくまで拡張仕様であって、移植性を考えると難しいところですね。。。
0 件のコメント:
コメントを投稿