[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 08/05 09:21 / Filesize : 196 KB / Number-of Response : 858
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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 ってマヌケだよなぁ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<196KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef