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


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

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



1 名前:名無しさん@お腹いっぱい。 [2009/07/01(水) 09:42:48 ]
シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。

□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashなので特に注意。
 FreeBSDユーザは/bin/shの正体がashなので注意。
 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
  src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/
  heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
 (理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)

□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。

前スレ
シェルスクリプト総合 その14
pc12.2ch.net/test/read.cgi/unix/1233179688/

437 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:02:18 ]
>>368を書いた時点では、器量には容貌という意味しかないと信じ切っていたようだ。惨め過ぎる。

438 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:02:22 ]
>>436
ダウト。

単なるファイル入力のリダイレクトだから、while read でも
サブシェルにはならない。

サブシェルになるのは、echo hoge | while read みたいな
パイプの場合。

439 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:03:53 ]
>>437
違うよ。

容貌、才能、面目のすべての意味を知っていたが、
判例を挙げるにはひとつだけで十分だから、
一番意味がはっきり違う容貌を挙げただけ。

440 名前:431 [2009/09/12(土) 11:10:07 ]
>>434
>>436
>>438

なるほど!
forはfileXの行にスペース・タブ(IFS?)がある場合、行単位にならないのですね。
行単位に処理させたい場合はwhileの方が確実ですね。
勉強になりました。

サブシェルになる場合とその注意点などまだ自分にはピンと来ませんので
ちょっと勉強してみます。

ありがとうございました。


441 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:11:42 ]
>>439
もう分かったから失せろボケ

442 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:15:17 ]
>>440
サブシェルで代入したシェル変数は親シェルには伝わらない。

443 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:26:32 ]
>>434 の正解が出たあとで
間違ったことを書いてる >>436 はマヌケだなぁ。

444 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:31:23 ]
>>439
残念ながら「狭い」という用法が*無い事*を示すためには、他の例をあげるだけ
では不十分なんだ。*有る*事をしめすなら一つだけ挙げればいいがな。

恥の上塗りまだ続けるのか? 惨め惨め惨め惨め。

445 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:33:12 ]
いいかげんバカは放置しようよ



446 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:35:59 ]
>>444
いや、>>360 が、「器量」を「懐」あたりの意味と取り違えていて、
「器量」にはその意味しかないと思い込んでいると思われたので、
その反例として>>368 で「器量」の意味のひとつを挙げた。
反例にはなっている。

447 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:39:42 ]
>>446
お前が基地害だというのは充分判ったから
もういいだろ。どう足掻いてもお前に勝ち目は無いよ

448 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:43:59 ]
>>363が責任を取って氏ねば解決

449 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:44:00 ]
>>447
はためから見ると負けてるのは >>447 の方だがw

450 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:47:25 ]
「器量が狭い」を認められない器量の狭さワロス

451 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:48:59 ]
>>450
そういうのは「懐が狭い」って言うんだよ。覚えとけ。

452 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:49:33 ]
>>445
>>439のような馬鹿は半端に叩くと粘着するから。「器量」を見ただけでPTSD起こす
くらいまで叩いて置かないといけない。

>>446
なってねーよ。馬鹿。たった、「1レスくらいどうってことないだろ。器量が狭いな」だけの
発言から
> 「器量」にはその意味しかないと思い込んでいると思われたので、
このように思うって、お前が馬鹿であるという証明にしかならない。

しかも、*無い*事を示すために他の例を挙げれば済むとか。
どんだけ低脳なんだよ。惨め惨め惨めの三重奏だぜ。

453 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:51:05 ]
>>451
懐は深い/浅いだよ。覚えとけ。

454 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:53:51 ]
>>451
恥の上塗り乙

455 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:55:06 ]
>>453
あほか、
懐が深い/浅いだと意味が違う。反例になってない。



456 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 11:58:14 ]
>>455
更に恥の上塗り乙

457 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 12:02:24 ]
一般的に、>>454 >>456 みたいに「恥の上塗り」とかだけ書いて
具体的な反論を書かなくなった方が議論の負けなんだよ。

458 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 12:04:25 ]
>>457
そのルールだとファビョったほうの勝ちか?
お前のように(笑)

