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


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

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



1 名前:名無しさん@お腹いっぱい。 [2007/02/15(木) 14:28:44 ]
シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>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 でトレースしましょう。

前スレ
シェルスクリプト総合 その7
pc10.2ch.net/test/read.cgi/unix/1157601611/


561 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 03:13:50 ]
Solarisなどの旧式shのtestコマンドには-eというものはない。
これは外部コマンドのtestも同様。


562 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 06:27:46 ]
>>561
ダウト。
Solarisの外部コマンド版のtestの実体はkshスクリプトだから、
Solarisでも外部コマンド版のtestには -eオプションがある。

ただし、純正Bourneには -eがないので、使わないこと推奨なのは同意。
[ -f foo ] あたりで代用だな。

563 名前:名無しさん@お腹いっぱい。 [2007/06/08(金) 08:29:58 ]
grepコマンドで検索した行の前後三行を出力するコマンドってないすか?

たとえば、以下のようなファイルがある。
----------------------------
aaa
bbb
ccc
ddd
eee
fff
ggg
----------------------------

grepコマンドをつかって、
$ grep ddd -a 333
とすると
bbb
ccc
ddd
eee
fff
と表示されるようなやつよ。

564 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 08:45:56 ]
>>563
-A とか -B とかない?

565 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 10:35:48 ]
>>563
普通にgrepだけで行けるぞ
grep -A 3 -B 3 'ddd' filename

566 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 10:44:10 ]
普通は-Aとか-Bなんてない。


567 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 11:01:46 ]
何が「普通」かなんて人それぞれでしょ。
-A がある grep とない grep がある。
それだけ。

568 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 11:02:54 ]
目的達成できるなら、それでいいじゃん

569 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 11:03:45 ]
grep -n して
sedで : より前だけ取り出して
awkにくべて前後の必要な行番号を全部計算して
sort -nuして
sedでsedのコマンドに成形しなおして
sedで抽出。
てゆうか、grepにこだわらずにawk1個の方がめちゃ楽そう。




570 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 11:04:44 ]
>>569
awkだけだとどうなるの?

571 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 11:29:37 ]
FreeBSDは変にsed使うよりawk1本に絞った方が軽い。

572 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 11:43:53 ]
複数行のテキスト整形には弱い
普通は、prelとかrubyを使う
まあ、perlとかruby使えないから聞いてるんだろうけど

573 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 11:52:15 ]
>>572
sedやgrepでどうしようかななんて考えてる時間が無駄だよな
perl覚えちゃたほうがいいのにね、これを機会に

574 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 11:55:16 ]
これを機会にGNU grep入れちゃえ。

575 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 12:00:44 ]
パタン行より前の行も表示しないといけないのでawk一本だとちょっと手間でしょ。
perlやrubyを使ってもそれは同じじゃないかな。
sed+awkなら
sed -e "$(awk '/pattern/{for (i=-2;i<=2;i++)if(i+NR>=0)print (i+NR) "{p;d;}"}' file|sort -nu)"';d' file

zshでしか試してないのでクォート回りはshだと違うかも知れんが、
だいたいこんな感じで。

576 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 12:19:38 ]
GNUは偉大だな、改めて思った

577 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 12:26:01 ]
当たり前じゃね?
だってGNU拡張は、ユーザが便利だと思うものを実装して
拡張していったんだから

きっと、>>563みたいなことを、数年前にも同じといってる人が
現れてんだよw
それで拡張されてる

578 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 12:40:49 ]
GNU sed awk grep を使いましょうね

579 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 15:54:55 ]
俺はgawk派



580 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 16:04:21 ]
ガウォーク

581 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 16:14:46 ]
GNU is Not UNIX
の意味がやっとわかったようでなにより

582 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 16:21:47 ]
んでけっきょく >>563 はどうしたの?

583 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 16:25:28 ]
GNU教に入信する準備をしてます

584 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 16:29:28 ]
しこしこ、書いてんじゃね

585 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 17:38:00 ]
mac でターミナルで操作しているのですが、safariでgoogleなどのページで
キーワードを打ち込んで検索させたりはできないものなんでしょうか?
初心者なんで仕組みなどわかりませんので構造上できないものなら教えてください

586 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 17:49:58 ]
>>585
pc11.2ch.net/mac/

587 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 21:02:22 ]
シェルスクリプトとGUIアプリの連携ってか?

588 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 22:41:28 ]
質問です!
---hoge.txt---
aaa
bbb
ccc

これを

---hoge.txt---
aaa
ccc

こうしたい。

sed -i "s/bbb//g" hoge.txtだと

---hoge.txt
aaa

ccc

こうなってしまう・・・

589 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 22:49:06 ]
sed -i -e '/bbb/d'



590 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 23:03:06 ]
>>589
ありがとうございます!


591 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 23:37:42 ]
GNU sedは正規表現のエスケープまわりが腐ってるんだよなあ
それに、わざわざBourne Shellに縛ったスレなのに、GNU拡張に依存するのもどうかと思う
ポータビリティも勘案すると、perl使った方がいい

592 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/09(土) 10:18:52 ]
GNU grepの-oは便利

593 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/09(土) 11:53:54 ]
>>592
モレも-Po がマジ便利だと思う。


594 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/09(土) 12:23:49 ]
それを言ったらshよりzshのが便利だ

595 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/09(土) 12:49:24 ]
そうだよ

596 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/09(土) 14:42:53 ]
FreeBSDよりWIndowsのが便利だ

597 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/09(土) 14:54:08 ]
当たり前だろ

598 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/09(土) 15:01:51 ]
perlの書法がもっと自由度低かったら決定版たったのだが。
お行儀悪く書けてしまうのが悩みの種

599 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/10(日) 01:08:21 ]
お行儀良く書きたいならRubyなりPythonなりへ行けば良い
お行儀悪く書いても心が痛まないのがPerlの長所



600 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/10(日) 01:10:39 ]
use strict; するんだからそれほどひどいコードにはならないような

601 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/10(日) 22:37:24 ]
どーせワンライナーか数行でやれるようなのしかPerlで書かないから
どうでもいい

602 名前:名無しさん@お腹いっぱい。 [2007/06/15(金) 02:31:42 ]
cshを勉強し始めたものです。
研究室で使うためです。
C言語もほとんど知らないので、取っ付きにくく、苦労してます。

今よく分からないのは、シェル変数と環境変数です。
普通に話に出てくるのですが、変数だとは理解してますが、違いが分かりません…

どなたか教えて頂けませんか?


603 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/15(金) 02:41:57 ]
シェル変数はシェルが使う
環境変数は(主に)呼び出されたコマンドが使う

それはいいとして、なんでcshかちゃんと確認しろ
csh使う必然性がなければ、shにしとけ


604 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/15(金) 03:12:03 ]
環境変数は子プロセスに引き継がれる。
シェル変数はそのシェルのみが使い、
子プロセスに引き継がれない。

605 名前:602 [2007/06/16(土) 01:09:53 ]
レス有り難うございます。

なぜcshなのかと言うと、 今研究室で使われてるのがcshだとしか…

Cで書かれたソースプログラムをcshに渡して、
結果を他のプログラムに渡して……
って感じらしいです。

まだ学部なので、難しいプログラムは書けず、
既成のプログラムの値を変えて走らせたりするようです。

最近の課題が、あるcshの中身を渡され、理解してくるものでしたが、
プログラムの知識が無い自分にはさっぱりというわけです…



606 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 01:58:47 ]
そんなに何種類もcshがあるのか?

607 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 03:31:44 ]
cshで書かれたシェルスクリプトってとこじゃないか?


608 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 15:17:35 ]
いや、cshの中身だぞ?

609 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 15:47:46 ]
とりあえず>>605よ、
cshの中身というのはcshスクリプトという意味か?




610 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 16:11:27 ]
こらこら、cshの話はもう終り。禁止。

611 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 16:53:10 ]
GNU grepの話をしてもいいなら、cshも良くないか

612 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 18:01:05 ]
良くない。

613 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 18:02:26 ]
シェルスクリプトのスレでシェルのソースコードの話かぁ……

614 名前:名無しさん@お腹いっぱい。 [2007/06/16(土) 19:35:05 ]
質問です。

ファイルの内容が同じものをリストアップする目的で、
対象ファイルのmd5sumを計算したいと考えています。
ただし、ファイルが大きいと時間がかかってしまうので、まずはファイル頭の
512バイトだけでmd5sumしたいです。以下のようなものを書いたのですが、
ファイル数が多い(1000とか)とプロセスの起動がボトルネックになってしまう
ようで、遅いです。

while read -r filename
do
dd if="${filename}" ibs=512 count=1 2> /dev/null | md5sum >> output
done < ${tempfile_prefix}2_filesize_onajiyatu

md5sumに先頭から512バイトだけで計算しろと指示することはできますか?
もしくは何かいい案ありますでしょうか?



615 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 19:45:20 ]
えろ画の整理スクリプトかよ

616 名前:名無しさん@お腹いっぱい。 [2007/06/16(土) 19:49:09 ]
違います。
エロ動画です。
だからでかいのです。

617 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 19:52:32 ]
>>614
プロセス起動がネックならperlとかpythonとかrubyとか好きなのでやれ。

618 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 19:53:08 ]
>>614
perl を使う

619 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 20:02:27 ]
まずはファイルサイズで比較すればいいのに



620 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 20:11:47 ]
粗く分けるのにmd5なんか使わんでも。
>>619 の通りファイルサイズが手軽だし、もし同じサイズで内容が違うものが
沢山ならファイル中の適当なところをhexdumpでもいいんじゃないの。

621 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 20:37:43 ]
横から済まぬが

>>619,620

>> ${tempfile_prefix}2_filesize_onajiyatu

って書いてあるから、そもそも同じサイズ限定ではないのか?

622 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 20:40:36 ]
同じファイルサイズのものだけでも1000ファイルもあるって、
結構集めまくったね、絵炉動画をw

623 名前:名無しさん@お腹いっぱい。 [2007/06/16(土) 21:03:28 ]

>617,618
perlか・・・ついに手を出すときが来たか

>619,621
失礼しました。サイズ比較をあらかじめこんなのでやってます。
ls -l "$@" | sed 's/ \+/ /g' | cut -d ' ' -f 5,8 > ${tempfile_prefix}1_filesize_all
awk '{ if(a[$1,0]==0){a[$1,0]=1;a[$1,1]=$0;} else{if(a[$1,0]==1){print a[$1,1];} a[$1,0]++;print $0;} }' \
${tempfile_prefix}1_filesize_all > ${tempfile_prefix}2_filesize_onajiyatu

>620
ためしに512byteのgomi.txtを作ってみて、以下試しました。
%time (for i in `seq 1 1000`; do cat gomi.txt > /dev/null 2>&1 ; done;)
-> 1.486sec
%time (for i in `seq 1 1000`; do md5sum gomi.txt > /dev/null 2>&1 ; done;)
-> 1.510sec
これくらいのサイズだと処理内容はあまり影響なさそうです。
md5sumの方が比較しやすかったのです。

>622
いやいや、得ろ動画とか1000個とか例えばの話ですよw


624 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 00:32:06 ]
>>614
まずは、ファイルサイズではじいたら?

625 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 00:34:24 ]
すまん。@bitwarpなもんで、更新漏れだった。
忘れてくれ

626 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 03:14:21 ]
xargsでもつかえば?

627 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 04:00:08 ]
気が向いたんでやってみた

