トップページunix
1001コメント327KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2007/08/15(水) 07:25:02
シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>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 でトレースしましょう。

前スレ
シェルスクリプト総合 その8
http://pc11.2ch.net/test/read.cgi/unix/1171517324/
0007名無しさん@お腹いっぱい。2007/08/15(水) 09:20:11
>>1
0008名無しさん@お腹いっぱい。2007/08/15(水) 09:34:03
1乙
0009名無しさん@お腹いっぱい。2007/08/15(水) 13:53:05
乙一
0010名無しさん@お腹いっぱい。2007/08/15(水) 13:57:07
関連スレ(bashの話題はこちらへ)

シェルスクリプト総合@LINUX Part3
http://pc11.2ch.net/test/read.cgi/linux/1184077033/l50
0011名無しさん@お腹いっぱい。2007/08/18(土) 13:14:39
あち
0012名無しさん@お腹いっぱい。2007/08/18(土) 20:14:08
そち
0013名無しさん@お腹いっぱい。2007/08/18(土) 22:19:20
前任者から引き継いだスクリプトが結構多数あります。
そこでは、ファイル名を扱う変数が $file みたいにクオートなしで書かれていて、
昔はこれで問題なかったようですが、今はとくにSambaの公開ディレクトリなどで
エラーというか、正常に動作しない事態が起きまくります。
そこで、ひとつずつ、$file を "$file" に書き直すとかしてますが、
それを一発で解決できる方法ないですか?
0014名無しさん@お腹いっぱい。2007/08/19(日) 16:46:11
とはいってもクオートの中で使われているのもあるだろうし、
sedでというのも難しそうな。
とりあえずは#!/bin/shになってるのをzshにしてしまうのが楽かも。
zshはクオートされてなくても分割されないから。
0015名無しさん@お腹いっぱい。2007/08/22(水) 00:53:34
"結構多数"にもよるけれど、エディタかスクリプトで
インタラクティブに置換するのが簡単かと。
でもこのスレ的に求められている答えではないか
0016名無しさん@お腹いっぱい。2007/08/24(金) 10:23:23
「if〜then」の中で「hoo」という変数名を使っていたら「if〜then」までを出力したい。
どうやればできる?

0017名無しさん@お腹いっぱい。2007/08/24(金) 10:27:20
>>16
変数hooが、空文字列の場合でも「設定されていない」とみなしていいなら、

if [ "$hoo" ]; then
0018名無しさん@お腹いっぱい。2007/08/24(金) 10:36:00
質問の意味が複数にとれるなぁ、

grep '\<if\>.*\<hoo\>.*\<then\>'

ということじゃないかと。だとするとスレ違いだが。
0019名無しさん@お腹いっぱい。2007/08/24(金) 12:57:04
>>18

複数行にわたる場合も有るし、
if以前とthen以降は出力しないんだから、
sedとかの方がふさわしいと思う。
0020名無しさん@お腹いっぱい。2007/08/24(金) 13:03:24
で、>>16はほんとは何をしたいのよ。
0021名無しさん@お腹いっぱい。2007/08/24(金) 16:09:42
楽にログローテーションするコマンドありますか

イメージ
xxcmd | ローテーションコマンド サイズ 世代 ファイル名

xxcmdはfdをオープンしたまま書き出すので、loglotationではNGです。


いいのありますかね?
0022名無しさん@お腹いっぱい。2007/08/24(金) 16:13:05
>>21
rotatelogs
0023名無しさん@お腹いっぱい。2007/08/24(金) 16:38:19
>>22
ありがとうございます。
あやうく、Log4Perl を選びそうになりました。
0024名無しさん@お腹いっぱい。2007/08/25(土) 00:45:19
ちょっと変な聞き方になりますが

root権限で実行しているシェルスクリプト内で実行するコマンドはroot権限で実行されるはず。
例えば、
--------------
#!/bin/sh
whoami
exit 0
--------------
をsudoで実行したらwhoamiはrootを返すはず。

