[表示 : 全て 最新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/

532 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 13:14:32 ]
>>530
FreeBSDでは ps e で、自分以外のプロセスの環境変数は表示しないようになってるよ。
嘘書くんじゃない。

533 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 13:15:56 ]
>>531
恥ずかしいなら黙ってればいいのに。
my.cnfはその他のコマンドで共通に使えるのか?

>>526
> -pオプションが使えるその他のコマンドなどでも
> 共通で使えるセキュアな方法を取りたいのですが、

534 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 13:17:32 ]
>>533

>>490
>expect以外のよい方法ってないでしょうか?

535 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 13:42:07 ]
FreeBSDのpsが自分以外の環境変数を表示してたのは前世紀の話。変更は1999年。

536 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 14:07:07 ]
「恥ずかしいなら引っ込んでなよ」が口癖の
>>530 氏の発言録:

(ps が他人のプロセスの環境変数を表示してしまう問題について)
>自称セキュリティ研究者の厨房が騒ぎ立てるまでは、環境変数が読めるのが仕様だった。
>今でも*BSDは厨房の戯言として相手にしていない。


要約すると、
「*BSDでは、psで他人のプロセスの環境変数を表示できても、それは仕様であって
それを問題視するのは自称セキュリティ研究者の戯言。
今でも*BSDではpsで他人のプロセスの環境変数を表示できる」


恥ずかしいですかwww

537 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 14:13:09 ]
>>530は取り下げよう。俺は恥は知っているからな。

538 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 14:26:28 ]
>>536
この人にとっての今はだいたい10年前と思うと辻褄が合う気がする。

>>537
> psだけの問題じゃない
も取り下げということでいいのか?

psのsetuidを落とすのがworkaroundということは普通に考えれば
ps固有の問題ということになると思うのだが。
違うなら違うでいいので具体例を出すなりして立証してくれ。
まさか引用した箇所にそう書いてあるからそうなんだとか言わんよな。

539 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 14:30:05 ]
psがsetuidで動作していたのっていつの時代? それも10年前かw

540 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 14:55:01 ]
平ユーザが ps e で他ユーザの環境変数が見えない OS でも、
実行したのが root なのであれば見えるでしょ。
別ホストで動いている mysql に接続しようとしていて、
そのホストの root がその mysql の権限を持ってないのであれば、
mysql のパスワードは root に知られちゃマズいわけで、
やっぱり環境変数でパスワードを渡すのはよろしくない。
もっとも、それをいったら chmod 600 my.cnf も同じだけどな。




541 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 14:58:03 ]
>>538
> psだけの問題じゃない
これはmysqlが言っていること、

www.google.com/codesearch?q=%2Fdev%2Fkmem&hl=en&btnG=Search+Code
これらが安全だと示してくれればオレは取り下げる。もしくは「環境変数は安全」という仕様でもよい。

542 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 15:02:51 ]
>>541
> オレは取り下げる
というのは「オレが(も)主張する」が前提だよな。当然その立証が先。

543 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 15:05:17 ]
途中で送ってしまった。

>>541
> オレは取り下げる
というのは「オレが(も)主張する」が前提だよな。当然その立証が先。
それができなきゃ取り下げざるを得ないのであって、安全だと示してくれれば
などと条件をつけられる立場ではない。

544 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 18:32:47 ]
>>543
話そらすなよ。
名無しのお前が環境変数は安全だと主張している。
mysqlの公式ドキュメントは安全だと考えていない。

権威の無いお前が安全だと立証しろ。

545 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 23:15:20 ]
>>540
rootが信用できないマシンに重要な情報を置くな。
(環境変数以前の問題でしょ?)

546 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 01:32:52 ]
>>539
かなり昔前からkmemグループによる管理だぞ。
もう20年近く立っているはず。

最近/procがいい加減なことが多いが。

547 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 06:59:36 ]
>>546
psがkmemグループ(setgid)で動作していたのっていつの時代? それも10年前かw

548 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 08:12:22 ]
>>544
自分で証明できないものだから権威とやらに頼るとは、まさしくこれだな

>>538
> まさか引用した箇所にそう書いてあるからそうなんだとか言わんよな。

話をそらしているというか露骨に逃げてるのは君の方だ。
この議論において根拠を提示できないなら意味がない。
恥を知っているというのは口先だけだったな。

549 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 11:12:51 ]
>>548
多くの人がレビューした文書と、名無しのお前の主張じゃぶっちぎりでお前のほうが信憑性が低い。
お前が立証しろ。当たり前だ。

