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/
582 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 07:40:42 ] >>581 eval set `cat < test.txt`
583 名前:581 mailto:sage [2008/04/10(木) 08:20:51 ] >>582 どうもありがとうございます! eval を使ってもう一度、$HOMEを変数展開をするのですね。 独力では全く思いつきませんでした。 本当にありがとうございました。
584 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 08:25:30 ] >>582 catが無駄です。
585 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 08:28:30 ] >>584 catなしでどう書くの?
586 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 08:29:07 ] eval set `< test.txt`
587 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 09:30:12 ] はいはい。bash依存。
588 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 08:28:49 ] 質問です! timeコマンドの結果をファイルに出力したいのですが、 どうやっても0バイトで出力されます。 以下、やってみたことを記載します。 $ time sleep 1 real 0m1.004s user 0m0.000s sys 0m0.001s $ time sleep 1 > hoge.dat real 0m1.439s user 0m0.000s sys 0m0.001s $ cat hoge.dat $ time sleep 1 > hoge.dat 2>&1 real 0m1.009s user 0m0.000s sys 0m0.001s $ cat hoge.dat やってみたこと以上です。 なぜ出力されないのでしょうか?どのようにすれば出力されますでしょうか?
589 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 08:32:44 ] >>588 bash使ってるだろ。 timeはbashの特殊な内部コマンドで、リダイレクトできない。 解決するには一旦サブシェルを通す。 $ (time sleep 1) 2> hoge.dat
590 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 11:19:02 ] >>588 /usr/bin/timeならファイルに出力できるよ。
591 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 11:37:22 ] >>590 >>589 /usr/bin/time は表示書式が違う
592 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:39:52 ] \time
593 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:40:30 ] bashってtimeが内部コマンドなのかw
594 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:44:15 ] 正確には shell keyword
595 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:50:22 ] あれ? マニュアルではtimeじゃなくて、timesになっているけど?
596 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:51:30 ] >>595 ぉぃぉぃ、timesとtimeは全く別のコマンド
597 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:58:21 ] times Print the accumulated user and system times for the shell and for processes run from the shell. The return status is 0. ごめん。マニュアル読んだだけでは何が違うのか分からん。 それに、timeの項目自体が見つからんし。
598 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 15:05:56 ] bash なら help time
599 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 15:06:37 ] man bash なら Pipelines の節。
600 名前:名無しさん@お腹いっぱい。 [2008/04/12(土) 00:11:45 ] しぇるすぷりくとでHTML書いて ボタン押したらhoge.shを実行したい ヒントください><;
601 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 01:02:36 ] >>600 実行環境を限定しなさい。 OSは? httpサーバは? 使用可能なCGIは? CGI実行時のセキュリティ要件は?
602 名前:名無しさん@お腹いっぱい。 [2008/04/12(土) 01:29:51 ] OS: FreeBSD 6.3-RELEASE-p1 http: Apache HTTP Server 2.2.8 CGI: This is perl, v5.8.8 built for i386-freebsd-64int セキュリティ要件: 無し
603 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 01:40:48 ] >>600 すみません、日本語でお願いします。
604 名前:名無しさん@お腹いっぱい。 [2008/04/12(土) 02:00:52 ] 日本語で書いたつもりなのに文字化けしてるんですか?><
605 名前:>>588 mailto:sage [2008/04/12(土) 06:09:32 ] >>589 ありがとうございます。
606 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 06:21:07 ] これシェルスクリプトの話か・・・?
607 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 07:16:24 ] >>601 答えられないくせに実行環境だけ聞くなよ。 実行環境あまり関係ないだろ。
608 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 07:24:57 ] >>600 エスパーすると、Webのフォーム入力でシェルスクリプトを入力して [送信]ボタンを押すと、そのシェルスクリプトが実行されて、 実行結果がWeb上に表示される、って感じのものを作りたいのかな?
609 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 09:21:01 ] エスパーじゃなくてもシェルスクリプトでCGIプログラム作りたいという事はわかる、>>601 が無能なだけ。 >使用可能なCGIは? この質問に至っては噴飯ものだ。 CGI/1.1と答えればいいのだろうか? >>600 CGIというサーバー上でプログラムを動かす仕組みがあるから、検索してわからない事があったらまた来なさい。
610 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 09:52:37 ] >>609 「シェルスクリプトでCGIプログラム作りたい」のじゃなくて、(さすがにそれは知ってるだろ) ユーザーがWeb上で入力したシェルスクリプトを実行してくれるような CGIを作りたいんじゃないのか?
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 ってマヌケだよなぁ。