以上の認識は間違ってないですよね?

というのは、とある開発中のUNIXでwhoamiがログインユーザ名を返してきました。
これをバグであると捉えていいのか迷ったので。
0025名無しさん@お腹いっぱい。2007/08/25(土) 01:16:25
いや、バグじゃないと思う。

root権限で動いていなけりゃバグと言えるが、whoami云々はまた別の話。
0026242007/08/25(土) 02:26:53
あ、whoamiがrootを返さなくなったのはwhoamiの動作変更かもしれないですからね。
例えとして悪かったですね。
whoami以外の何かを呼んでも、それらはroot権限で動いていませんでした。

気になっているのは、「シェルスクリプトそれ自体がroot権限で動いていれば、
そこから呼び出すコマンドもまたroot権限で動くはず」
と考えていた僕は間違っていたのか?ということです。
0027名無しさん@お腹いっぱい。2007/08/25(土) 02:43:35
>>26
その考えは正しい。

% echo Hello > /tmp/hoge
% sudo chown root /tmp/hoge
Password:
% sudo chmod 400 /tmp/hoge
% ls -l /tmp/hoge
-r-------- 1 root wheel 6 Aug 25 02:37 /tmp/hoge
% cat /tmp/hoge
cat: /tmp/hoge: Permission denied
% sudo cat /tmp/hoge
Hello
% echo "cat /tmp/hoge" > /tmp/test.sh
% sh /tmp/test.sh
cat: /tmp/hoge: Permission denied
% sudo sh /tmp/test.sh
Hello

って、Macで試したんだが、ちゃんとroot権限で動いてる。
0028名無しさん@お腹いっぱい。2007/08/25(土) 07:12:42
>>27
行の左端に書いてある % はなんの意味があるのですか?
0029272007/08/25(土) 12:05:07
>>28
% はプロンプトです。$ の方が良かったかな。

>>whoami以外の何かを呼んでも、それらはroot権限で動いていませんでした
というのが間違っているんじゃないかと思う。
その確認をしてみたのが >>27
0030名無しさん@お腹いっぱい。2007/08/25(土) 12:25:15
rootでじゃなくしつこくroot権限でと書いているのだよな。
シェルスクリプトにsetuidしたつもりとかいうオチじゃないだろうな。
0031162007/08/25(土) 22:36:45
徹夜続きで来れなかった。
遅れてスマソ。
こんな感じでできるかな?と自分で書いてみた↓

awk '/if/,/then/{print $0}' input.file|sed -n '/then/{\
x\
s/\n/\t/g\
/hoo/p\
d\
}\
H'
003224,262007/08/26(日) 02:11:24
よくよく考えてみれば、スクリプト内で呼び出すコマンドもroot権限で動いてくれないと
root権限で動かす意味がないですよね。

で、バグじゃねーかと開発者に報告しようと思っていたところ、
その開発中UNIXの最新ビルドが出て、改めて確認してみたら、
スクリプト内で呼び出すコマンドはroot権限で動くようになっておりました
(whoamiもrootを返すようになっていました)。やはりバグだったようです。

レス下さった方ありがとうございました。
0033名無しさん@お腹いっぱい。2007/08/29(水) 23:50:27
Solaris8上でcshスクリプト使っているのですが、

rm *.log

としたときに*.logが存在しなかった時に表示される
「一致しませんでした」というメッセージを抑止するには
どうしたらいいのでしょうか?
0034名無しさん@お腹いっぱい。2007/08/30(木) 00:21:33
set nonomatch
0035名無しさん@お腹いっぱい。2007/08/30(木) 00:49:08
あるファイルの最後から指定した行数だけ表示しない、
ということをしたいのですが、どのようにすればよいでしょうか?

ファイルの内容
-----------------------
aaa
bbb
ccc
ddd
eee
-----------------------

