- 1 名前:名無しさん@お腹いっぱい。 [2009/07/01(水) 09:42:48 ]
- シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。 src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/ heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルスクリプトのことをシェルってゆーな ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも RubyやPerlの方が適した仕事には素直にそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 前スレ シェルスクリプト総合 その14 pc12.2ch.net/test/read.cgi/unix/1233179688/
- 701 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 15:53:37 ]
- >>700
だから「体系だててきちんと教え」てください、って >>695 が言ってるんだから 言葉として正しいじゃん。 それに対して、>>696 は「教授する」自体が間違いだと勘違いして 恥を晒しちゃったね。
- 702 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 16:04:02 ]
- 恥を晒してる奴がいると思うとすかさず飛びつく奴って流石だよな。
楽しい休日の午後のひとときって感じ。
- 703 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 17:18:06 ]
- >>701
メクラ? >>695のどこに「体系だててきちんと教えてください」と書いてあるんだ? 揚げ足とったつもりが恥晒して惨め過ぎ。
- 704 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 17:51:05 ]
- >>695
定義してない可能性があるから:-なんやで!
- 705 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 18:08:34 ]
- >>703
「ご教授ください」=「体系だててきちんと教えてください」(同値) >>695 には「ご教授ください」と書いてある、 イコール >>695 は「体系だててきちんと教えてください」と言っている
- 706 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 18:46:44 ]
- けんかをやめて〜
ふたりをとめて〜 わたし〜の〜ために〜 あらそ〜わない〜で もう こ〜れ〜い〜じょ〜う〜♪
- 707 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 18:50:49 ]
- じゃあ体系だてて回答してやれ
- 708 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 19:44:15 ]
- 695です。皆さまなんだかお騒がせしてすみませんでした。
>>697 >>704 ありがとうございます、Linux Standard Baseですか。規格だとしか捉えていなかったので、 関係あるとは想像もしていませんでした。 $BOOTUP=verboseだとold-style bootupらしいので、 加えてLinux Standard Base準拠でないことを確認したいとかなんでしょうかね。 Linux Standard Baseのページには、 「個々のライブラリのインターフェースの装備、および、、各インターフェースに関連したデータ構造・定数を規定しています」 とあったので、どこかで何か定義されているんでしょうね。以下のページを見つけたのですが探しきれませんでした。 dev.linux-foundation.org/betaspecs/booksets/LSB-Core-generic/LSB-Core-generic.html 実体がわからないのは残念ですが、私自身が納得できたので、先に進むことができそうです。 皆さま、本当にありがとうございました!
- 709 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 21:01:27 ]
- ${LSB:-}
:- ってどういう意味?だれか教えて。 #一瞬 :-) かと思ったけど違ったので :-p
- 710 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 21:03:54 ]
- ・・・と書いておいてなんだけど、man bashに書いてあった
${parameter:-word} デフォルトの値を使います。 parameter が設定されていないか空文 字 列であれば、 word を展開したものに置換されます。そうでなければ、 parameter の値に置換されます。 へー。しらなかった。
- 711 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 21:06:40 ]
- :-)
- 712 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 23:43:43 ]
- >>705
バカメ。「ご教授ください」と「体系だててきちんと教えてください」は同値だが、 >>695は誤用だから同値じゃ無いという指摘だ。 論理的思考の出来ないバカは恥を晒すだけだから引っ込んでろ。
- 713 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 23:58:55 ]
- 日曜日最後のレスがそれじゃあな…
- 714 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 00:50:09 ]
- ご教示ください
とすればおkだったような予感w
- 715 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 02:38:22 ]
- >>714
ご教授くださいだろ、バーカ! こんな展開だと予想
- 716 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 07:41:23 ]
- >>712
そうじゃなくて、 あくまで誤用であって、「ご教授する」という言葉は日本語として正しい、 というのが主張。 (誤用だけど、言葉自体は正しいの) ところが、>>696 曰く、 >教授はあげません。 ↑ という突っ込みは、「ご教授する」という言葉自体も間違っていると 思い込んでいる。 もし、「誤用」に対する突っ込みなら、 「(こんな掲示版では)ご教授はできません」 となるはずで、 「教授はあげません」みたいには言わないはず。 よって、 >>696 は、「ご教授する」という言葉自体を知らなかったという天で 恥を晒したんだよ。
- 717 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 11:12:52 ]
- なにそれこわい
- 718 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 13:14:13 ]
- うわ、まだ続けてるのかよ
- 719 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 18:25:12 ]
- >>716
アホ丸出しの言い訳止めろ。>>695の用法も正しいと言うのがお前の主張(>>705)。 >>696はオレじゃないが、誤用に対して「あげない」とからかっている。 お前は用法を知らずに揚げ足とったつもりで恥を晒したうえに、小学生並みの見苦 しい言い逃れを続けている単なるバカ。お前の負け。 >>705 > 「ご教授ください」=「体系だててきちんと教えてください」(同値) > >>695 には「ご教授ください」と書いてある、 > イコール > >>695 は「体系だててきちんと教えてください」と言っている
- 720 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 19:46:10 ]
- 関係ない話はくだらないからやめようぜ。
>>695の質問の本質はLSBはどんな意味をもつ変数なの?ってことだろ LSBについてまともに答えてるの>>697くらいじゃねーか
- 721 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 20:31:51 ]
- レスありがとうございます
と書くだけでスレが荒れるのと同じだな
- 722 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 21:02:19 ]
- >>721
FreeBSDって何???
- 723 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 22:46:41 ]
- >>722
www.freebsd.org/ 荒したいならスペースが足らぬわ
- 724 名前:名無しさん@お腹いっぱい。 [2009/12/23(水) 17:35:56 ]
- cshについて質問させてください
変数の中身が文字列か数字か判断して処理をしたいのですがどうやったらわかりますか? if ($1 == [0-9]*) こんな感じでいけるのかなっておもったけどうまくいかずで…
- 725 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 17:40:30 ]
- 回答が欲しいなら「ご教授ください」って書かないと誰も答えないよ。
- 726 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 19:16:51 ]
- パイプラインについて質問です.
% ls foo.txt bar.txt baz.txt の状態で, % ls | wc -l とやると3が返ってきます. これは,パイプラインを通すとlsの結果に改行が挿入されるということなのでしょうか? % ls | xargs echo | wc -l とすると1が返ってくるので,この結果の違いが不思議です.
- 727 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 19:24:28 ]
- まずは ls | cat して確かめてみなさい
一応、はまりそうなので正解を言っておくと、ls が、出力先がパイプか端末かを 調べて、出力を変えています。パイプが変えてるのではありません。
- 728 名前:名無しさん@お腹いっぱい。 [2009/12/23(水) 19:26:27 ]
- 724です。
是非ともご教授いただきたいです。 よろしくお願いいたします。
- 729 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 20:19:56 ]
- >>724
先頭が数字かどうかなら if ( $1 =~ [0-9]* ) でいけるけど、より正確に数値かどうか判定するとなると cshでは難しいかもしれない 教授は付けないほうがいい
- 730 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 20:37:33 ]
- 「ご教授」で正しいんだよ。
- 731 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 20:38:39 ]
- >>727
lsが状況に応じて出力を変えてるとは思いませんでした. ありがとうございます.
- 732 名前:724 mailto:sage [2009/12/23(水) 20:42:48 ]
- >729さん
cshでは難しいですか。。。 回答ありがとうございます。
- 733 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 20:46:57 ]
- >724
if ( { ( echo -n "$1" | grep '^[0-9][0-9]*$' > /dev/null ) } ) echo yes,yes,yes
- 734 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 23:37:25 ]
- >>724にかなり近いのですが、質問します。
kshで「変数の中身が半角英数14桁」であることを確認したいのですが、上手くいきません。 if [ `expr $hoge : [a-zA-Z0-9]+` -ne 14 ] ; then # 半角英数14桁以外 fi と書いてみたのですが、+が正規表現になってくれず。 [a-zA-Z0-9][a-zA-Z0-9]*も最初2桁分しかチェックできず。 上手く正規表現でチェックできる術はないでしょうか? お分かりの方、ご教授お願いします。
- 735 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/24(木) 01:15:38 ]
- $ echo "foo" | if egrep -qs '^[a-zA-Z0-9]+$'; then echo yes; fi
yes $ echo "_foo" | if egrep -qs '^[a-zA-Z0-9]+$'; then echo yes; fi $
- 736 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/24(木) 04:12:15 ]
- >>734
if [ `expr $hoge : "[a-zA-Z0-9]\+"` -ne 14 ]
- 737 名前:734 mailto:sage [2009/12/25(金) 07:48:46 ]
- >>735
>>736 アドバイスありがとうございます。 見た目に単純な736の記述を試して上手く動作したので、この形で実装したいと思います。 \でエスケープすると正規表現になるとは知りませんでした。完全に逆だと思ってました。 エスケープもダブルクオートも試したのですが、両方やるとは思いつかず… ありがとうございました。
- 738 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 18:19:46 ]
- えーと、複数ファイルを結合したいのですが、
・ファイル名の一部が一致している ・結合すべきファイルの数は分かっている ・一致している部分の文字数、箇所も分かっている ・このようなファイルの組がディレクトリ内に複数組ある というような条件で、例えば file01abc.txt file02abc.txt file03abc.txt file01def.txt file02def.txt file03def.txt file...... で、わざわざ cat file??abc.txt > fileabc.txt cat file??def.txt > fileabc.txt cat............ などと書かずに一致部分を判別して全ての組を結合させたいのです。うまく出来る方法はあるでしょうか?
- 739 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 18:35:08 ]
- >>738
普通に、 for f in abc def do cat file??"$f".txt > file"$f".txt done
- 740 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 19:13:07 ]
- すみません、ちょっと説明足りませんでした。
そのabc、defってのが異なる組がかなり大量にあって、かつその文字列が そこそこ長いこと、毎回その生成される文字列が異なることから、いちいちinの後の部分を 書き出さずに出来るようにしたいのです。つまりこの場合、7,8,9文字目が (具体的な文字列は何だか分からないけれど)一致しているファイル全てを結合する、 というような指定は出来ないでしょうか?
- 741 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 19:19:01 ]
- >>738
普通に、 for ff in * do f=${ff:6:3} cat file??"$f".txt > file"$f".txt done
- 742 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 19:35:08 ]
- >>740
これで合ってる? ls | sed -n 's/^......//p' | sed 's/....$//' | sort | uniq | while read i do cat file*${i}.txt > file${i}.txt done
- 743 名前:名無しさん@お腹いっぱい。 [2009/12/26(土) 19:36:00 ]
- 10
22 3 11 25 90 12 ・ ・ ・ ってあるTextで平均から飛び出る奴(今回は90)切りたいんだけど ヒントないっすか?
- 744 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 19:38:28 ]
- 偏差値求めて標準偏差の何倍とかで検出だな
- 745 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 20:34:25 ]
- >>741
>>742 ありがとうございます。どっちも動作は完璧です。 さらにお手数をおかけしますが後学のために、 軽く何をやってるのか教えてもらえないでしょうか。 741はワイルドカードの挙動がよく分からないので3行目の時点で ffに何が入っているのかよくわかりません。ffの6バイト目から3文字分を fに代入し直しているって理解は合っていますか? 742は-n以降何をやってるか全く分かりません… 特に並んでいるドットの意味を教えてもらえないでしょうか? 察するに文字数ですよね?
- 746 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 20:50:17 ]
- >>745
>ffに何が入っているのかよくわかりません。ffの6バイト目から3文字分を >fに代入し直しているって理解は合っていますか? あってる >742は-n以降何をやってるか全く分かりません… >特に並んでいるドットの意味を教えてもらえないでしょうか? sedの正規表現です
- 747 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 21:01:15 ]
- >>745
's/^......//p' s は sbustitution == 文字の置換。s/aaa/bbb/ で aaa を bbb に置き換える。 ^...... は正規表現。^ は行頭を表していて、. は文字一つ分を表している。 p は print == 印字。s で置き換えた後の文字列を表示する。 sed 's/....$//' さっきと基本は同じ。 $ は行末を表している。....$ は行末の任意の4文字にマッチする正規表現。 sort | uniq 入力をソートして重複を除去する。 ここまでの処理結果は abc, def 等がファイル数分重複しているので、 重複を取り除く。 while read i; do ... read で一行ずつ読み込んで、変数 i に格納する。i には abc や def 等が入る。 シェルスクリプトは普段それほど使っていないので、多分、もっと良い 方法があると思います。
- 748 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 21:09:21 ]
- スマソ。
s/sbustitution/substitution/
- 749 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 21:15:50 ]
- >>746
>>747 度々御丁寧にありがとうございます。よく分かりました。
- 750 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/27(日) 15:16:39 ]
- >>744
そか、いったん合計して偏差値出すしかないか d
- 751 名前:正月前 mailto:zzhong33@yahoo.co.jp [2009/12/29(火) 21:51:50 ]
- シェルスクリプトの中で以下のようにperlで重複部分の文字を削除する場合は、最後の文字は消されない理由はなんでしょうか?
perlの中で同じことをすると、最後の文字は消されるのに。 教えて頂ければ、ありがたいです。 -------------------------- hoge='a:b:c:d:a:b:c:d:a' echo $hoge echo " " echo $hoge | perl -F: -ane 'chop;foreach(@F){$s{$_}++ or push(@b,$_)}print join(":",@b)' echo " " --------------------------
- 752 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/29(火) 22:24:22 ]
- >>751
echo -n
- 753 名前:正月前 mailto:zzhong33@yahoo.co.jp [2009/12/29(火) 22:45:31 ]
- ありがとうございました!!!
perlの中でchopではだめで、echo -n で改行を消さないといけないんですね!
- 754 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/30(水) 00:24:04 ]
- auto-split後だからchopするとしたら
chop($F[$#F]);
- 755 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/07(木) 21:10:23 ]
- run.shファイルの中で、script_file.shをsourceした場合。
sourceされているscript_fileの中でscript_file自身の絶対パスを得る方法を調べています。 bashの場合はscript_fileの中で$BASH_SOURCEから得られるが、他のシェル(zsh/tcsh/ksh)でscript_file.shのパスを得られる方法を 教えていただけませんか? >>>>>>>>>>>>>>>>>>>>>> script_file.shファイルのある場所 /path/to/script_file.sh >>>>>>>>>>>>>>>>>>>>>> 実行例: %./run.sh 期待結果: /path/to/ ファイル <run.sh>の中身 ------------- #!/bin/(sh/zsh/tcsh...) source $path/script_file.sh ------------- ファイル script_file: ------------- script_file_path=`******` echo $script_file_path; -------------
- 756 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/07(木) 21:31:48 ]
- >>755
他のシェルのソースを改造して $BASH_SOURCEの機能を実装すれば桶。
- 757 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/07(木) 21:50:29 ]
- >>756
早速のレスありがとうございます。今環境がないので明日試してみます。
- 758 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/07(木) 22:13:18 ]
- こりゃ、わかって無いな。
- 759 名前:名無しさん@お腹いっぱい。 [2010/01/08(金) 13:35:29 ]
- 制限時間を設定して、2つのプロセスを実行して、時間内に1つでもプロセスが終了しなかったら2つともキルして、もう一度最初から実行するにはどのように記述すれば良いのでしょうか?
ご教授ねがいます
- 760 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 14:04:43 ]
- どこの馬の骨かわからん奴に教授はしない。
- 761 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 14:41:28 ]
- >>759
同条件で、最初から再実行したら、また時間内に プロセスが終了しないのでループしちゃうのでは?
- 762 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 14:52:01 ]
- >>716
ループしてもいいから、まずはやり方を教授しろよ
- 763 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 14:57:34 ]
- >>761
ネットとか、I/Oポートとか、外的要因が絡んでるのなら 同条件で、最初から再実行してもループしない。
- 764 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 15:00:24 ]
- >>762
だから、誤用だけど言葉として正しい と言ってるだろバカ
- 765 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 18:36:31 ]
- >>764
誤用する奴には教えないと言っているのだ。バカ。
- 766 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 18:43:35 ]
- うるせー馬鹿
- 767 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 18:53:46 ]
- いい加減ウザイよ。
- 768 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 19:02:39 ]
- >>765
仮に誤用してなかったとしても肝心の質問の答を知らないくせに
- 769 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 19:22:50 ]
- 煽って答えがもらえるのは小学生まで
- 770 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 19:24:23 ]
- >>768
惨めだなあ。馬鹿丸出しの言い逃れを↓で完璧にのされたのを忘れてまた出てきやがった。 From: [719] 名無しさん@お腹いっぱい。 <sage> Date: 2009/12/21(月) 18:25:12 >>716 アホ丸出しの言い訳止めろ。>>695の用法も正しいと言うのがお前の主張(>>705)。 >>696はオレじゃないが、誤用に対して「あげない」とからかっている。 お前は用法を知らずに揚げ足とったつもりで恥を晒したうえに、小学生並みの見苦 しい言い逃れを続けている単なるバカ。お前の負け。 >>705 > 「ご教授ください」=「体系だててきちんと教えてください」(同値) > >>695 には「ご教授ください」と書いてある、 > イコール > >>695 は「体系だててきちんと教えてください」と言っている
- 771 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 21:13:41 ]
- >>759
#!/bin/sh program1 & p1=$! program2 & p2=$! sleep 60 kill -0 $p1; is_p1=$? kill -0 $p2; is_p2=$? if [ $is_p1 = 0 -o $is_p2 = 0 ] then kill -9 $p1 $p2 sh $0 fi
- 772 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 21:24:43 ]
- 1 SIGKILLは安易に使ってはいけない。
2 exec sh $0
- 773 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 21:57:52 ]
- シェルをexecし直すのは効率が悪い。while文で書ける。
#!/bin/sh while : do program1 & p1=$! program2 & p2=$! sleep 60 kill -0 $p1; is_p1=$? kill -0 $p2; is_p2=$? if [ $is_p1 = 0 -o $is_p2 = 0 ] then kill -9 $p1 $p2 continue fi break done
- 774 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 22:06:04 ]
- SIGTERM と SIGINT のどちらを使うべきか
いまだによくわからないのはオレだけでいい
- 775 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 22:11:32 ]
- SIGKILLでおk
- 776 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 22:19:31 ]
- >>771 >>773
program1やprogram2が 60秒以内に正常終了した場合には、 sleep 60 せずにスクリプトもすぐ終了したいんですが、、
- 777 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 22:45:57 ]
- 「ご教授ねがいます」なんていう奴は、これだよ
- 778 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 22:56:17 ]
- ご教授ねがえります
- 779 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 23:06:34 ]
- ご教授ねがえったか
- 780 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 23:47:21 ]
- 謀反でござる!
謀反でござる!
- 781 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 05:41:48 ]
- 女教授おながいします
- 782 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 07:47:50 ]
- 質問 >>759 >>776 について、
「ご教授」の突っ込みと誤答ばかりで、 ==== ここまで正解ゼロ ====
- 783 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 11:58:33 ]
- 釣り板の釣りスレでマジ回答したら負け
- 784 名前:771 mailto:sage [2010/01/09(土) 14:46:50 ]
- >>776
sleep 60の代わりに、それらのプロセスが終了したか チェックすればいい t=0 while t=`expr $t + 1`; [ $t -lt 60 ] do kill -0 $p1; is_p1=$? kill -0 $p2; is_p2=$? if [ $is_p1 != 0 -a $is_p2 != 0 ] then break fi sleep 1 done
- 785 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 15:03:34 ]
- お題を良く読みましょう。「制限時間」
オレはご教授しないけどな。
- 786 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 15:06:52 ]
- >>784
それ、1秒間隔でポーリングしてるだけなので、 やっぱり最大1秒遅れるので、ダメです。
- 787 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 19:46:58 ]
- #!/bin/sh
T1=`date "+%s"` T2=0 T3=0 STS=1 while t=`expr $T3 - $T1`; [ $t -lt 最大制限時間 ] do program1 & p1=$! program2 & p2=$! T2=`date "+%s"` T3=0 while t=`expr $T3 - $T2`; [ $t -lt 制限時間 ] do kill -0 $p1; is_p1=$? kill -0 $p2; is_p2=$? if [ $is_p1 != 0 -a $is_p2 != 0 ]; then STS=0 break 2 fi T3=`date "+%s"` done kill -9 $p1 $p2 done exit $STS もっとスマートに書けると思う ご教授しる
- 788 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 19:47:22 ]
- いやです
- 789 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 20:33:37 ]
- >>787
それ、ビージーループになってて重いのでNGです
- 790 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 22:00:20 ]
- waitすればいいやん
sleep 60 &して、これも含めた三つのpidをwait。 コードは書かないでおくが。
- 791 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 22:03:13 ]
- >>790
複数のプロセスをwaitすると、全部が終了するまで返って来ないという仕様なのでNG
- 792 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 22:34:21 ]
- ソケット通信でprogram1,2の終了を
管理プロセスに通知する仕組みにすれば 何とかなるかもしれないが、 シェルだけでは無理だね
- 793 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 22:38:41 ]
- んなぁこたー無いが、ご教授はしない。
- 794 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/11(月) 01:17:26 ]
- 下の input.txt から output.txt を作るにはどうすればよいでしょうか?
input.txt は1列のデータで、output.txt は、 input.txt の1列目から1行目を削除して2列目に並べたものです perl か何かに全部読み込んで・・・という方法しか思いつかないのですが ワンライナーでさくっとやる方法あったら教えてください ### input.txt 1 2 3 5 6 ### output.txt 1 2 2 3 3 5 5 6
- 795 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/11(月) 01:25:06 ]
- (read a; while read b; do echo $a $b; a=$b; done) <input.txt >output.txt
- 796 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/11(月) 01:53:40 ]
- >>795
ありがとうございます 目から鱗です
- 797 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/11(月) 12:54:30 ]
- >>794
横方向に連結する場合、 paste を使うのが基本 paste - - < input.txt
- 798 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/11(月) 12:59:32 ]
- あ、よく読んでなかった。こうか
# tail -n +2 input.txt | paste input.txt - > output.txt
- 799 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/11(月) 13:27:17 ]
- >>798
なぜ #プロンプト…
- 800 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/11(月) 13:49:45 ]
- あ、いや、特に考え無しに・・。 $ が一般ユーザで、# が root だっけ
|

|