459 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 12:20:17 ]
まだ続くのか日本語講座

460 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 13:19:30 ]
自作自演飽きた。

461 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 13:47:48 ]
自演だと思うのは自分が自演してるからだ。

462 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 13:56:20 ]
全部おれの自演でした

463 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 13:59:07 ]
>>457が吊れば平和
とっとと逝け

464 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 14:12:22 ]
>>438
Solarisの/bin/shだとファイルリダイレクトでもサブシェルになる。


465 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 14:22:06 ]
>>464
「サブシェルになる」ことをどうやって確認した?

まさか、while read AAA の、ループを抜けた時、
AAAの内容が空になるのを見て「サブシェルだ」と思ってないだろな。

readは最後に EOF を読み込んで while を抜けるから、
ループを抜けた時 AAA は空になるが、サブシェルではない。

while read AAA
do
BBB=$AAA
done < file

echo $BBB

で試してみろ。



466 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 14:22:49 ]
SunOS4 当時の /bin/sh はどう振舞うの?

467 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 14:34:53 ]
>>465
試したけど Solarisの /bin/shだとやっぱりサブシェルだよ。

468 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/12(土) 23:49:07 ]
自信満々でダウトしといて外してるって恥ずかしくない? どんな気持ち?
>>363とか>>363とか>>363とか>>363とか>>438

469 名前:名無しさん@お腹いっぱい。 [2009/09/13(日) 01:00:33 ]
シェルスクリプトの実行者に対しy/n等で確認を求めたい場合
通常readで止めて入力を促しているのですが
while read のループの中でそれをやろうとすると上手くいきません。

while read 〜
echo "Y or N"
read YESNO ←ここで止まってくれない
〜判定処理〜
done < fileHoge


whileのreadと入力要求のreadが干渉しているのが原因のように思っています。
よい方法はありますでしょうか?
(ddやselectなども試しましたがダメでした)

470 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/13(日) 01:03:39 ]
read YESNO < /dev/tty
かな?

471 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/13(日) 01:08:19 ]
ありがとう
それやってみます!

472 名前:名無しさん@お腹いっぱい。 [2009/09/13(日) 17:59:13 ]
よく 
commandA | tee LOGFILE
などのやり方で表示しつつログをとる事があると思いますが
commandAの終了ステータスを判断したい時、この場合だと$?がteeの結果になり
commandAの終了ステータスが分りません

bashなら環境変数${PIPESTATUS[パイプライン中のコマンド位置]}
で取れることを調べられたのですが、あいにく改造母体のファイルはkshなんです。

よい方法はありますでしょうか?



473 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/13(日) 18:04:42 ]
>>472

((commandA; echo $? 1>&3) | tee LOGFILE ) 3>&1

474 名前:472 mailto:sage [2009/09/13(日) 18:22:57 ]
>>473
ありがとうございます!
明日試してみます!

475 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/13(日) 19:39:39 ]
>>473
この書き方すぐ忘れるんで、そんな時はcsh-whynotでググるんだ



476 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/13(日) 20:03:38 ]
csh(笑)

477 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/13(日) 21:17:24 ]
csh-whynotを知らずにcshを笑うとは…
爆笑だぜ。

478 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/14(月) 08:13:40 ]
ここだけ20世紀

479 名前:名無しさん@お腹いっぱい。 [2009/09/20(日) 15:13:01 ]
コマンドの引数に別のコマンド実行結果を利用する時
commandA `commandB`
とやりますが、さらにその実行結果をコマンドの引数に利用したい場合、
変数にcommandA `commandB`を入れてcommandC $変数 などとやってるのですが、
変数を使わずに出来る手法はありますでしょうか。
イメージ的には「commandC `commandA `commandB``」みたいな感じ。


480 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/20(日) 15:17:56 ]
commandC $(commandA $(commandB))

純正シェルの人は苦行に耐えて頑張ってください。

481 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/20(日) 15:34:01 ]
commandC `commandA ¥`commandB¥``

482 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/20(日) 15:40:06 ]
>>480-481

ありがとう!試してみます!


483 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/20(日) 18:46:17 ]
あるフォルダの中の*.cというファイルを~/srcというフォルダにコピーするにはどうすればいいですかね?


484 名前:名無しさん@お腹いっぱい。 [2009/09/20(日) 18:47:47 ]
スクリプト使わない質問はスレ違い

485 名前:483 mailto:sage [2009/09/20(日) 18:49:13 ]
申し訳ありませんでした。。



486 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/20(日) 18:56:39 ]
cp *.c ~/src/

487 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/20(日) 19:01:09 ]
>>486
説明不足でした。。
いくつかの階層に分かれていたのでできなかったのです。
情報後出しとか氏んどけって話ですよね。。

mv `find -name *.c` ~/src/

上のレスみて何とかなりました
もう本当にスレ汚し失礼しました。

488 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/20(日) 19:01:22 ]
>>486
やってみましたが、どうもホームフォルダの下の/srcにコピーされるようです。
?/srcというフォルダにコピーしたいんですが。

489 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/20(日) 19:14:59 ]
>>487
それだと同じ名前ぶつかってると上書きされるぞ。

490 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/20(日) 20:11:24 ]
スクリプトの中で使う場合って~と$HOMEってどっちが一般的なんですか?

491 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/20(日) 20:25:00 ]
もちろん $HOME
チルダは純正では使えない

492 名前:名無しさん@お腹いっぱい。 [2009/09/20(日) 20:46:49 ]
bash又はkshで長さが一定でないファイル名からある位置の文字を取り出したい。
具体的にはhogehoge〜XX.txtのXXの2文字。後ろから5,6文字目。
前からの位置であればcutで簡単だったのだが後ろからで行き詰った。
考えた挙句、echo ファイル名 | wc -c等で長さを取って、
それをexprで6減算した値をcutの開始位置にしてやったりして出来たのだが
たかが2文字取り出すだけなのにスマートじゃない。
もっとシンプルに行かないものでしょうか?

493 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/20(日) 21:00:31 ]
>>492
expr 'hogehoge〜XX.txt' : '.*¥(..¥).txt'

494 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/20(日) 21:16:12 ]
>>493

ありがとう今度やってみます
でもちょっと難しくて今時点でなんで期待の結果が得れるか把握しきれてないです。
exprのそういった使い方を勉強します。


495 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/20(日) 23:18:27 ]
revは環境依存?




496 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/21(月) 10:57:39 ]
>>492
fにファイル名が入っているとして
a=${f#${f%??.txt}}
echo ${a%.txt}
ではどうか。

497 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/21(月) 13:03:33 ]
bashでいいなら、
↓で一発じゃん (fileにファイル名が入っているとして)

echo ${file:$((${#file}-6)):2}

498 名前:名無しさん@お腹いっぱい。 [2009/09/21(月) 14:38:10 ]
対話的なスクリプトが二つあって
それをスクリプト同士対話させたいのですが
どのように相手の出力をもう片方の入力につなげるのでしょうか?

499 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/21(月) 14:40:43 ]
>>498
fifo

500 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/21(月) 14:46:33 ]
>>5
> シェルの対話的な利用についての話やスクリプトと関係ないコマンドの
> 使い方の質問などはスレ違いなので無用に願います。

501 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/21(月) 15:07:30 ]
>>498
双頭バイブ

502 名前:492 [2009/09/26(土) 20:45:00 ]
>>493
>>496
>>497

全て上手くできました。
ありがとう。
>>493のやつはshでもOKですね。


503 名前:名無しさん@お腹いっぱい。 [2009/09/27(日) 00:28:00 ]
スクリプトの中で他ユーザにしか実行権の無い別のスクリプトを実行するため、
su - USER -c COMMAND
としたいのですが、パスワードを求められます。
今時点ではパスワード入力をスクリプトの実行者に入力させてますが
このパスワード入力をスクリプトの中で自動で出来る方法はありますか?
ご教授お願いします。

504 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/27(日) 01:43:06 ]
>>503
sudoかexpect

505 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/28(月) 01:37:41 ]
バッククォートで実行するコマンドの標準出力と標準エラーをそれぞれ
別の変数に入れることってできますか?