550 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 13:16:10 ]
議論というのは発言者が誰であれ根拠に基づいて行うのが当たり前。
勝負あったな。



551 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 13:33:58 ]
つか本人が言ってたよね。

> 自称セキュリティ研究者の厨房が騒ぎ立てるまでは、環境変数が読めるのが仕様だった。

それが脆弱性としてアドバイザリまで出されてるってことは
今(10年前ではないw)は他人の環境変数は読めないのが仕様ってことでしょ。
違うというなら仕様として他人の環境変数読めるものを出してみろと。

552 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 13:36:36 ]
psに限らず、が抜けてた。

553 名前:名無しさん@お腹いっぱい。 [2008/04/02(水) 15:17:59 ]
質問があります。

shまたは、bashで、makeのように、
2つのファイルを比較して、新しいファイルが生成されている
時だけ処理をしたいのですが、shellへの理解が足りない
ためにうまく動かないので、教えてもらえると助かります。

こんな感じです。

do_iconv(){
echo "mv ${i} ${i}.old"
echo "iconv -f euc-jp -t utf-8 < ${i}.old > ${i}"
}

for i in *.html
if [ -e ${i}.old ]
then
if [[ ${i} -nt ${i}.old ]]
then
do_iconv
fi
else
do_iconv
fi
done

554 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 15:31:28 ]
>>553
> echo "iconv -f euc-jp -t utf-8 < ${i}.old > ${i}"
した時点で、${i}の方が常に${i}.oldより新しくなるじゃないか。

本当は何がしたいんだ?

555 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 15:53:19 ]
>>554
それより前に if [[ ${i} -nt ${i}.old ]] で比較してるだろ。
わからないなら黙ってろ。

556 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 15:54:56 ]
>>553
for i in *.html
の次の行に
do
が抜けてる。

557 名前:553 mailto:sage [2008/04/02(水) 15:55:02 ]
>> 554
本当は、上記に書いてますがシェルスクリプトでmake
みたいなことがしたいです。

ちなみに、
>> echo "iconv -f euc-jp -t utf-8 < ${i}.old > ${i}"
>した時点で、${i}の方が常に${i}.oldより新しくなるじゃないか。
で、ハッとして touch ${i}.old をiconvの後にしてみましたが
変わりません。

$ ls -la --time=ctime *.html
-rw-r--r-- 1 foo bar 5388 2008-04-02 14:23 SandBox.html
-rw-r--r-- 1 foo bar 4323 2008-04-02 14:06 Travel.html

$ ls -la --time=ctime *.old
-rw-r--r-- 1 foo bar 5374 2008-04-02 14:06 SandBox.html.old
-rw-r--r-- 1 foo bar 3334 2008-04-02 14:06 Travel.html.old

のようなときに、SandBox.htmlだけ iconv 処理をしたいのです。


558 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 15:56:54 ]
>>553

とりあえずforにはdoつけろな。


559 名前:553 [2008/04/02(水) 15:58:24 ]
>> 556
御指摘ども、本当のスクリプトには入れてます。

いまは要点だけ抜き出すと、下記のような感じにしています。

do_iconv(){
echo "mv ${i} ${i}.old"
echo "iconv -f euc-jp -t utf-8 < ${i}.old > ${i}"
echo "touch ${i}.old"
}

for i in *.html
do
if [ -e ${i}.old ]
then
if [[ ${i} -nt ${i}.old ]]
then
do_iconv
fi
else
do_iconv
fi
done


560 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:01:10 ]
>>557
おい、--time=ctime かよ。mtimeじゃなくて。

シェルの[[ ]] の -nt では、ctimeでの比較はできない。
mtimeのみ。
本当にctimeでやりたいんなら無理。



561 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:06:09 ]
えっと、次は、
> うまく動かない
の中身プリーズ。


562 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:06:49 ]
>>561
>>560

563 名前:553 mailto:sage [2008/04/02(水) 16:22:10 ]
>> 561

うまくいかないの、ココロは、意図は、SandBox.htmlだけ iconv したい
のですが、プログラムは SandBox.html および Travel.html の
両方を iconv しようとします。

>> 560

ctimeはダメですか。リダイレクトでファイルを作るから、ctimeでないと
ファイルの作成時刻を比較できないと思ってました。がーん、他の方法
を考えなくては


564 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:24:32 ]
makeを使えばいいんじゃないか?

565 名前:553 mailto:sage [2008/04/02(水) 16:27:05 ]
>> 564
はい。makeを使うことを考えます。
ありがとうございました>みなさん

566 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:31:00 ]
>>564-565
アフォか。
makeだって mtimeで比較するよ。
ctimeでの比較が必須なら make使ったって問題は解決しない。

(ctimeの意味を誤解していて、実はmtimeでもOKなら話は別だが)


567 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:37:06 ]
>>563
>リダイレクトでファイルを作るから、ctimeでないと
>ファイルの作成時刻を比較できない

は誤解してるようだね。

だとすると mtimeで比較して問題ないことになる。
とすると、>>559 のスクリプトでうまく動いているはず。
うまく動いているのに、>>557 で --time=ctime で見ているもんだから、
うまく動いていないと思い込んでいるだけ、というオチ。


568 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:39:24 ]
汚いシェル関数だなぁ。echo消せ。引数使え。

569 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:50:19 ]
[ ] と [[ ]] が同居するスクリプトを初めて見た。どっちかに統一しろよ。
[ ] の方推奨だが。
testの -nt は純正シェルでは使えない。
${i} なんて書くくらいなら "$i" って書け。
{ } 付けただけじゃスペース入りファイル名とかの問題回避できないぞ。

570 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 17:28:49 ]
純正シェル(笑)



571 名前:553 [2008/04/02(水) 17:52:14 ]
>> 567
誤解してました。
>> 568
shell関数まで添削してもらえるとは恐縮です。
>> 569
ありがとう。[[ ]]ではなく[ ] を使います。

あと、"$i"の記法はshellの本を注意深く読んだらちゃんと書いてありました。
下記のように直して、実行したら意図どおりに動いてます。m(_"_)m
==========================================
#/bin/bash -x
do_iconv(){
mv $1 "$1".old
/usr/bin/iconv -f euc-jp -t utf-8 < "$1".old > $1
touch "$1".old
}
for i in *.html
do
if [ -e "$i".old ]
then
if [ "$i" -nt "$i".old ]
then
do_iconv "$i"
fi
else
do_iconv "$i"
fi
done
======================================


572 名前:553 mailto:sage [2008/04/02(水) 17:52:54 ]
bash -x の実行例
+ for i in '*.html'
+ '[' -e SandBox.html.old ']'
+ '[' SandBox.html -nt SandBox.html.old ']'
+ do_iconv SandBox.html
+ mv SandBox.html SandBox.html.old
+ /usr/bin/iconv -f euc-jp -t utf-8
+ touch SandBox.html.old
+ for i in '*.html'
+ '[' -e Travel.html.old ']'
+ '[' Travel.html -nt Travel.html.old ']'
+ for i in '*.html'


573 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 19:12:56 ]
>>554の言うように、
"$i".oldの方を編集しない限り、
必ず"$i"の方が新しいのに、(iconvの結果)
> if [ "$i" -nt "$i".old ]
してる。逆に"$i".oldを編集したら何も行われない。

仕様を日本語で書いたらどうか?

たぶん.iconvedを作って、
"$i"と時間比較して新しいものだけiconv、
最後に必ずtouch .iconved、
これでやりたいことに合うんじゃないか?


574 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 19:43:56 ]
>>573
その問題は、

>>557
>touch ${i}.old をiconvの後にしてみましたが

で解決済。

というか、>>571 で、「実行したら意図どおりに動いてます。」
ですべて解決済なんだから、これ以上言うことはない。


575 名前:名無しさん@お腹いっぱい。 [2008/04/02(水) 20:00:06 ]
カレントディレクトリが
/abc/def/ghi/jkl/mno/pqr/stu/
とフルパスであったときに一番最後の部分(stu)を取り出したいのですが
どのように書けばよいのですか


576 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 20:18:40 ]
basename /abc/def/ghi/jkl/mno/pqr/stu/

577 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 20:19:16 ]
basename `pwd`

578 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 21:33:15 ]
>>551
はいはい、それがお前が出した唯一の根拠ね。
で、それが何かの標準になってるのか?

ところで、>>516ので試みた捏造に関しての弁明はどうした?

579 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 21:49:00 ]
まだやってんのかw

580 名前:sage [2008/04/05(土) 16:40:16 ]
リナックス等の研究やってます。
www.ine.sie.dendai.ac.jp/homepage/
www.ine.sie.dendai.ac.jp/wiki/index.php?FrontPage



581 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 07:37:45 ]
シェルスクリプトから以下のようなテキストを呼びだして、
環境変数を展開した上で、位置変数に set したいのですが、
お知恵を拝借したく、どうかよろしくお願いします。

$ cat test.txt
$HOME/doc/

いまは、シェルスクリプト内部で、 sed -e 's/\$HOME/$HOME/g' のようにしています。


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の日付見ればいいんじゃないの?






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

前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