表示したい内容(最後から二行だけ表示しない)
-----------------------
aaa
bbb
ccc
-----------------------

よろしくご教授お願いします。
0036名無しさん@お腹いっぱい。2007/08/30(木) 01:30:00
誤字等の館:ご教授願います
http://www.tt.rim.or.jp/~rudyard/torii009.html
0037名無しさん@お腹いっぱい。2007/08/30(木) 01:31:47
なんか久しぶりにそれらしい質問を見た気がする。

>>35
linux板の方のスレに以前書いたけど、たとえば末尾3行を落とすなら
sed -e '1h;1!H;1,3!{g;P;s/[^\n]*\n//;h;};d' file
行数に合わせて3を適当に変更してくれ。

tailに-rオプションがある一部の環境なら
(tail -r|sed 1,3d|tail -r) < file
というのもできる。ファイルを2回ひっくり返すからかなり計算機の無駄遣いだけど。
0038名無しさん@お腹いっぱい。2007/08/30(木) 10:24:24
>>37
sedスレでも最近似た質問があったね。
http://pc11.2ch.net/test/read.cgi/unix/1085730992/198
0039332007/09/01(土) 12:03:10
>>34
ありがとうございます。
set nonomatch
rm -f *.log
の組み合わせでメッセージ抑止できました。
0040名無しさん@お腹いっぱい。2007/09/08(土) 01:57:19
次のような処理をシェルスクリプトでやろうと思っています。(ubuntu/bash)

http://www.google.co.jp/search?hl=ja&q=2ch&btnI=I%27m+Feeling+Lucky&lr=
が返す(つまり、ブラウザで飛ぶことが出来る)サイトアドレス(この場合は2ch.net)
を複数、定期的に観測する

素直に考えればwgetかなと思い、--spiderオプション付きでログを取っていくことを
考えました。
しかし、リダイレクトのしかたが違うからか他の「移転しました」のサイトとは違い
403 forbiddenがでます。

なにか良い方法があればご教授ください。
0041402007/09/08(土) 02:14:11
舌足らずだったので補足します。
googleのI'm feeling luckyにかけたい対象キーワードは複数あります。
それらの対象キーワードのgoogleランキングの変遷を知りたいという
わけです。

質問は多分二つに切り分け可能で、I'm feeling luckyによるリダイレクトジャンプを
wgetはフォローできるかというのが一つ、もう一つが英数字以外の文字列によって
構成されている
http://www.google.com/search?q=2ch
といったページをwgetでどうやって取得するか、という問題です。後者が出来れば
一応ソースを取得して検索順位第一位のサイトアドレスを取得することは
何とか出来ます。
0042名無しさん@お腹いっぱい。2007/09/08(土) 06:20:40
普通に検索して最初の候補を記録すりゃいいんじゃないの。
0043名無しさん@お腹いっぱい。2007/09/08(土) 10:12:00
> (ubuntu/bash)
なんで犬板で聞かないのだ?
0044名無しさん@お腹いっぱい。2007/09/08(土) 11:15:40
うぶん厨だから
0045名無しさん@お腹いっぱい。2007/09/08(土) 18:08:00
こっちのほうが頼りになるかも?と誤解してるから
0046名無しさん@お腹いっぱい。2007/09/08(土) 18:10:33
犬板にbash専門のスレが無いのは何故だろう
cshやzshより圧倒的に利用者が多いしbashが標準みたいなもんなのに。
0047名無しさん@お腹いっぱい。2007/09/08(土) 18:35:31
標準であればわざわざ名乗る必要もないということ。
Linux的には単にシェルと言ったらbashを指す。
0048名無しさん@お腹いっぱい。2007/09/08(土) 20:32:05
bash 専門じゃないけどスレあるよ。

シェルスクリプト総合@LINUX Part3
http://pc11.2ch.net/test/read.cgi/linux/1184077033/
0049名無しさん@お腹いっぱい。2007/09/09(日) 12:25:29
>>41
自分の環境に wget が無くて curl ならあるんで直接的な回答じゃなくてスマンが。

