- 1 名前:名無しさん@お腹いっぱい。 [2008/02/11(月) 19:21:07 ]
- シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずは注意点、リンク、地鎮祭など(>>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 でトレースしましょう。 前スレ シェルスクリプト総合 その9 pc11.2ch.net/test/read.cgi/unix/1187130302/
- 611 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 10:26:00 ]
- まぁまぁ、ここは有能な>>609に任せておいたらどうだ
- 612 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 10:38:47 ]
- >>610
>>600からそこまで読み取れるなんて想像力がたくましいな。 でも俺に聞かれても困る。元質問者に聞いてくれ(そして、板違いだからwebprog行け) それとも「CGIを作る? CGI/1.2とかいう新しい規約でも作りたいのか?」と突っ込んで欲しいのか? >>611 == >>601だな。無能という事実を突きつけられて悔しかったのか? > 使用可能なCGIは? この質問で意図した事を答えてみろ。
- 613 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 10:43:06 ]
- hoge.sh は実在します。例示には example.com 等を使いましょう。
- 614 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 10:51:55 ]
- >>612
> >>611 == >>601だな。 違うよ。
- 615 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 11:11:59 ]
- >>602 読むと、CGI自体はperlで作るらしいから、
>>610 の解釈が正しそうだな
- 616 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 11:53:43 ]
- saryのように高速でかつgrep並みの正規表現検索ができるユーティリティってありませんかね?
libstreeとか使って誰か作ってそうな気がするんですが、ぜんぜん見つかりません
- 617 名前:名無しさん@お腹いっぱい。 [2008/04/12(土) 21:54:43 ]
- hoge.sh はドメインじゃなくて スクリプト名では・・・
- 618 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 22:01:28 ]
- ネタにマジレス
- 619 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 23:54:44 ]
- 実際にwhoisしてみると、空いているらしい。>hoge.sh
- 620 名前:600 mailto:sage [2008/04/13(日) 00:33:33 ]
- >>602
|しぇるすぷりくとでHTML書いて $create.sh > /usr/local/www/html.html $cat create.sh #!/bin/sh echo \<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\> echo \<HTML LANG=ja\> echo \<HEAD\> echo \<meta http-equiv=\"content-style-type\" content=\"text/css\"\> echo \<META HTTP-EQUIV=Content-Type CONTENT=\"text/html\; charset=EUC-JP\"\> echo \<META name=\"generator\" content=\"shell script\"\> echo \<LINK REV=made HREF=\"mailto:yourmailaddress@your.mail.domain.com\"\> echo \<LINK REL=contents HREF=\"./index.htm\"\> echo \<LINK REL=stylesheet HREF=\"./default.css\" TYPE=\"text/css\" TITLE=\"./default.css\" MEDIA=\"screen,tv\"\> echo \<TITLE\>sample\</TITLE\> echo \</HEAD\> echo \<BODY\> echo \<FORM ACTION=\"/cgi-bin/hoge.cgi\" METHOD=\"POST\" ENCTYPE=\"text/plain\" LANG=\"ja\"\> echo \<div\>\<INPUT TYPE=\"submit\" TABINDEX=\"0\" ACCESSKEY=\"S\"\>\</div\> echo \</FORM\> echo \</BODY\> echo \</HTML\> |ボタン押したらhoge.shを実行したい セキュリティ要件:なしなら、perlスクリプト内に以下のように書けば... $list[0] = "hoge.sh" system "/bin/sh", @list;
- 621 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 07:32:30 ]
- >>620
お前 >>600 じゃなくて >>601 だろ。 echoが無駄です。echoは1個だけでできます。 perlのsystemでも、一旦listに入れるのが無駄です。 あと、そもそも >>600 の質問意図とは違うと思います。
- 622 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 10:30:33 ]
- echo1つで済むつーか、catとヒアドキュメントの出番じゃね?
- 623 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 10:37:58 ]
- ヒアドキュメントはテンポラ作るから嫌い。echo 1つがスマート。
- 624 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 11:44:04 ]
- テンポラリ作るとまずいことでもあるんですか?
- 625 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 11:51:04 ]
- >>623
どこにできるんだ?
- 626 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 12:16:26 ]
- >>624
意味もなくHDDに書き込むのが無駄。 >>625 教えて欲しければ「教えてください」と家。 普通は /tmpにできる。シェル側からすぐに unlinkされるから lsでは見えないけど。トレースすればわかる。
- 627 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 12:57:52 ]
- >626
実装による? Linuxのzshとbashで strace cat <<HOGE hoge HOGE としてみたけど別にテンポラリファイル作ってなかった。 fd3番以降を開いてるのは共有ライブラリのリンク時くらい。 "hoge¥n"のreadは0から。 dupとかなかったから、ファイル開いてリダイレクト処理をしたわけでもないな。
- 628 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 13:18:32 ]
- >>627
トレースが下手だな catをstraceしてもしょうがないだろ。 bashやzshをstraceすること。 catに渡される時にはすでにunlinkされてるから、 catをstraceしても見つからないはず。
- 629 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 13:35:53 ]
- (bashの場合)
$ strace -f bash -c 'cat << EOF hoge EOF ' (中略) : [pid 11486] open("/tmp/sh-thd-1208089889", O_RDONLY|O_LARGEFILE) = 4 [pid 11486] unlink("/tmp/sh-thd-1208089889") = 0 テンポラリファイル作ってるね。 (zshの場合) $ strace -f zsh -c 'cat << EOF hoge EOF ' (中略) : open("/tmp/zsh6MaAd3", O_RDONLY|O_NOCTTY|O_LARGEFILE) = 3 unlink("/tmp/zsh6MaAd3") = 0 テンポラリファイル作ってるね。
- 630 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 13:36:32 ]
- $ strace -o bash.log bash
bash-3.1$ cat <<HOGE > hoge > HOGE hoge bash-3.1$ exit $ egrep '(creat|unlink)' bash.log (なにもなし) だめか。どうやって確認すればいいか、正しいやり方を教えてけろ。
- 631 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 13:37:09 ]
- あああ、-fか。理解。
- 632 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 16:38:06 ]
- /tmpの日付見ればいいんじゃないの?
- 633 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 16:59:54 ]
- catだとすぐ終了しちゃうから、tail -fを使うと良い。
$ tail -f << EOF hoge EOF ってやっておいて、別のxtermから、 $ lsof | grep tail ってやると、(deleted)って表示されてる /tmp以下の一時ファイルがあるのがわかる。
- 634 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 17:23:23 ]
- >>632
それだけだと、無関係のプロセスが/tmpをいじくった可能性が残る。
- 635 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 17:33:54 ]
- 忙しくないマシンで何回かやれば可能性は実用上0になるだろ
- 636 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 17:36:00 ]
- それで満足ならいいんじゃね?
- 637 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 17:59:36 ]
- >>633 がもっといい方法示してるじゃないか。
- 638 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 19:53:17 ]
- >>626
礼儀知らずで申し分けありませんでした。テンポラリファイルを作るというこ とは、シングルユーザーモードなどで、リードオンリーファイルシステムだと here doc を使ったシェルスクリプトは動かないということでしょうか?
- 639 名前:名無しさん@お腹いっぱい。 [2008/04/13(日) 20:15:12 ]
- エディタの置き換えでも出来る事なのですが良ければ教えてください
わるs わるk わるi わりこn わりこm わりあt じょうち じょうちょう じょうなん のように語尾にアルファベットが付いているのと付いてないのがあるんですけど アルファベットを削除する方法とかってSEDではどのようにするのでしょうか?
- 640 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 20:20:09 ]
- >>639
sed 's/[a-z]$//'
- 641 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 20:56:04 ]
- >>586-587
bash依存じゃないだろ。kshでも使えるから、標準で使っていいんじゃないの?
- 642 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 02:04:22 ]
- >>641
読まずにりぷらい、まあ、もちつけ共通拡張かも知れないだろ。 POSIXに規定されているか読みなおすんだ。
- 643 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 13:18:12 ]
- 配列の値の設定ってバックスラッシュか何かで
複数行にまたがって書くことはできないのでしょうか?
- 644 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 13:36:12 ]
- >>643
できる。シングルクォートを使うのがいい。 $ hoge=('aaa aaa aaa' 'bbb bbb bbb') $ echo "${hoge[0]}" aaa aaa aaa $ echo "${hoge[1]}" bbb bbb bbb
- 645 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 14:56:04 ]
- >>644
どうもありがとうです
- 646 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 15:00:53 ]
- はいはい、バッシュ依存。
- 647 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 21:22:58 ]
- kshでも使えるからデファクトだろ?
- 648 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 13:24:12 ]
- Solaris8上でBourne Shellを用いてスクリプトを書いています。
dateコマンドを整形する際にシングルクォートで括りますが、 $ echo `date '+%H%M` などとしても通ってしまうのは何故なんでしょうか?
- 649 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 13:54:55 ]
- >>648
Solarisのバグです。シングルクォートはちゃんと閉じましょう。
- 650 名前:名無しさん@お腹いっぱい。 [2008/04/15(火) 20:40:12 ]
- シェルを始めたのですが、変数でいきなり詰まりました ><
$i = 123; =: command not found もしかしてシェルでは = は外部コマンドなんでしょうか?
- 651 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 20:47:30 ]
- 何シェルかくらいかこうぜ・・・
i=123
- 652 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 20:49:37 ]
- >>651
今度はこうなります i = 123 i: command not found
- 653 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 20:57:39 ]
- >>651のをコピペしな
あと、何シェルかくらいかこうぜ・・・
- 654 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:03:03 ]
- >>653
この場合何シェルか関係あるか??
- 655 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:24:30 ]
- 関係有るから指摘している。
が、cshだったら他所へ行ってくれ。
- 656 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:26:27 ]
- cshだったらエラーメッセージが違うじゃん。回答者はそれくらい見抜かないと。
- 657 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:27:17 ]
- >□お約束
>・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 > bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
- 658 名前:650 mailto:sage [2008/04/15(火) 21:30:24 ]
- #!/bin/shです。
i = 123; ってやっても、やっぱり i: command not found と出ます><
- 659 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:31:33 ]
- 650はネタなのかマジなのか。
- 660 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:50:24 ]
- シェルでは = は比較を表す (例: [ $i = 123 ] )
代入は := で。
- 661 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:50:27 ]
- i = 123でなくてi=123です。スペースを入れてはいけません。
- 662 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 22:08:02 ]
- ネタはほっとけ。
- 663 名前:名無しさん@お腹いっぱい。 [2008/04/16(水) 08:48:00 ]
- 質問させて下さい。
あるディレクトリ以下の、特定の拡張子(.tig)をもつファイルの(find ./ -name "*.tig") 名前を変えて( hoge.tig -> hoge_org.tig) その二つの名前を与えたコマンドを実行したいです。( hoge -t hogu hoge_org.tig hoge.tig) for org_name in `find ./ -name "*.jpg"` do $name = $org_name + "_org"; echo $org_name; echo $name; done と言うのを考えてみたのですが、エラーでうまく行きません。 あと、拡張子の前に名前を追加したいのですが、実現方法が分かりません。 もしよろしければ、教えて頂けると助かります。 よろしくお願いします。
- 664 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 08:53:43 ]
- >>663
とりあえず、 $name = $org_name + "_org"; の部分のみに回答。 まず、perlみたいな書き方の癖はやめろ。 name=`basename $org_name .jpg`_org.jpg あと、質問が、最初は .tigと言ってるのに下のfor文は .jpgで、矛盾してるぞ。
- 665 名前:663 mailto:sage [2008/04/16(水) 08:58:21 ]
- ありがとうございます。
それがわかれば、なんとかできそうです。 .jpgなのは、ローカルな環境でテストをしたため違うファイルを使っていました。
- 666 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 13:41:14 ]
- findでやってるから'/'含みのpathnameになる。
しかしbasenameは最後のコンポーネントだけ切り出してしまう。 name=`echo $org_name | sed 's/.jpg$/_org.jpg/'` の方が良いと思われ。あるいは、 dir=`dirname "$org_name"` org=`basename "$org_name"` new=`basename "$org_name" .jpg`_.org.jpg orgpath="$dir/$org" newpath="$dir/$new"
- 667 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 18:41:06 ]
- phpのsystem関数から
シェルコマンドを実行を試してます。 lftp -f hoge.conf rm hoge.conf したいのですが、 lftp -f hoge.conf がかなり時間がかかるため、 lftp -f hoge.conf > /dev/null & してから rm hoge.conf を実行したいと思います。 system("lftp -f hoge.conf > /dev/null & rm 000 hoge.conf"); とすると lftpが正常に実行されません。 おそらくrmがlftp完了前に実行されているからと思いますが、 どのように記述すれば良いでしょうか? どなたかご教授くださいませ。
- 668 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 18:56:25 ]
- >>667
system("lftp -f hoge.conf > /dev/null ; rm hoge.conf"); じゃだめなの?
- 669 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 19:08:25 ]
- OSコマンドインジェクションを入れ込まないように気をつけろよ
- 670 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 19:08:44 ]
- & を何だと思ってるんだ
- 671 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 19:26:22 ]
- system("(lftp -f hoge.conf > /dev/null ; rm hoge.conf) &");
こうかな
- 672 名前:667 mailto:sage [2008/04/16(水) 19:36:29 ]
- >>668
これだと rm hoge.conf が lftp 完了前に実行されたようです >>671 "("なんてしらねーよ、みたいなエラーが出てしまいました。
- 673 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 19:49:57 ]
- >>672
system("sh -c 'lftp -f hoge.conf > /dev/null ; rm hoge.conf' &");
- 674 名前:667 mailto:sage [2008/04/16(水) 20:08:22 ]
- >>673
神サンクスです!!それでいけました!
- 675 名前:667 mailto:sage [2008/04/16(水) 20:35:38 ]
- すいません、
いけたと思ったら、lftpが終わるまでブラウザで読み込みが続いてしまいます。 www.stackasterisk.jp/tech/php/php02_02.jsp ---------------------------------------------- > /dev/null」 が「リダイレクト」に相当する記述です。 /dev/null というのは、「ゴミ箱」と思って頂いて構いません。 すべての出力を捨てます。 最後の & は、バックグラウンドで実行するという意味です。 このあたりの詳しいことは UNIX のシェルの本をみれば載っています。 「PHPはそのプログラムの実行が終了するまでハングします」というのは、 つまり IE の地球マークが廻りつづける状態をいいます。 ---------------------------------------------- というのを参照しています。
- 676 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 02:33:27 ]
- ぐぐって得た付け焼き刃の知識をこねくるんではなく
一度基礎から勉強した方がよろしいかと。
- 677 名前:名無しさん@お腹いっぱい。 [2008/04/17(木) 08:36:16 ]
- >>675
結局jpgなんだねw
- 678 名前:名無しさん@お腹いっぱい。 [2008/04/17(木) 12:33:53 ]
- シェルスクリプトで関数計算とかできるの?
A= 2√3/0.0000456789*π+$hoge echo $A 小数点以下なげーとか・・・・
- 679 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 12:47:28 ]
- >>678
$ hoge=123 $ echo "2*sqrt(3)/0.0000456789*(a(1)*4)+$hoge" | bc -l 238368.58352774053454525488 注: πは (a(1)*4) で表す。(atan(1) = π/4 を利用)
- 680 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 12:53:56 ]
- そういう場合はbcとか関数計算を行うプログラムに実行させる。
POSIXシェルならば整数の四則演算が行えるので、この上に(関数演算を含む) 浮動小数点演算を実装すればシェル単独でも可能。
- 681 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 13:00:42 ]
- >>679 少し分かりやすく
hoge=123 pi="(a(1)*4)" echo "2*sqrt(3)/0.0000456789*$pi+$hoge" | bc -l
- 682 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 13:14:45 ]
- 実例 >>679 が投稿された「あと」で、
実例示せずに能書きだけ書いてる >>680 ってマヌケだよなぁ。
- 683 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 14:29:32 ]
- 「やりかた」を書くだけで間抜けなのか
- 684 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 14:33:27 ]
- 具体的な「やりかた」を書いているのは >>679 の方。
>>680 は具体的な「やりかた」を何ひとつ書いていない、だから間抜け。
- 685 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 14:34:14 ]
- そんなことより、批判だけするやつのほうが・・
- 686 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 15:55:30 ]
- シエルで、フォントサイズを変えるのはどうやるんですか
A$ = "エラーが発生しました" echo A$ のところで、「エラー」の文字だけ大きくしたいんですが
- 687 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 16:00:27 ]
- banner Error; echo 'が発生しました'
- 688 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 16:46:29 ]
- 仮想端末のエスケープシーケンスにフォントサイズ変更があれば
「エラー」の前後にそのエスケープシーケンスを書けばいい。 色やブリンクの有無といった変更も同様。
- 689 名前:名無しさん@お腹いっぱい。 [2008/04/17(木) 19:13:26 ]
- スクリプトの神様
今日もありがとうございました 勉強になりました!!!
- 690 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 19:54:36 ]
- banner面白いなw
- 691 名前:名無しさん@お腹いっぱい。 [2008/04/17(木) 22:12:31 ]
- >>679 >>680 >>681 神よ! d(゚Д゚)☆スペシャルサンクス☆( ゚Д゚)b
さて、Excelを窓からブン投げるかw
- 692 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 01:03:30 ]
- このスレは定期的に神が現れるな。的確で即レス、何者なんだろ
- 693 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 01:38:31 ]
- >>686
少し目的からずれる気がするが、以前どっかのスレに 投下したスクリプトをちょっと改造したもの。 #! /usr/bin/env bash # vivid_error.sh -- 標準エラー出力に色を付ける # Original: # ttp://d.hatena.ne.jp/goth_wrist_cut/20080122/1201003827 name='vivid_error.sh' (( $# > 0 )) || { echo "error: $name: No argument." 1>&2 exit 1 } temp=$( mktemp "$TEMP/$name.$PID" ) rm -f "$temp" mkfifo "$temp" sed 's/.*/1m\0m/' < "$temp" 1>&2 & "$@" 2> "$temp" status=$? rm -f "$temp" exit "$status"
- 694 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 02:37:38 ]
- ESC=$(printf '\033')
とかするのおすすめ
- 695 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 08:19:53 ]
- terminfoなsystemじゃないとtputはないかも。
BOLD=`tput bold` EXIT=`tput sgr0` printf "${BOLD}This ${EXIT}is a ${BOLD}test${EXIT}.\n" カラーも可能。 文字列加工はsed等で。
- 696 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 13:32:39 ]
- fifoなんていらないよね。
#!/bin/sh # 標準エラー出力に色をつけてコマンドを実行 if [ $# -eq 0 ] then echo "Usage: $(basename $0) command args..." 1>&2 exit 1 fi exec 3>&1 ESC=$(printf '\033') "$@" 2>&1 1>&3 | sed "s/.*/$ESC[1;31m\0$ESC[0m/" 1>&2
- 697 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 18:50:18 ]
- 初歩的な質問ですが
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined を LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined の様に変更したいのですが・・・ sed -i "s/^LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined/LogFormat \"%h %l %u %t \\\"%!414r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined/g" /root/test で良い様に思うのですが・・・ "%h \"の様な所でエラーが出て変換ができません よろしくです
- 698 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 18:51:56 ]
- 初歩的な質問ですが
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined を LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined の様に変更したいのですが・・・ sed -i "s/^LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined/LogFormat \"%h %l %u %t \\\"%!414r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined/g" /root/test で良い様に思うのですが・・・ "%h \"の様な所でエラーが出て変換ができません よろしくです
- 699 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/20(日) 18:53:14 ]
- なんとなくワロタ
- 700 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/20(日) 19:48:07 ]
- >>698
まず、sedプログラム本体は " " じゃなくて ' 'で囲むこと。 " " だといろいろエスケープが面倒。
- 701 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 21:47:22 ]
- >>700
ありがとうございました 修正できました
- 702 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 22:34:02 ]
- シェルスクリプトでPerlとかRubyのchopと同等なことって、
どうすればいいですか? bash限定でもかまいません。
- 703 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/20(日) 22:42:41 ]
- >>702
シェルでは、何も考えなくても readとかで読み込んだら自動的に chopされてる。
- 704 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 23:31:00 ]
- >>703 さっきは、
「echo -nで改行が取れないなあ、あれ?」って状態で質問したのですが、 readでも取れませんでした。で、ようやく\r\n改行だったことに気づきました。 bashの%*\r*で解決しました。
- 705 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 00:26:14 ]
- 質問させてください
テキストファイル内に 建造物 (けんぞうぶつ) 構築物 (こうちくぶつ) 構造体 (こうぞうたい) ()でくくられた文字のみを取り出したいのですが可能でしょうか?
- 706 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 00:36:23 ]
- >705
いくらでも方法はある。 sed、awk、perl あたりなら一行野郎でいける。 awk -F '\\(|\\)' 'length($2)>0{print $2}'
- 707 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 00:44:02 ]
- >>706
レスありがとうございます! ちなみにsedだと、どういう風になりますか?
- 708 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 02:15:09 ]
- >>706
建造物 (けんぞうぶつ) 構築物 (こうちくぶつ) 構造体 (こうぞうたい) こういうテキストのこともないかな。
- 709 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 02:19:44 ]
- $ echo '建造物 (けんぞうぶつ) 構築物 (こうちくぶつ) 構造体 (こうぞうたい)' | sed 's/[^(]*(\([^)]*\))/\1/g'
けんぞうぶつこうちくぶつこうぞうたい
- 710 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 18:20:49 ]
- 多分、作りこまないと駄目だと思うんですが、駄目元で質問します。
`find .`の結果を各ディレクトリ毎に、 第1のソートキー:ディレクトリorファイルの別(ディレクトリが先) 第2のソートキー:更新時間の降順 でソートしたものが欲しいです。 ファイルブラウザとかだと、そういう表示が出来るので、 もしかすると、簡単におこなう方法があるのかな?と密かに期待してます。 宜しくお願いします。
- 711 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 18:56:59 ]
- 普通に考えたら出来る
|

|