$ time (for f in tmp/*; do dd if=$f bs=512 count=1 2>/dev/null | md5sum; done)
065d30715dcffa21596406373a9124ac -
...中略...
ed4cf7b8f209f9ce630b5e76219357ae -
(; for f in Desktop/*(.); do; dd if=$f bs=512 count=1 2> /dev/null | md5sum; ) 0.09s user 0.38s system 49% cpu 0.960 total

$ time perl -M'Digest::MD5(md5_hex)' -e 'for (@ARGV) { open F,"<$_"; read F,$a,512; print md5_hex($a),"¥n" }' tmp/*
065d30715dcffa21596406373a9124ac
...中略...
ed4cf7b8f209f9ce630b5e76219357ae
perl -M'Digest::MD5(md5_hex)' -e Desktop/*(.) 0.02s user 0.02s system 18% cpu 0.193 total


628 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 17:51:50 ]
xargs使えって

629 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 20:19:20 ]
絵炉動画ファイルは、ファイル名にスペースとか特殊記号とか入りまくりである
ことが多いため、xargsは全く持って不適当。



630 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 21:13:28 ]
それならfor文やreadでも難しくならないか・・
まxargsのほうがもっと不適当なのだろうが


631 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 21:16:22 ]
>>629
man xargs

632 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 21:24:09 ]
>>631 は何がしたいんだろうか? まったく外してるわけだが、、

633 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 21:26:16 ]
>>631
$ ssh solarishost man xargs

634 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 21:33:38 ]
ファイル名の問題以前に、個々のファイルごとに頭の512バイトを切り出したいわけ
だから、xargs使ったところでプロセス起動数は節約できない。
よって、>>626 >>628 は全く的はずれ。

635 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 21:34:10 ]
>>632
はずしているのはお前の方。

find 〜 -print0 | xargs --null

636 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 21:47:33 ]
>>635
はずしているのはお前の方。

-print0 や xargs --null は、一般には使えない。(たとえばSolaris)

あと、>>634 が指摘してるように、今回の件は xargsでは解決しない。

よって、そういう意味でも外しているのは >>635 の方。

637 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 22:10:53 ]
-print0で喜んでるのは石器人。
現代人はふつー find ... -exec ... +

638 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 22:21:02 ]
>>632 から某頭の悪い粘着君臭がする。


639 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 23:03:19 ]
て言うか、プロセス起動数が云々と言うなら md5sum を改造するなり、
ファイル名の取得からハッシュの計算までやるようなアプリ作ればい
いじゃん。



640 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 23:14:55 ]
>>617-618で既に正答が出てるの何を今更…

641 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/18(月) 00:13:31 ]
答えそのものも>627に出てるわけだが...

642 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/18(月) 00:36:28 ]
#find ... -exec ... +
横レスだが知らなかった
ってか手元のmanにはない

643 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/18(月) 03:34:11 ]
最後の「+」ってなに?

644 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/18(月) 08:19:20 ]
xargsは同じプロセスを連続起動するから
工夫されていると聞いたことがある。
これは事実?


645 名前:名無しさん@お腹いっぱい。 [2007/06/18(月) 15:14:11 ]
基礎的な質問ですいません。

bashで、シェル変数に値を突っ込み -zで存在を確認する手法ですが、

if [ -z $test ] ; then
 echo "val exist"
else
 echo "val isn't exist"


質問
1.[ -z $test ] と書くのはよろしくない?
2.[ -e $test ] とすると、シェル変数が存在しない時に真、
  シェル変数が存在する時に偽となるのはなぜ?


結構、このパターンで利用してたのですが、2.の動作を確認すると、
なぜだか逆になっているような。じゃ、-zもよろしくないのかなぁ、と

ところで、みなさんは、環境変数やシェル変数の存在確認をどうやってますか?
宜しくお願いします。


646 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/18(月) 15:23:43 ]
>>645
まず、[ ] の中ではシェル変数は基本的にダブルクォートを付けること。

[ -z "$test" ] とする。この場合、$testがセットされていれば偽になる。
これだと真偽が逆になってわかりにくいので、
[ -n "$test" ] または -n は省略できるので [ "$test" ] とする。

[ -e $test ] は、$testがセットされていない時、[ -e ] となってしまい、
これは、"-e" という文字列がサイズゼロかどうか(この場合は2バイト)という
判定がなされるため、$testがセットされていないと真になる。
一方、$testがセットされていると、今度は -e は -eオプションとして解釈され、
$testの中身がファイル名とみなされるため、そんなファイルがなければ偽になる。

更に言うと、-e は Bourne shでは使えないため非推奨。

647 名前:名無しさん@お腹いっぱい。 [2007/06/18(月) 15:39:39 ]
>>646
ありがとうございます。
うーーん、なるほど。1行目でよく分かりました。

648 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/18(月) 16:11:12 ]
丁寧に説明してもらった理由を理解したのかしてないのかよくわからん回答だな

649 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/18(月) 16:12:07 ]
このあたりものこともあって zsh で手抜きスクリプト書くことが多くなった



650 名前:名無しさん@お腹いっぱい。 [2007/06/18(月) 16:24:47 ]
>>648
舌足らずですみません。
1行目で自分の間違いを気付き、
詳しい説明をしていただいたので助かりました、と書きたかったところでした。

-eオプションの非推奨コメントは特に助かります。

651 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/18(月) 21:09:56 ]
      ______
    /          )))
   /   /// /―――-ミ
   / 彡彡 // /      ヽ))
   / 彡彡 iiiiiiiiiiiiiii  iiiiiiiiii|
   / 彡彡 < ・ > 、<・ >l
  /    |       ヽ   〉
  /  ( | |      __)  |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  /   | ≡  /, ―――  |ゝ < 馬鹿共にshellを与えるな!
  /   |   |  L ___」 l ヾ  \_________
_ミ  l   ______ノ ゞ_
  |  l ヾ    ー   / |  l
  |  |   \ー    ‐/  |  |


652 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 08:10:33 ]
>>646

>>更に言うと、-e は Bourne shでは使えないため非推奨。

?????



653 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 08:30:50 ]
>>652
教えて欲しいんなら「???」じゃなくて、ちゃんと日本語で書け。初心者君。

654 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 09:19:43 ]
ところで-eがないshが標準で載ってるOSってどれ?

655 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 09:36:14 ]
Solarisとか。SCOとか。Tru64とか。

656 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 11:36:15 ]
>>655
今では使われていないOSばかりですね。じゃあ、-e使ってもいいですねw

657 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 11:45:45 ]
つっ、釣られないぞ

658 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 13:41:51 ]
>>653
では日本語で書かせていただきます。
私が学習に使用している O'REILLY の「詳解シェルスクリプト」によりますと、
/bin/sh 組込の test コマンドに於ける -e 表現は標準的なものとして記述され
POSIX で定義している旨明記されております。また更に今回の議題の発端である
>>645 質問子の環境と共通する bash 等での独自の拡張に付いて記述した件では、
条件判定構文中の -a 演算子について(非推奨です。 -e を使いましょう)
とまで明記されているものを、使用者の環境の多用性や使用目的の別など勘案せず
一言の下に「非推奨」と断定できる根拠を教えてください。 お願いします。

659 名前:646じゃないけど mailto:sage [2007/06/19(火) 13:47:32 ]
>>658
「Bourne shでは使えないため」って書いてあるじゃん。
それが重要かどうかは各自が判断すればいいこと。



660 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 13:51:15 ]
>>658
POSIXは理想論ばかりで、現実に即してないんだよ。
いくらPOSIXでどうこう言っても、実際に動くかどうかがすべて。
test -e については、Solarisの/bin/shで動かないんだから、
OS共通のシェルスクリプトでは非推奨であるのは当然。

あと、別件で、-e の意味で -aを使ってはいけない(非推奨)なのはその通りだよ。
-a は別に ANDの演算子の意味があって、そちらの意味で使うべきだからね。

わかったら、今後は -e を使うなよ。今まで書いたシェルスクリプトで
-e を使ってるのがあったら、気づき次第直しとけよ。

661 名前:658 mailto:sage [2007/06/19(火) 14:12:59 ]
予想通りの回答をどうもありがとうございました。

>>わかったら、今後は -e を使うなよ。今まで書いたシェルスクリプトで
-e を使ってるのがあったら、気づき次第直しとけよ。

ご心配有り難うございます。
そもそも機能が曖昧過ぎて過ぎて使おうと思ったことも御座いませんw






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

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

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