curl だと -L オプションでリダイレクトをたどってくれる。
wget は知らない。調べてちょ。ダメだったら wget はあきらめて curl で代替するのがお勧め。

後、curl の User Agent だと Google から嫌われるので、
-A ' -A 'Mozilla/5.0 (hogehoge)'
のオプションを付けてブラウザのフリをさせる。知ってるかも知れないけど。
0050名無しさん@お腹いっぱい。2007/09/09(日) 12:40:04
>>40
ちとやってみたがユーザーエージェントではじかれてるだけっぽい

-U 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'
とかでUA指定すればよいが、とりあえず'a'とか適当な名前でも通るようだ

>>41の質問だが
-O foo.htmlとか適当な名前を出力先に指定するなり
-O -などとして標準出力に吐かせてシェル側で受け取るなり好きに汁
0051名無しさん@お腹いっぱい。2007/09/09(日) 13:07:11
>ユーザーエージェントではじかれてるだけっぽい
そういう問題みたいだね。

>英数字以外の文字列
たとえば「ソニー」の場合のURLは
http://www.google.co.jp/search?hl=ja&q=%E3%82%BD%E3%83%8B%E3%83%BC&btnI=I%27m+Feeling+Lucky&lr=
になる。「ソニー」をUTF-8でURLエンコードして「%E3%82%BD%E3%83%8B%E3%83%BC」
にするんだが、そこから先の細かい話はWebProg板とかで聞いた方が良い。
0052402007/09/09(日) 21:03:32
どうもありがとうございます。
いただいたヒントを元にネットで検索した結果、手元の環境で

curl -L -A 'a' -w %{url_effective} "http://www.google.co.jp/search?hl=ja&q=2ch&btnI=I%27m+Feeling+Lucky&lr=";

にて出力される最後の1行だけをテキスト処理していくことで、思っていることが
出来ることがわかりました。
板違いの分も含めてお騒がせしました。
0053名無しさん@お腹いっぱい。2007/09/12(水) 00:12:12
/bin/shだけでファイルを表示させるって
while read line; do echo $line; done < file
であってますか?
0054名無しさん@お腹いっぱい。2007/09/12(水) 00:21:40
試してみりゃいーんじゃないでしょーか。
0055名無しさん@お腹いっぱい。2007/09/12(水) 01:14:37
ヒント: クォート
0056名無しさん@お腹いっぱい。2007/09/12(水) 02:55:39
findで検索し、見つかったファイルを引数として
for でファイル数分処理したいと考えています。

例: find で見つかったファイルが /home/abc/1.txt /home/abc/2.txt
であれば、
for i in /home/abc/1.txt /home/abc/2.txt
do ......
といった感じです。

この場合に、find で見つけたファイルを変数に、
「arg1 arg2 arg3 ...」と代入する方法がわかりません。
お助けください、おながいします。m(_ _)m
0057名無しさん@お腹いっぱい。2007/09/12(水) 04:28:01
>>56
> for で

ここが間違い
0058名無しさん@お腹いっぱい。2007/09/12(水) 06:40:33
>>53
あってるお

>>56
find . | while read line; do echo $line; done
0059名無しさん@お腹いっぱい。2007/09/12(水) 08:45:19
>>58
あってないよw

せっかく >>55 がくれてるヒント守れよ
でないと誤動作するよ
0060名無しさん@お腹いっぱい。2007/09/12(水) 10:38:11
クォートしても行頭行末のスペースやバックスラッシュはどうにもならんので、
完全な方法はないってことで。
# \ は read -r で動作を変えられるけど。
0061名無しさん@お腹いっぱい。2007/09/12(水) 10:56:32
/home/hoge/1.txt
/home/fuga/2.txt
/home/ahan/3.txt