やりたいことは以下と等価なんだけど、一時ファイルを作らずにやりたいんです。
stdout=`command 2>stderr.tmp`
stderr=`cat stderr.tmp`




506 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/28(月) 23:10:05 ]
>>504

すみません、Solarisなので両方とも使えませんでした。


507 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/29(火) 00:48:13 ]
Solaris なら pfexec を使うのかな

www.itmedia.co.jp/enterprise/articles/0710/24/news027_2.html

508 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/29(火) 21:59:35 ]
>>506
Solarisでsudoもexpectも使えないなんてことを書いてしまうとは・・・
ろくに調べもしないでコマンド入れ替えただけとしか思えん。


509 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/29(火) 22:17:54 ]
混ぜ物を一切していない純血Solaris

510 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/01(木) 21:34:47 ]
あるコマンドの標準出力を一行ずつ見ていって、それがある正規表現Xにマッチしてたら
コマンドAの標準入力にいれて、その標準出力を取得、それ以外なら、コマンドBの
標準入力に入れて、その標準出力を取得、その2つの標準出力を、標準入力の
順番と同じ順番でそろえて出力を得たいのですが、方法はありますでしょうか?

わかる方いたら教えていただけませんでしょうか。よろしくお願いいたします。。。

511 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/01(木) 22:00:58 ]
>>510


#!/bin/sh

while IFS= read line
do
if echo "$line" | grep -q XXX
then
a=`echo "$line" | command_A`
echo "$a"
else
a=`echo "$line" | command_B`
echo "$a"
fi
done

512 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/01(木) 22:40:13 ]
>>511
ありがとうございます。
でもこれだと、command_A、command_Bは毎入力行ごとに起動しなおすことに
なりませんでしょうか。
command_A, command_Bともに入力に応じて、内部で状態が変化するので、
ずっと起動しっぱなしにしたいのですが、そういうことはできますか?

513 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/01(木) 22:43:20 ]
後出し乙。

ハイ、次の方どうぞ


514 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/01(木) 22:51:19 ]
>>510

#!/bin/sh

(
(
while IFS= read line
do
if echo "$line" | grep -q XXX
then
echo "$line"
else
echo "$line" 1>&3
fi
done | command_A 1>&4
) 3>&1 | command_B
) 4>&1

515 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/01(木) 23:03:55 ]
command_A, command_Bに確実に一行ずつ出力させる事が出来なければ不可能。



516 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/01(木) 23:18:02 ]
>>514
素早い回答、ありがとうございます。
ファイルディスクリプタんの複製なんて、10年振りに見ました。
このスレは初探訪なのですが、スレ住人の方々はみな、このような
スクリプトを自在に操る変態さんばかりなのでしょうか。
まだまだ精進が足りないと痛切に思いました。
自在にこんなスクリプトが書けるまで、精進したいと思います....

ところで、この"grep -q" って、入力毎に起動しているようですが、
これはずっと起動しっぱなしに比べて、パフォーマンス的にはどうなんでしょう。
実はgrepのこういう多数回の起動(fork())ってそんなに大変なことではない??

517 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/01(木) 23:24:12 ]
>>515
うーむ、さきにcommand_Aの方が処理された後に、command_Bの方が
実行されるみたいですね。やっぱり無理かなぁ。

518 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/01(木) 23:24:43 ]
>>516
正規表現じゃなくて、単なるパターンマッチで良ければ、
grep -q の代わりに case文を使えば、
内部コマンドだけになるから速くなるよ。

519 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/02(金) 01:29:03 ]
シェルスクリプトを、別のシェルスクリプトの中からをバックグラウンドで実行すると
SIGINTが無視されてしまうんだけど、何とかSIGINTをトラップできる
ようにする方法ありませんか?

例えば以下のようなシェルスクリプト command.sh を作って、
#!/bin/sh
trap 'echo sigint' INT
trap -p

インタラクティブなシェルから command.sh & すれば期待通り動くんですが、
別のシェルスクリプトの中から command.sh & で呼び出すと SIGINT のハンドラが
設定されないんです。

