トップページunix
985コメント289KB

シェルスクリプト総合 その8

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。2007/02/15(木) 14:28:44
シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。


□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashなので特に注意。
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)

□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。

前スレ
シェルスクリプト総合 その7
http://pc10.2ch.net/test/read.cgi/unix/1157601611/
0974名無しさん@お腹いっぱい。2007/08/10(金) 11:33:26
>>973
trap: Illegal number: EXIT
0975名無しさん@お腹いっぱい。2007/08/10(金) 13:18:19
>>974
trap "kill $pid;kill -0 $pid && { sleep 1;kill -9 $pid; }; :" 0
0976名無しさん@お腹いっぱい。2007/08/10(金) 13:26:23
スクリプトで排他制御をする手っ取り早く確実な方法は何でしょうか?
セマフォ使えればいいんだけど、そんなコマンドないもんね・・・
0977名無しさん@お腹いっぱい。2007/08/10(金) 13:38:33
>>973
ありがとうございます。
ちなみにSIGKILLはどうしようもないですよね・・・
0978名無しさん@お腹いっぱい。2007/08/10(金) 13:41:55
子の側でときどき親が生きてるか確認する、とか。
0979名無しさん@お腹いっぱい。2007/08/10(金) 13:47:20
>>976
FreeBSDには
LOCKF(1) FreeBSD General Commands Manual LOCKF(1)
NAME
lockf -- execute a command while holding a file lock
がある。
0980名無しさん@お腹いっぱい。2007/08/10(金) 23:17:10
>976
lockf は簡単だけど無ければ mkdir を使うんじゃね?
0981名無しさん@お腹いっぱい。2007/08/11(土) 19:03:37
ksh93での質問です。

typeset -A で連想配列を使用したいんですが、ksh93でKey値の一覧を取得する方法ってあるんでしょうか?
(Perlでいうとkeys関数みたいな感じで)
0982名無しさん@お腹いっぱい。2007/08/11(土) 20:05:44
ksh93をつかっているUnixってあるんだな。
0983名無しさん@お腹いっぱい。2007/08/11(土) 21:25:48
>>982

ソースが公開されてんのって、ksh93だから、LinuxやFreeBSDとかでもpdksh以外のkshを使おうとすると、ksh93になるよね。
逆にksh88的に使いたいならpdkshになるんだけど、pdkshはpdkshでksh88とは振る舞いが結構違うのでいたいところがあるね。
商用系のUnixだと、AIXは/bin/ksh93がksh93、/bin/kshはksh88。HP-UXやSolarisはどうなんだろ?一応、ksh93は存在するみたいだけど・・・
0984名無しさん@お腹いっぱい。2007/08/11(土) 22:08:09
HP-UX11iv1とSolaris8/9/10はksh88しかない。
0985名無しさん@お腹いっぱい。2007/08/11(土) 23:31:11
posix-sh をつかうとか
レス数が950を超えています。1000を超えると書き込みができなくなります。