このパスから
Unixユーザ名部分(上記の場合、hogeとfugaとahan)を
抜き出して変数に代入するにはどうすればよいでしょうか。
正規表現を使うということはなんとなくわかります。
0062名無しさん@お腹いっぱい。2007/09/12(水) 10:59:39
>>61
雑でいいなら
awk -F/ '{ print $3 }'
で出るけど、他に条件あるなら言ってくれ。
0063612007/09/12(水) 11:10:04
>>62
ありがとうございます、
お言葉に甘えて
Unixユーザ名が
[a-z0-9-]+
の場合、という条件も加えてもらえるでしょうか。
それで awk の使い方などを調べてみます。
0064名無しさん@お腹いっぱい。2007/09/12(水) 11:19:21
いや、そういうことじゃなくて。
0065名無しさん@お腹いっぱい。2007/09/12(水) 12:58:10
trap について教えてください。

スクリプトfoo.shは、trapを用いて、SIGINTのハンドラを記述しています。
スクリプトbar.shは、スクリプトfoo.shをバックグラウンドで起動します。

foo.shをコマンドラインからフォアグラウンドで実行した場合。
foo.shをコマンドラインからバックグラウンドで実行した場合。
foo.shをdaemonで実行した場合。

いずれのケースでも、foo.shにSIGINTを送ると、foo.shのハンドラは
実行されます。

しかし、bar.shからバックグラウンドで起動されたfoo.shに対して
SIGINTを送っても、foo.shのハンドラは実行されません。
また、foo.shから起動しているコマンドにSIGINTを送っても、
無視されている様子です。

なぜでしょう?
また、bar.shからバックグラウンドでfoo.shを起動した場合でも、
foo.shのハンドラが実行され、foo.shから起動しているコマンドも
同様にSIGINTを受け付けてくれるようにする為にはどうすれば
良いのでしょうか?
0066652007/09/12(水) 12:59:09
こんなスクリプトで試しています。

スクリプト foo.sh
#!/bin/sh
trap 'HANDLE' INT
HANDLE()
{
   touch /tmp/foo.log
   exit
}
echo "START"
/bin/rm -f /tmp/foo.log
/bin/sleep 30
echo "END"
 
スクリプトbar.sh
#!/bin/sh
/tmp/foo.sh &
0067名無しさん@お腹いっぱい。2007/09/12(水) 13:15:52
>>65
バックグラウンドで起動されたプロセスは、
最初から SIGINT無視の状態で起動される。
これは、シェル上で trapを実行しても再設定されない。
シェルスクリプトでは不可能。
0068652007/09/12(水) 13:19:32
ちなみに、bar.shを、Cシェルのスクリプトにしても、
perlのスクリプトにしても同じでした。
0069名無しさん@お腹いっぱい。2007/09/12(水) 13:21:31
>>68
>>67
0070名無しさん@お腹いっぱい。2007/09/12(水) 13:32:35
>>67 に補足すると、ジョブコントロール可能なシェルのコマンドラインから
直接起動する場合に限り、バックグラウンドで起動してもSIGINTは無視されない。
しかしこれは例外と考えるべき。

ジョブコントロールは、プロセスグループを変更することによって管理していて、
fgでフォアグラウンドになる時のために、
SIGINTを無視しないようになっているだけの話。
0071652007/09/12(水) 13:42:08
レスTHXです。
shのソースを見てましたが、確かにバックグラウンドで起動されたときは
SIGINT,SIGQUITをSIG_IGNしているみたいです。

ひとつ賢くなりました。
daemonで起動することにします。
0072名無しさん@お腹いっぱい。2007/09/12(水) 16:01:50
/home/hoge/file
のfileだけ返すようなコマンドってないでしょうか。