この動作自体は一応 bsh 系の仕様っぽいですが…
Linux 上の bash 限定でも良いので、何か解決法があったら教えてください。


520 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/02(金) 06:45:21 ]
>>519
シェルスクリプトの中から、

sh -c 'set -m; command.sh &'

で呼び出す。

521 名前:名無しさん@お腹いっぱい。 [2009/10/03(土) 09:28:17 ]
>>481のやり方ってネストは2個まで?

commandD `commandC \`commandA \`commandB\`\``
でやったら上手くいかなかったような。。。(bash)

522 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/03(土) 09:42:57 ]
あたりまえ。\もエスケープしなければダメ。

523 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/03(土) 09:46:57 ]
>521

commandD `commandC ¥`commandA ¥¥¥`commandB¥¥¥`¥``


524 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/03(土) 09:48:20 ]
>>521
3個でもできるよ。

commandD `commandC ¥`commandB ¥¥¥`commandA¥¥¥`¥``

525 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/03(土) 09:50:21 ]
>>522-523
お、言われて見ればその通りだ。
ありがとぅ。



526 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/03(土) 09:51:31 ]
>>524
ありがとぅ。


527 名前:名無しさん@お腹いっぱい。 [2009/10/04(日) 17:20:27 ]
時々シェルスクリプトで簡単なツールを作ったりしてるのですが
perlを勉強してみたくなりました。

>>1
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 RubyやPerlの方が適した仕事には素直にそちらを使いましょう。

とありますが、具体的にどのような観点でシェルスクリプトとperlを使い分けするのでしょうか?
このような処理ケースではperlを使う方が効果的みたいな例を教授
(もしくはそのような事が記載されているサイトに誘導)していただけたら幸いです。


528 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/04(日) 17:26:53 ]
現状でシェルスクリプトで問題なくやってるなら、
perlなんて覚えない方がいい。

529 名前:527 mailto:sage [2009/10/04(日) 17:27:13 ]
少し調べてみてるのですがPerlは文字列処理等が得意であるというのを見ますが、
そうするとsedやawkを使う場面なんかがperlでやった方がよりよいでしょうか?

530 名前:527 mailto:sage [2009/10/04(日) 17:34:22 ]
>>528

現状、何とか目的の機能は達成してるって感じですが、
同じ事がperlなら断然簡潔かつ高速処理で出来たりするのかな?なんて思うもので。。。

531 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/04(日) 17:47:06 ]
3項演算子は両方とも評価するのか?

532 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/04(日) 18:05:40 ]
>>529
例えば一行の処理毎に、シェルスクリプトでは外部コマンドを起動する必要がある、
perlでは不要。というような場合、データが大きくなればperlの方が速くなる。

533 名前:529 mailto:sage [2009/10/04(日) 18:31:28 ]
>>532

それはテキストの一行に対して処理する事に対し、シェルスクリプトならその行数分外部コマンドが実行、
つまりシェルスクリプトでテキストの1行に1コマンド処理実行させてる場合、
100行なら100回外部コマンドが実行される事になるが
perlなら1コマンド?で処理が終了するので大きいテキストに対してだと
処理スピードに差がでるって事でしょうか?

534 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/04(日) 18:45:38 ]
テキストの一行じゃないんじゃないの。sedもawkも複数行を処理できるでしょ。
あとマルチコアプロセッサとかだと、プロセスが分かれていた方が処理が早く
終わったりもするね。

キッチンシンクアプローチとツールボックスアプローチを調べてみると良いと思うよ。

535 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/04(日) 18:58:02 ]
>>533
そう。プロセスの生成は非常にハイコスト。



536 名前:529 mailto:sage [2009/10/04(日) 19:12:23 ]
>>534-535
ありがとう。
うーん、でも完全に理解し切れてない。
何かを実現させる時、シェルスクリプトの場合複数のコマンド発行(プロセス起動)が
perlなら少プロセスで可能な場合(主にテキスト処理などで)があるって事でしょうか?

>キッチンシンクアプローチとツールボックスアプローチを調べてみると良いと思うよ。

調べてみます。

537 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/10/05(月) 00:38:28 ]
python






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

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

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