0073名無しさん@お腹いっぱい。2007/09/12(水) 16:21:27
basename
0074名無しさん@お腹いっぱい。2007/09/12(水) 16:47:52
awk -F/ '{ print $4 }'
0075名無しさん@お腹いっぱい。2007/09/12(水) 16:53:28
>>74
アフォか。/hoge/hage/boke/file だったらどうすんだよw
0076名無しさん@お腹いっぱい。2007/09/12(水) 16:55:41
>>73
サンクスです!!
0077名無しさん@お腹いっぱい。2007/09/12(水) 16:55:49
>>75
後からそんな条件追加されてもな。
0078名無しさん@お腹いっぱい。2007/09/12(水) 17:06:15
条件追加なんかしてないじゃん。
正解が出る前にわざとボケるならまだしも、
>>73 に正解が出た後でボケてもウケないよ。
0079名無しさん@お腹いっぱい。2007/09/12(水) 17:38:55
find / -regex "/home/.*\.c"

find /home -regex "/home/.*\.c"
ってCPUやHDDへの負荷って変わりますか?
後者の方が良い気がしますが、現在全て前者で作っちゃってます。
0080名無しさん@お腹いっぱい。2007/09/12(水) 18:27:30
>>79
やってみればすぐわかるのに

あと、cのソース探すのに、-regexは過剰だろ。-nameで十分
0081名無しさん@お腹いっぱい。2007/09/12(水) 18:30:50
自分では違いに気がつかなくて人に質問しなければわからないほどの差なのであれば
どっちでもいいんじゃないかな。たまには痛い目を見るのもいい経験だよ。
0082612007/09/12(水) 18:33:59
awkについて勉強しました。
ありがとうございます。
今回のケースはこれでいけそうです。

何度もすいません、今後のために聞いておきたいのですが、
/home/hoge/abc.txt
の.txtを除いたファイル名、つまりabcを取得したい場合、
などには
どんな方法があるでしょうか。
0083名無しさん@お腹いっぱい。2007/09/12(水) 18:37:19
basename
0084612007/09/12(水) 18:42:02
basename では abc.txt とならないでしょうか。
abc.txt ではなく、 abc を取得したいと思います。
0085名無しさん@お腹いっぱい。2007/09/12(水) 18:50:29
man basename
0086名無しさん@お腹いっぱい。2007/09/12(水) 18:57:34
>>85
それだとなんか英語のようなものが表示さ(ry
0087名無しさん@お腹いっぱい。2007/09/12(水) 18:59:40
こんな初心者の質問いちいちめんどくさいから、
黙らせるためにずばり答え書いてやれよ。

basename /home/hoge/abc.txt .txt
0088612007/09/12(水) 19:06:57
そ、そんな言い方ひどいよ!!!!













サンクスです
0089名無しさん@お腹いっぱい。2007/09/12(水) 19:11:12
もうひとつ教えてやろう。
>>61 は awkなんか使わなくてもできる。

basename `dirname /home/hoge/1.txt`
0090名無しさん@お腹いっぱい。2007/09/12(水) 22:20:18
1時間ごとにのsyslog、messegesを
監視(ここでは適当なcommand)したいです。

syslogやmessegesはローテートしているので
前回の監視(1時間前)後にログが切り替わった場合と
そのまま使われている場合で実行commandを変えたいのですが
どのようなシェルスクリプトにしたらできるでしょうか?

たとえばどのログも切り替わっていない場合はcommandA、
syslogが切り替わった場合はcommandB、
messegesが切り替わった場合にはcommandCを
実行するというようなシェルスクリプトが書きたいのですが^^;
0091名無しさん@お腹いっぱい。2007/09/12(水) 22:36:41
今時のPOSIX準拠のshellだったら、外部コマンドなんか使わなくてもできる。
name=/home/hoge/1.txt; name=${name#/*/}; echo ${name%%/*}
0092名無しさん@お腹いっぱい。2007/09/12(水) 22:39:40
>>90
どっちも切り替わった場合は?

というのは置いといて、
前回と今回見ているファイルの実体同じかどうかのチェックということなら、
切り替え時に必ずi-node番号が変わるという前提で、
ls -iでi-node番号を取得して、保存しとくしかないだろうな。

oldinode=`cat /var/log/oldinodestore`
ls -i /var/log/syslog | awk '{print $1}' >/var/log/oldinodestore
newinode=`cat /var/log/oldinodestore`
if [ $newinode -eq $oldinode ]; then
kawattenai
else
kawatta
fi
0093名無しさん@お腹いっぱい。2007/09/12(水) 22:44:43
>>59
あってるだろがwwwwwwwwwww
ばかかwwwwwwwww
0094名無しさん@お腹いっぱい。2007/09/12(水) 22:50:16
>>93
あってねーよ。池沼。WWWW
(echo " aaa"; echo " bbb")|while read line; do echo $line; done
0095名無しさん@お腹いっぱい。2007/09/12(水) 22:55:10
>>90
切り替わってなくて commandA を実行しはじめたとたんに、
あるいはその直前に、切り替わっても問題ないという前提か?
0096902007/09/13(木) 10:35:28
お返事が遅くなってしまいました。

>>92
ありがとうございます。
いただいたShellで試してみますね。
いつか自分でもShellがすらすら書けるようになるのかなぁ。。

>>95
そこまでシビアなタイミングは前提にしていないようです。
最悪1時間後の監視でひっかかればよいという前提です。

>90を訂正します。
syslog、messegesどちらが切り替わってもcommandBを
実行すればよいみたいです。
syslog、messegesが切り替わっていたらcommandBを実行。
切り替わっていなかったらcommandAを実行できればよいようです。



0097名無しさん@お腹いっぱい。2007/09/13(木) 10:40:56
Shellってゆーな
0098902007/09/13(木) 10:49:31
そうでしたね^^;
先日区別しなくてはいけないと読んだばかりでした><
0099名無しさん@お腹いっぱい。2007/09/13(木) 13:00:29
>>90
>1時間ごとにのsyslog、messegesを
>監視(ここでは適当なcommand)したいです。

新人君かな?それじゃなきゃ、おわってるけどw
君には、このギョーカイ向いて無いぞ

でも、そんなの関係ねぇー♪なら、いいけどさ。

分からないことは、聞くんじゃ無くて検索するようにすれば、生き残っていけるから頑張れ!!
0100名無しさん@お腹いっぱい。2007/09/13(木) 13:23:47
>>99

新入社員です^^;


シェルスクリプトを勉強し始めましたが
自分で作れるほどにはなっていなくて><
0101名無しさん@お腹いっぱい。2007/09/13(木) 18:09:32
緊急なんだ、誰かいい知恵を貸してはもらえませんか?

CPU使用率を跳ね上げた状態で試験がしたいのです。
それで、CPU使用率がバカ上がる(目標90%)シェルかスクリプトを簡単に作りたいんです。

Whileでfindやgrepやsortをまわしたんですが、70%越えが精一杯。
もっと凶悪なものないでしょうか?
0102名無しさん@お腹いっぱい。2007/09/13(木) 18:19:13
>>101
while :; do :; done
とかは?
0103名無しさん@お腹いっぱい。2007/09/13(木) 18:21:52
>>102
whileで無限ループはかけてますよ。
0104名無しさん@お腹いっぱい。2007/09/13(木) 18:33:29
いやその、IO待ちなどが発生するコマンドを起動するんじゃなくて、
単にシェルのなかでビジーループするだけのほうがCPU占有するだろうと
思えるから書いたんだが。
0105名無しさん@お腹いっぱい。2007/09/13(木) 18:44:01
>>102 で正解だよ。
>>103 みたいな、恩を仇で返すような質問者にはなりたくないなぁ
0106名無しさん@お腹いっぱい。2007/09/13(木) 19:03:59
実はcoreが2個あるとエスパー

■ このスレッドは過去ログ倉庫に格納されています