シェルスクリプト総合 ..
409:名無しさん@お腹いっぱい。
09/09/11 22:10:27
>>395
流れ良め。
>>378 は>>371 に書かれている文章が
「旧カナ遣いだけど古語ではない」って言ってるんだよ。
間違いだろ。馬鹿。
410:名無しさん@お腹いっぱい。
09/09/11 22:24:41
>>409
>>395 = >>378だ。
俺は
> 旧カナ遣いは「古語」ではない。
と言った。改変するな。クズ。
411:名無しさん@お腹いっぱい。
09/09/11 22:28:28
>>378 は、
>>377 が >>371 を見て、「古語」と言ったのを受けて
>>378 で 旧カナ遣いは「古語」ではない、と言った。
一般論としてではなくて、
>>371 の文章が旧カナ遣いであって古語ではない、と言った。
明らかに間違い。
412:名無しさん@お腹いっぱい。
09/09/11 22:31:40
>>408
>>360はスレ違いはともかく、用法は間違っていないな。
>>363って、恥かいて悦ぶ趣味?
413:名無しさん@お腹いっぱい。
09/09/11 22:37:18
「才能が狭い」
「技量が狭い」
「面目が狭い」
どれもおかしい。
よって「器量が狭い」は誤用。
414:名無しさん@お腹いっぱい。
09/09/11 23:01:12
>>411
また捏造かよ。恥知らず。
>>371 の「リヤウ」を指して「旧カナ遣いは『古語』ではない」と言ったんだよ。わかるか? 馬鹿。
広辞苑を「古語辞典」といった本当の理由は>>377の馬鹿じゃないと分らないが、
「リヤウ」をみて古語辞典と誤解したと思ったんだよ。
他に広辞苑を「古語辞典」という理由がお前は思い当たるのか?
>>377はもう出てこないだろうから真相は藪の中だが。
逃亡するくらいならしゃしゃりでてこなきゃ良いのに。馬鹿を自覚しつーの。
415:名無しさん@お腹いっぱい。
09/09/11 23:05:53
>>414
>「リヤウ」をみて古語辞典と誤解したと思ったんだよ。
ハハハ、そんなところ見てないよ。
古語と言ったのは用例の平家物語とかのところだよ。
結局古語でしか用例を示せてない辞書だから古語辞典だと思ったのだろう。
416:名無しさん@お腹いっぱい。
09/09/11 23:11:17
古語が載ってれば「古語辞典」と思うような馬鹿が存在するとは想定の範囲外だ。
>>377 お前は馬鹿過ぎ。出入り禁止。二度と発言すんな。
417:名無しさん@お腹いっぱい。
09/09/12 08:05:08
>>413
>>372,393
418:名無しさん@お腹いっぱい。
09/09/12 09:08:07
辞書に載ってるのは、
「顔立ち」「才能、技量」「面目」の3点なのに、
>>372 が「才能」の意味に「心の広さ」を勝手に追加してる件に付いて。
419:名無しさん@お腹いっぱい。
09/09/12 09:10:41
=================器量の話は終了=================
=================器量の話は終了=================
=================器量の話は終了=================
=================器量の話は終了=================
=================器量の話は終了=================
=================器量の話は終了=================
420:名無しさん@お腹いっぱい。
09/09/12 09:46:40
>>418が勝手に3点に絞ってる件
421:名無しさん@お腹いっぱい。
09/09/12 09:54:20
度量(どりょう)が大きい
「器量(きりょう)が大きい」は誤り。心が広いということ。「度量」は心の広さ、「器量」は力量や容姿。
URLリンク(starscafe.net)
422:名無しさん@お腹いっぱい。
09/09/12 09:56:42
UNIX使う人ってどうでもいいことで延々と語るのが好きな人が多いのなだよもんだよもんだよもん
*BSDのマスコットは
423:名無しさん@お腹いっぱい。
09/09/12 10:08:13
goo辞書
URLリンク(dictionary.goo.ne.jp)
きりょう ―りやう 1 【器量】
補足説明「器」は才能のあること。「量」は心の大きさ、徳のあること
(1)物の役に立つ才能・力量。
+ 「人の上に立つ―をもった人物」
(2)主に女性について、容貌(ようぼう)。顔立ち。みめ。
+ 「―がよい」
(3)主に男性について、その人の面目。価値。
+ 「―を上げる」
>>418
see 補足説明
424:名無しさん@お腹いっぱい。
09/09/12 10:10:12
ゆとりは器量が狭いのぅ
425:名無しさん@お腹いっぱい。
09/09/12 10:16:52
>>424
誤用用語を使って自己紹介乙
426:名無しさん@お腹いっぱい。
09/09/12 10:24:59
器量良しの意味しか無いと思い込んでた馬鹿が悪い
>>363の事だが
427:名無しさん@お腹いっぱい。
09/09/12 10:25:51
>>423
その補足説明は「器量」という熟語自体の意味の説明にはなっていないよ。
補足説明は「器」と「量」の単漢字の意味の説明だから。
熟語になると意味が変わる。
428:名無しさん@お腹いっぱい。
09/09/12 10:26:30
>>425
器量の狭い小者乙
429:名無しさん@お腹いっぱい。
09/09/12 10:29:29
俺は器量が広く度量があり、そして器量良しの女房がいる。
お前らカスと一緒にすんな。
430:名無しさん@お腹いっぱい。
09/09/12 10:34:47
間違いを認められずに醜態を晒し続ける>>363,>>368,>>377は典型的な小丈夫だな。
スレ違いの話題を振って絡んでおきながら、大外しって惨め過ぎる。
大辞泉
URLリンク(dic.yahoo.co.jp)
しょう-じょうふ【小丈夫】
1 小柄な男。2 器量の狭い人物。小人物。
431:名無しさん@お腹いっぱい。
09/09/12 10:40:12
有識者諸兄殿
シェルスクリプトの勉強中で、教えていただきたい。
@while read AAA ; do 〜 ; done < fileX
Afor AAA in `cat fileX`; do 〜 ; done
の違いを教えて下さい。
処理スピードや処理(do 〜 )での柔軟性、fileXが小さい場合と大きい場合での違いなど。
よろしくお願いします。
432:名無しさん@お腹いっぱい。
09/09/12 10:43:09
普段から言葉を大事に使わないからイザとなったら慌てて辞書に頼り表面の意味だけを捉えて赤っ恥をかく。
>>363,368,377がその例だろう。
433:名無しさん@お腹いっぱい。
09/09/12 10:48:44
>>430
だれも「小丈夫」の話なんかしてないよ。的はずれな指摘。
「器量」の項目を引いて出直せ。
434:名無しさん@お腹いっぱい。
09/09/12 10:53:10
>>431
機種依存文字使うな。
whileの方は、1行毎にループ処理される。
forの方は、改行だけでなく、スペース・タブでも区切られて
それぞれに付いてループ処理される。
435:名無しさん@お腹いっぱい。
09/09/12 10:54:20
>>433
>慌てて辞書に頼り表面の意味だけを捉えて
一つ上のレスの意味すら理解できないんだな。
お前につける薬は無いな
436:名無しさん@お腹いっぱい。
09/09/12 10:57:53
>>431
シェルスクリプトスレで訊けよ
ひとこと言うなら、スペースの有無とかfileXの大きさとかより
(1)の do〜doneがサブシェルになることが注意
437:名無しさん@お腹いっぱい。
09/09/12 11:02:18
>>368を書いた時点では、器量には容貌という意味しかないと信じ切っていたようだ。惨め過ぎる。
438:名無しさん@お腹いっぱい。
09/09/12 11:02:22
>>436
ダウト。
単なるファイル入力のリダイレクトだから、while read でも
サブシェルにはならない。
サブシェルになるのは、echo hoge | while read みたいな
パイプの場合。
439:名無しさん@お腹いっぱい。
09/09/12 11:03:53
>>437
違うよ。
容貌、才能、面目のすべての意味を知っていたが、
判例を挙げるにはひとつだけで十分だから、
一番意味がはっきり違う容貌を挙げただけ。
440:431
09/09/12 11:10:07
>>434
>>436
>>438
なるほど!
forはfileXの行にスペース・タブ(IFS?)がある場合、行単位にならないのですね。
行単位に処理させたい場合はwhileの方が確実ですね。
勉強になりました。
サブシェルになる場合とその注意点などまだ自分にはピンと来ませんので
ちょっと勉強してみます。
ありがとうございました。
441:名無しさん@お腹いっぱい。
09/09/12 11:11:42
>>439
もう分かったから失せろボケ
442:名無しさん@お腹いっぱい。
09/09/12 11:15:17
>>440
サブシェルで代入したシェル変数は親シェルには伝わらない。
443:名無しさん@お腹いっぱい。
09/09/12 11:26:32
>>434 の正解が出たあとで
間違ったことを書いてる >>436 はマヌケだなぁ。
444:名無しさん@お腹いっぱい。
09/09/12 11:31:23
>>439
残念ながら「狭い」という用法が*無い事*を示すためには、他の例をあげるだけ
では不十分なんだ。*有る*事をしめすなら一つだけ挙げればいいがな。
恥の上塗りまだ続けるのか? 惨め惨め惨め惨め。
445:名無しさん@お腹いっぱい。
09/09/12 11:33:12
いいかげんバカは放置しようよ
446:名無しさん@お腹いっぱい。
09/09/12 11:35:59
>>444
いや、>>360 が、「器量」を「懐」あたりの意味と取り違えていて、
「器量」にはその意味しかないと思い込んでいると思われたので、
その反例として>>368 で「器量」の意味のひとつを挙げた。
反例にはなっている。
447:名無しさん@お腹いっぱい。
09/09/12 11:39:42
>>446
お前が基地害だというのは充分判ったから
もういいだろ。どう足掻いてもお前に勝ち目は無いよ
448:名無しさん@お腹いっぱい。
09/09/12 11:43:59
>>363が責任を取って氏ねば解決
449:名無しさん@お腹いっぱい。
09/09/12 11:44:00
>>447
はためから見ると負けてるのは >>447 の方だがw
450:名無しさん@お腹いっぱい。
09/09/12 11:47:25
「器量が狭い」を認められない器量の狭さワロス
451:名無しさん@お腹いっぱい。
09/09/12 11:48:59
>>450
そういうのは「懐が狭い」って言うんだよ。覚えとけ。
452:名無しさん@お腹いっぱい。
09/09/12 11:49:33
>>445
>>439のような馬鹿は半端に叩くと粘着するから。「器量」を見ただけでPTSD起こす
くらいまで叩いて置かないといけない。
>>446
なってねーよ。馬鹿。たった、「1レスくらいどうってことないだろ。器量が狭いな」だけの
発言から
> 「器量」にはその意味しかないと思い込んでいると思われたので、
このように思うって、お前が馬鹿であるという証明にしかならない。
しかも、*無い*事を示すために他の例を挙げれば済むとか。
どんだけ低脳なんだよ。惨め惨め惨めの三重奏だぜ。
453:名無しさん@お腹いっぱい。
09/09/12 11:51:05
>>451
懐は深い/浅いだよ。覚えとけ。
454:名無しさん@お腹いっぱい。
09/09/12 11:53:51
>>451
恥の上塗り乙
455:名無しさん@お腹いっぱい。
09/09/12 11:55:06
>>453
あほか、
懐が深い/浅いだと意味が違う。反例になってない。
456:名無しさん@お腹いっぱい。
09/09/12 11:58:14
>>455
更に恥の上塗り乙
457:名無しさん@お腹いっぱい。
09/09/12 12:02:24
一般的に、>>454 >>456 みたいに「恥の上塗り」とかだけ書いて
具体的な反論を書かなくなった方が議論の負けなんだよ。
458:名無しさん@お腹いっぱい。
09/09/12 12:04:25
>>457
そのルールだとファビョったほうの勝ちか?
お前のように(笑)
459:名無しさん@お腹いっぱい。
09/09/12 12:20:17
まだ続くのか日本語講座
460:名無しさん@お腹いっぱい。
09/09/12 13:19:30
自作自演飽きた。
461:名無しさん@お腹いっぱい。
09/09/12 13:47:48
自演だと思うのは自分が自演してるからだ。
462:名無しさん@お腹いっぱい。
09/09/12 13:56:20
全部おれの自演でした
463:名無しさん@お腹いっぱい。
09/09/12 13:59:07
>>457が吊れば平和
とっとと逝け
464:名無しさん@お腹いっぱい。
09/09/12 14:12:22
>>438
Solarisの/bin/shだとファイルリダイレクトでもサブシェルになる。
465:名無しさん@お腹いっぱい。
09/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:名無しさん@お腹いっぱい。
09/09/12 14:22:49
SunOS4 当時の /bin/sh はどう振舞うの?
467:名無しさん@お腹いっぱい。
09/09/12 14:34:53
>>465
試したけど Solarisの /bin/shだとやっぱりサブシェルだよ。
468:名無しさん@お腹いっぱい。
09/09/12 23:49:07
自信満々でダウトしといて外してるって恥ずかしくない? どんな気持ち?
>>363とか>>363とか>>363とか>>363とか>>438
469:名無しさん@お腹いっぱい。
09/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:名無しさん@お腹いっぱい。
09/09/13 01:03:39
read YESNO < /dev/tty
かな?
471:名無しさん@お腹いっぱい。
09/09/13 01:08:19
ありがとう
それやってみます!
472:名無しさん@お腹いっぱい。
09/09/13 17:59:13
よく
commandA | tee LOGFILE
などのやり方で表示しつつログをとる事があると思いますが
commandAの終了ステータスを判断したい時、この場合だと$?がteeの結果になり
commandAの終了ステータスが分りません
bashなら環境変数${PIPESTATUS[パイプライン中のコマンド位置]}
で取れることを調べられたのですが、あいにく改造母体のファイルはkshなんです。
よい方法はありますでしょうか?
473:名無しさん@お腹いっぱい。
09/09/13 18:04:42
>>472
((commandA; echo $? 1>&3) | tee LOGFILE ) 3>&1
474:472
09/09/13 18:22:57
>>473
ありがとうございます!
明日試してみます!
475:名無しさん@お腹いっぱい。
09/09/13 19:39:39
>>473
この書き方すぐ忘れるんで、そんな時はcsh-whynotでググるんだ
476:名無しさん@お腹いっぱい。
09/09/13 20:03:38
csh(笑)
477:名無しさん@お腹いっぱい。
09/09/13 21:17:24
csh-whynotを知らずにcshを笑うとは…
爆笑だぜ。
478:名無しさん@お腹いっぱい。
09/09/14 08:13:40
ここだけ20世紀
479:名無しさん@お腹いっぱい。
09/09/20 15:13:01
コマンドの引数に別のコマンド実行結果を利用する時
commandA `commandB`
とやりますが、さらにその実行結果をコマンドの引数に利用したい場合、
変数にcommandA `commandB`を入れてcommandC $変数 などとやってるのですが、
変数を使わずに出来る手法はありますでしょうか。
イメージ的には「commandC `commandA `commandB``」みたいな感じ。
480:名無しさん@お腹いっぱい。
09/09/20 15:17:56
commandC $(commandA $(commandB))
純正シェルの人は苦行に耐えて頑張ってください。
481:名無しさん@お腹いっぱい。
09/09/20 15:34:01
commandC `commandA ¥`commandB¥``
482:名無しさん@お腹いっぱい。
09/09/20 15:40:06
>>480-481
ありがとう!試してみます!
483:名無しさん@お腹いっぱい。
09/09/20 18:46:17
あるフォルダの中の*.cというファイルを~/srcというフォルダにコピーするにはどうすればいいですかね?
484:名無しさん@お腹いっぱい。
09/09/20 18:47:47
スクリプト使わない質問はスレ違い
485:483
09/09/20 18:49:13
申し訳ありませんでした。。
486:名無しさん@お腹いっぱい。
09/09/20 18:56:39
cp *.c ~/src/
487:名無しさん@お腹いっぱい。
09/09/20 19:01:09
>>486
説明不足でした。。
いくつかの階層に分かれていたのでできなかったのです。
情報後出しとか氏んどけって話ですよね。。
mv `find -name *.c` ~/src/
上のレスみて何とかなりました
もう本当にスレ汚し失礼しました。
488:名無しさん@お腹いっぱい。
09/09/20 19:01:22
>>486
やってみましたが、どうもホームフォルダの下の/srcにコピーされるようです。
?/srcというフォルダにコピーしたいんですが。
489:名無しさん@お腹いっぱい。
09/09/20 19:14:59
>>487
それだと同じ名前ぶつかってると上書きされるぞ。
490:名無しさん@お腹いっぱい。
09/09/20 20:11:24
スクリプトの中で使う場合って~と$HOMEってどっちが一般的なんですか?
491:名無しさん@お腹いっぱい。
09/09/20 20:25:00
もちろん $HOME
チルダは純正では使えない
492:名無しさん@お腹いっぱい。
09/09/20 20:46:49
bash又はkshで長さが一定でないファイル名からある位置の文字を取り出したい。
具体的にはhogehoge〜XX.txtのXXの2文字。後ろから5,6文字目。
前からの位置であればcutで簡単だったのだが後ろからで行き詰った。
考えた挙句、echo ファイル名 | wc -c等で長さを取って、
それをexprで6減算した値をcutの開始位置にしてやったりして出来たのだが
たかが2文字取り出すだけなのにスマートじゃない。
もっとシンプルに行かないものでしょうか?
493:名無しさん@お腹いっぱい。
09/09/20 21:00:31
>>492
expr 'hogehoge〜XX.txt' : '.*¥(..¥).txt'
494:名無しさん@お腹いっぱい。
09/09/20 21:16:12
>>493
ありがとう今度やってみます
でもちょっと難しくて今時点でなんで期待の結果が得れるか把握しきれてないです。
exprのそういった使い方を勉強します。
495:名無しさん@お腹いっぱい。
09/09/20 23:18:27
revは環境依存?
496:名無しさん@お腹いっぱい。
09/09/21 10:57:39
>>492
fにファイル名が入っているとして
a=${f#${f%??.txt}}
echo ${a%.txt}
ではどうか。
497:名無しさん@お腹いっぱい。
09/09/21 13:03:33
bashでいいなら、
↓で一発じゃん (fileにファイル名が入っているとして)
echo ${file:$((${#file}-6)):2}
498:名無しさん@お腹いっぱい。
09/09/21 14:38:10
対話的なスクリプトが二つあって
それをスクリプト同士対話させたいのですが
どのように相手の出力をもう片方の入力につなげるのでしょうか?
499:名無しさん@お腹いっぱい。
09/09/21 14:40:43
>>498
fifo
500:名無しさん@お腹いっぱい。
09/09/21 14:46:33
>>5
> シェルの対話的な利用についての話やスクリプトと関係ないコマンドの
> 使い方の質問などはスレ違いなので無用に願います。
501:名無しさん@お腹いっぱい。
09/09/21 15:07:30
>>498
双頭バイブ
502:492
09/09/26 20:45:00
>>493
>>496
>>497
全て上手くできました。
ありがとう。
>>493のやつはshでもOKですね。
503:名無しさん@お腹いっぱい。
09/09/27 00:28:00
スクリプトの中で他ユーザにしか実行権の無い別のスクリプトを実行するため、
su - USER -c COMMAND
としたいのですが、パスワードを求められます。
今時点ではパスワード入力をスクリプトの実行者に入力させてますが
このパスワード入力をスクリプトの中で自動で出来る方法はありますか?
ご教授お願いします。
504:名無しさん@お腹いっぱい。
09/09/27 01:43:06
>>503
sudoかexpect
505:名無しさん@お腹いっぱい。
09/09/28 01:37:41
バッククォートで実行するコマンドの標準出力と標準エラーをそれぞれ
別の変数に入れることってできますか?
やりたいことは以下と等価なんだけど、一時ファイルを作らずにやりたいんです。
stdout=`command 2>stderr.tmp`
stderr=`cat stderr.tmp`
506:名無しさん@お腹いっぱい。
09/09/28 23:10:05
>>504
すみません、Solarisなので両方とも使えませんでした。
507:名無しさん@お腹いっぱい。
09/09/29 00:48:13
Solaris なら pfexec を使うのかな
URLリンク(www.itmedia.co.jp)
508:名無しさん@お腹いっぱい。
09/09/29 21:59:35
>>506
Solarisでsudoもexpectも使えないなんてことを書いてしまうとは・・・
ろくに調べもしないでコマンド入れ替えただけとしか思えん。
509:名無しさん@お腹いっぱい。
09/09/29 22:17:54
混ぜ物を一切していない純血Solaris
510:名無しさん@お腹いっぱい。
09/10/01 21:34:47
あるコマンドの標準出力を一行ずつ見ていって、それがある正規表現Xにマッチしてたら
コマンドAの標準入力にいれて、その標準出力を取得、それ以外なら、コマンドBの
標準入力に入れて、その標準出力を取得、その2つの標準出力を、標準入力の
順番と同じ順番でそろえて出力を得たいのですが、方法はありますでしょうか?
わかる方いたら教えていただけませんでしょうか。よろしくお願いいたします。。。
511:名無しさん@お腹いっぱい。
09/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:名無しさん@お腹いっぱい。
09/10/01 22:40:13
>>511
ありがとうございます。
でもこれだと、command_A、command_Bは毎入力行ごとに起動しなおすことに
なりませんでしょうか。
command_A, command_Bともに入力に応じて、内部で状態が変化するので、
ずっと起動しっぱなしにしたいのですが、そういうことはできますか?
513:名無しさん@お腹いっぱい。
09/10/01 22:43:20
後出し乙。
ハイ、次の方どうぞ
↓
514:名無しさん@お腹いっぱい。
09/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:名無しさん@お腹いっぱい。
09/10/01 23:03:55
command_A, command_Bに確実に一行ずつ出力させる事が出来なければ不可能。
516:名無しさん@お腹いっぱい。
09/10/01 23:18:02
>>514
素早い回答、ありがとうございます。
ファイルディスクリプタんの複製なんて、10年振りに見ました。
このスレは初探訪なのですが、スレ住人の方々はみな、このような
スクリプトを自在に操る変態さんばかりなのでしょうか。
まだまだ精進が足りないと痛切に思いました。
自在にこんなスクリプトが書けるまで、精進したいと思います....
ところで、この"grep -q" って、入力毎に起動しているようですが、
これはずっと起動しっぱなしに比べて、パフォーマンス的にはどうなんでしょう。
実はgrepのこういう多数回の起動(fork())ってそんなに大変なことではない??
517:名無しさん@お腹いっぱい。
09/10/01 23:24:12
>>515
うーむ、さきにcommand_Aの方が処理された後に、command_Bの方が
実行されるみたいですね。やっぱり無理かなぁ。
518:名無しさん@お腹いっぱい。
09/10/01 23:24:43
>>516
正規表現じゃなくて、単なるパターンマッチで良ければ、
grep -q の代わりに case文を使えば、
内部コマンドだけになるから速くなるよ。
519:名無しさん@お腹いっぱい。
09/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:名無しさん@お腹いっぱい。
09/10/02 06:45:21
>>519
シェルスクリプトの中から、
sh -c 'set -m; command.sh &'
で呼び出す。
521:名無しさん@お腹いっぱい。
09/10/03 09:28:17
>>481のやり方ってネストは2個まで?
commandD `commandC \`commandA \`commandB\`\``
でやったら上手くいかなかったような。。。(bash)
522:名無しさん@お腹いっぱい。
09/10/03 09:42:57
あたりまえ。\もエスケープしなければダメ。
523:名無しさん@お腹いっぱい。
09/10/03 09:46:57
>521
commandD `commandC ¥`commandA ¥¥¥`commandB¥¥¥`¥``
524:名無しさん@お腹いっぱい。
09/10/03 09:48:20
>>521
3個でもできるよ。
commandD `commandC ¥`commandB ¥¥¥`commandA¥¥¥`¥``
525:名無しさん@お腹いっぱい。
09/10/03 09:50:21
>>522-523
お、言われて見ればその通りだ。
ありがとぅ。
526:名無しさん@お腹いっぱい。
09/10/03 09:51:31
>>524
ありがとぅ。
527:名無しさん@お腹いっぱい。
09/10/04 17:20:27
時々シェルスクリプトで簡単なツールを作ったりしてるのですが
perlを勉強してみたくなりました。
>>1に
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
とありますが、具体的にどのような観点でシェルスクリプトとperlを使い分けするのでしょうか?
このような処理ケースではperlを使う方が効果的みたいな例を教授
(もしくはそのような事が記載されているサイトに誘導)していただけたら幸いです。
528:名無しさん@お腹いっぱい。
09/10/04 17:26:53
現状でシェルスクリプトで問題なくやってるなら、
perlなんて覚えない方がいい。
529:527
09/10/04 17:27:13
少し調べてみてるのですがPerlは文字列処理等が得意であるというのを見ますが、
そうするとsedやawkを使う場面なんかがperlでやった方がよりよいでしょうか?
530:527
09/10/04 17:34:22
>>528
現状、何とか目的の機能は達成してるって感じですが、
同じ事がperlなら断然簡潔かつ高速処理で出来たりするのかな?なんて思うもので。。。
531:名無しさん@お腹いっぱい。
09/10/04 17:47:06
3項演算子は両方とも評価するのか?
532:名無しさん@お腹いっぱい。
09/10/04 18:05:40
>>529
例えば一行の処理毎に、シェルスクリプトでは外部コマンドを起動する必要がある、
perlでは不要。というような場合、データが大きくなればperlの方が速くなる。
533:529
09/10/04 18:31:28
>>532
それはテキストの一行に対して処理する事に対し、シェルスクリプトならその行数分外部コマンドが実行、
つまりシェルスクリプトでテキストの1行に1コマンド処理実行させてる場合、
100行なら100回外部コマンドが実行される事になるが
perlなら1コマンド?で処理が終了するので大きいテキストに対してだと
処理スピードに差がでるって事でしょうか?
534:名無しさん@お腹いっぱい。
09/10/04 18:45:38
テキストの一行じゃないんじゃないの。sedもawkも複数行を処理できるでしょ。
あとマルチコアプロセッサとかだと、プロセスが分かれていた方が処理が早く
終わったりもするね。
キッチンシンクアプローチとツールボックスアプローチを調べてみると良いと思うよ。
535:名無しさん@お腹いっぱい。
09/10/04 18:58:02
>>533
そう。プロセスの生成は非常にハイコスト。
536:529
09/10/04 19:12:23
>>534-535
ありがとう。
うーん、でも完全に理解し切れてない。
何かを実現させる時、シェルスクリプトの場合複数のコマンド発行(プロセス起動)が
perlなら少プロセスで可能な場合(主にテキスト処理などで)があるって事でしょうか?
>キッチンシンクアプローチとツールボックスアプローチを調べてみると良いと思うよ。
調べてみます。
537:名無しさん@お腹いっぱい。
09/10/05 00:38:28
python
538:名無しさん@お腹いっぱい。
09/10/05 02:27:03
オライリーのミニマルPerlって本があって、
sh&sed&awk の粗探しをして Perl への移行を薦めるような内容なんだが、
これ読むと逆に、とくに大規模でもないテキスト処理なら
シェルで無問題じゃんって感じなんだよね。
Perlが受けたのは、第一に実装が優秀で速かったのと、
あと Perl はベル研系の厳格な雰囲気がないというか、
何となく書いて動いちゃうとこがある。そのへんの寛容さが人気の秘密かと
539:名無しさん@お腹いっぱい。
09/10/05 15:57:27
結局適材適所と、それを判断出来る能力の問題だと思うよ。
シェルスクリプトで遅いなら、perlなりでやる。それでも遅いならCとか。
540:名無しさん@お腹いっぱい。
09/10/05 18:06:14
echoで最後に改行したくない場合、
echo -n "unko"
では期待通りに出力されるのですが、
echo "unko\c"
だとunko\cと改行して出力されてしまいます。
Cygwinで\cに対応させるにはどうしたらよいでしょうか。
よろしくお願いいたします。
541:名無しさん@お腹いっぱい。
09/10/05 18:15:13
>>541
CygwinということはGNU coreutilsのechoか。
-e オプション?
542:540
09/10/05 19:05:48
>>541
おおお、ありがとうございます。
$ echo -e "unko\c"
で期待通り
unko$
と出力ができました。
本番の環境はHP-UXを使用しておりまして、
逆に-eオプションが無い(?)ため、
$ echo -e "unko\c"
とした場合、
-e unko$
と出力されてしまいすが、とりあえず、
alias echo='echo -e'
で解決いたしました。
ありがとうございました!!!!
543:名無しさん@お腹いっぱい。
09/10/05 21:56:31
そのへんの移植性に関するバッドノウハウはGNU autotoolsに詰まってる。
544:名無しさん@お腹いっぱい。
09/10/21 12:16:25
RCSで、チェックイン済みの最新リビジョンと、そのひとつ前のリビジョンを比較
ということをよくやります。
今は、rlog -r fileで最新リビジョン番号を調べて、たとえば 1.123 だったとすると、
頭の中でリビジョンを1引いて、rcsdiff -r -r1.122 file みたいに実行しています。
これを1発でやるシェルはできませんか?
あ、sed/awk等でゴニョゴニョやる方法じゃなく(それしかないなら自分でやるので)、
奇麗にエレガントにやる方法を希望します。
545:名無しさん@お腹いっぱい。
09/10/21 18:10:19
よく知らないで申し訳ないが
current=`rlog -r file | grep 'なんとか'`
current=`expr $current - 0.001`
rcsdiff -r -$current file
空白とか改行とか考慮せずかなり適当に書いたけど。
exprでできないならbc使えばできるかもしれない。
546:名無しさん@お腹いっぱい。
09/10/21 18:32:38
それはエレガントじゃないらしいよ
547:名無しさん@お腹いっぱい。
09/10/21 20:25:10
シェルってゆうな。クズ。
548:名無しさん@お腹いっぱい。
09/10/21 22:12:01
エレガントさが求められていたのか
知らんかったよ、すまん
549:名無しさん@お腹いっぱい。
09/10/21 22:41:49
奇麗でエレガントな質問を募集します。
550:名無しさん@お腹いっぱい。
09/10/24 13:10:57
>>545
エレガント云々を除いてもそれじゃ駄目だよ。
リビジョン番号は、 1.8 1.9 1.10 1.11 ... 1.99 1.100 1.101 ...
って進むから、expr で 0.001 引くのは全然見当違い。
551:名無しさん@お腹いっぱい。
09/10/26 22:08:08
どうしてもわからないので質問させてください。
#!/bin/sh
DIR=`pwd`
cd $DIR/file
./play
のようにC言語で記述したplayファイルを実行しているのですが
play内では簡単に表すと以下のような処理をしています
while(true){
ファイルの読み込み処理
sleep(1);
}
このように1秒ごとにファイルを監視してるのですが
シェルスクリプトで実行すると1秒待たずにwhileループが回っているのですが
どうすればよいのでしょうか?
552:名無しさん@お腹いっぱい。
09/10/26 22:13:23
>>551
そのwhileループの具体的なスクリプトを出さずに質問したいなら、
エスパースレに池。
sleepコマンド自体が文法またはオプションエラーになってて
1秒待ててないんじゃないの?
553:名無しさん@お腹いっぱい。
09/10/26 22:15:27
問題点を人に伝える能力が欠けすぎ
554:名無しさん@お腹いっぱい。
09/10/26 22:17:39
>>552
whileループはC言語で書いてるんだろ。(プログラムは出てるじゃん)
コマンドラインで直接 ./play を実行すると1秒毎に処理されるのに、
>>551 のシェルスクリプト経由で ./play を実行すると1秒待たずにループする、
という話だろ。
555:名無しさん@お腹いっぱい。
09/10/26 22:20:28
で、答えは?
556:名無しさん@お腹いっぱい。
09/10/26 22:20:58
>>551
sleep()関数はシグナルで中断される可能性がある。
シグナルが到着すればsleep(1)は1秒未満で終了する。
代わりにnanosleep()使え。
たぶん、シェルスクリプト経由の時だけシグナルが発生するような
別の条件が加わってるんだろ。
557:名無しさん@お腹いっぱい。
09/10/26 22:36:54
>>551
play コマンド側は特に何もせずシェルスクリプト側で sleep 1; すればいいんじゃね?
558:名無しさん@お腹いっぱい。
09/10/26 22:58:35
>>556
ありがとうございます。
試してみましたが同じ状態になりました。
説明が不足していてすみません
GNU Chessを改造していたので、その部分のコードを切り抜いても分かりづらいので自分なりに説明したのですが、説明力がなくてすみません。
ファイルの読み込み部分の処理は
while(true){
sleep(1);
if(rlogfp=fopen("./black.log","r")){
fgets(inp, MAXSTR, rlogfp);
fclose(rlogfp);
remove("./black.log");
break;
}
}
black.logというのは次の手を指定した文字列が収められているファイルです。
C言語で書くのもうまくないので下手なコードですが、ご了承ください。
559:名無しさん@お腹いっぱい。
09/10/26 23:01:09
>>557
whileで監視しているのでsleep(1)がないとファイル作成時に読み込みが実行されるのか、うまくデータが受け取れないので
sleep(1)を追加している次第です。
560:名無しさん@お腹いっぱい。
09/10/26 23:39:32
後からこんなことを追加するのはすみませんが
どうやら監視しているファイルが存在しないのに、ファイルがあるように動いているみたいで、
ファイル読み込む→whileを抜け出す→間違った手だと解釈→whileに入りファイルを読み込む
を繰り返すようになっているみたいです。
シェルスクリプトではなくターム上で実行するとうまくいくのに
スクリプトだとこの現象がおこるのはどういったわけでしょうか?
561:名無しさん@お腹いっぱい。
09/10/26 23:56:55
>>560
シェルスクリプトの cd $DIR/file あたりがうまく行ってないとか。
別のディレクトリの black.logを読んでループしてるとか。
562:名無しさん@お腹いっぱい。
09/10/27 00:11:19
>>561 レスありがとうございます
他のディレクトリではblack.logは生成していないのでそのケースはないかと思います
ディレクトリの場所も間違いはないです
563:名無しさん@お腹いっぱい。
09/10/27 00:23:15
sleepはループの先頭なの?それなら確実に1秒待つでしょ?
説明に一貫性がないと回答者も混乱するし、いいことないよ。
あとは、fgets, fclose, removeの戻り値をちゃんとチェックしてみる。
564:名無しさん@お腹いっぱい。
09/10/27 00:30:07
ぱおーん
ってそれはエレファント
565:名無しさん@お腹いっぱい。
09/10/27 00:40:24
>>551
>シェルスクリプトで実行すると1秒待たずにwhileループが回っている
これはどうやって確認したの?
原因を切り分ける為に、問題を再現出来る最小限の
プログラムを作ってみると良いと思うよ。
566:名無しさん@お腹いっぱい。
09/10/27 00:46:46
>>563,565
アドバイス通り明日調べてみます。
567:名無しさん@お腹いっぱい。
09/10/27 08:05:15
>>559
> whileで監視しているのでsleep(1)がないと
> ファイル作成時に読み込みが実行されるのか、
> うまくデータが受け取れないので
busy waitになるだけでちゃんと動くはずだろ。
だから動かないのは、sleep()以外のところがおかしい。
568:名無しさん@お腹いっぱい。
09/10/27 11:08:26
そのファイル、NFS かなんかの領域に置いてないか?
おかしなキャッシュが効いてるような気がする。
569:名無しさん@お腹いっぱい。
09/10/27 11:38:40
>>568
特に変わった場所には置いてません。
とりあえずthreadやwhileループとファイルの読み込みの部分だけ同じ形でtestファイルを作ってみたのですが
直接実行、シェルスクリプトで実行で共に問題がなかったので、もっと別の場所だと分かりました。
もう少し試行錯誤してみたいと思います。
570:名無しさん@お腹いっぱい。
09/10/27 12:26:31
ちょっと説明が長くなるのでアップロードしてみました。
お手数をおかけしてもうしわけありません。
DLkey:unix
URLリンク(www1.axfc.net)
571:名無しさん@お腹いっぱい。
09/10/27 13:04:39
input_threadが動き出す前にwait_for_inputに入ると、
input_statusが初期値(INPUT_NONE)のままなので、whileを抜けてしまう。
572:名無しさん@お腹いっぱい。
09/10/27 21:14:09
test が表示されないという現象はウチでは一度も再現しませんでした。
Dual Core の Mac です。
外してたらスマソ。
test.sh を実行する
Ctrl-C で test.sh を止める
a.out のプロセスは残ったまま
とかじゃないよね?
まあそれでも test が表示されない理由にはなりませんけど。
573:名無しさん@お腹いっぱい。
09/10/27 21:50:45
一度目がその症状があって
もう一度試したら治っていました
>>571
どのように記述すれば回避できるのでしょうか?
丸投げのようですみません^^;
574:名無しさん@お腹いっぱい。
09/10/28 00:03:20
以前動作していたスクリプトが動かなくなってしまいました…
ここ最近kshのアップデートを行ったのが原因なのでしょうか…
何か情報をお持ちの方いらっしゃいましたらご教授願います。
<事象>
特に問題なく見えるkshがsyntax Error `(' unexpectedで異常終了
コメント内のスペースを1つ削除or2つ追加すると正常に動作する
<やったこと>
kshとbashのアップデート
ksh 20060214-1.4 → 20080202-14.el5
bash bash3.1-16.1 → bash3.2-21.el5
<環境>
redhat Linux 5.1
uname -a結果
Linuc 2.6.18-53.el5 #1 SMP Wed Oct 10 16:34:19 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux
<備考>
ksh -nで構文チェックをかけると、構文エラー以外に「" quote may be missing」という警告が必ずついてきます。
コメントを弄ってエラーを抑止するとこの警告も発生しなくなります。
575:551
09/10/28 00:05:16
. play.shで実行したらうまく動きました。
結局原因はわかりませんでしたが、サブシェルだと何か環境とちがったのかな?と素人ながら思います。
お騒がせしてすみませんでした。
576:名無しさん@お腹いっぱい。
09/10/28 00:59:40
それたまたまだから
577:名無しさん@お腹いっぱい。
09/10/28 01:16:52
while(true)なんてしないで、openの返り値でなんとかならんの?
578:名無しさん@お腹いっぱい。
09/10/28 07:06:37
>>574
おいおい、redhat 5.1というのは10年くらい前のOSで、
カーネルは2.0の時代のもの。(libc5からやっとglibc2に変わった時代)
カーネル2.6で動くわけがない。
579:574
09/10/28 11:18:44
>>578
今確認したところ、redhat 5.1ではなく
RHEL 5.1でした
redhatLINUXとRHELを混同していました
申し訳ありません
580:名無しさん@お腹いっぱい。
09/10/28 11:43:19
>>574
スクリプト晒せ
581:名無しさん@お腹いっぱい。
09/10/28 11:44:15
libc5なつかしいな。
glibc2(libc6)になってようやくLANG関係がマトモになったんだっけ
582:名無しさん@お腹いっぱい。
09/10/28 11:44:22
どうせShift_JISのコメントだろ。
583:574
09/10/28 23:54:47
>>580
手元にスクリプトがない上に動く動かないの条件がよく分からないので再現できず…
申し訳ないです。
>>582
コメント等もう一度文字コードを見直しましたが、すべてUTF-8でした。
584:名無しさん@お腹いっぱい。
09/10/28 23:56:51
手元にスクリプトがないのにコメント等見直した?意味が分からんのだが
585:名無しさん@お腹いっぱい。
09/10/28 23:57:32
不思議な話だなw
586:名無しさん@お腹いっぱい。
09/10/29 22:50:29
LOTO6用の数字列を生成する
for x in $(seq 1 5); do echo $(seq 1 43 | shuf | head -6 | sort -n); done
587:名無しさん@お腹いっぱい。
09/10/30 23:17:20
>>586
for((i=0;i++<5;)){ echo `shuf -i 1-43 -n 6 | sort`; }
↑の方が簡単
588:名無しさん@お腹いっぱい。
09/11/10 09:10:20
質問です。記法1と2では違いがありますか?どちらが正しいとか…
doの後に改行入れるべきかどうなのか,ということですが。
記法1
for i in *
do
echo $i
done
記法2
for i in *
do \
echo $i
done
589:名無しさん@お腹いっぱい。
09/11/10 09:48:42
>>588
記法2は間違いではないがバックスラッシュが余分。
もともと do の直後には、空白、タブまたは改行の区切り文字があればなんでも良い。
「行の継続」をする必要はないので、バックスラッシュは不要。
590:588
09/11/10 11:02:41
>>589
ありがとうございました。
591:名無しさん@お腹いっぱい。
09/11/10 11:33:58
今のトレンドは↓の書き方。
bash依存じゃないぞ。純正シェルでもちゃんと動くから安心して使え。
for i in *
{
echo $i
}
592:名無しさん@お腹いっぱい。
09/11/10 11:37:50
どこのトレンドだよwwwww
593:名無しさん@お腹いっぱい。
09/11/10 11:43:46
for は { ... } でもいいけど、
while は do ... done じゃないといかんというのがアレ。
594:名無しさん@お腹いっぱい。
09/11/12 08:07:11
kshで標準出力と標準エラーをデフォルトでファイル&画面に出力するやり方はありますか?
毎行、| tee -a hoge.log を書くのが大変なので。
595:名無しさん@お腹いっぱい。
09/11/12 08:19:07
>>594
(
command1
command2
command3
:
) 2>&1 | tee -a hoge.log
596:名無しさん@お腹いっぱい。
09/11/12 08:41:02
>>594
scriptコマンドは?
597:名無しさん@お腹いっぱい。
09/11/12 08:58:07
俺はそういうとき
telnet localhost | tee hoge.log
ってやってる
598:名無しさん@お腹いっぱい。
09/11/12 09:27:34
正解(>>595)が出た後にボケ回答(>>596-597)が出てくる、の法則
599:名無しさん@お腹いっぱい。
09/11/13 19:18:09
自分よりいい答えが出たのがそんなに悔しかったのか
600:名無しさん@お腹いっぱい。
09/11/13 19:57:03
> 毎行、| tee -a hoge.log を書くのが大変なので。
毎行と言っているし、ここはシェルスクリプトスレなのでスクリプトの中での記述に
関しての質問だと言う事が容易に予想できる。
スクリプトに関しての質問にscript使えだの、telnetをリダイレクトしろだの、
ボケまくりの回答してる奴らは何なのだろう?
匿名掲示板だからボケ回答も恥ずかしくないのだろうか?
601:名無しさん@お腹いっぱい。
09/11/14 03:03:51
必死だなw
602:名無しさん@お腹いっぱい。
09/11/20 10:11:52
>>599
只の知ったかだろ
半角数字とか学生の分際で早くも理系気取りかよ
603:名無しさん@お腹いっぱい。
09/11/20 10:44:29
>>602
日本語で頼むわ……
604:名無しさん@お腹いっぱい。
09/11/20 20:00:12
> 半角数字とか学生の分際で早くも理系気取りかよ
これは新コピペになりそうな気がする
605:名無しさん@お腹いっぱい。
09/11/21 01:23:51
>>604
新コピペとか学生の分際で早くも理系気取りかよ
…こんな感じ?
606:名無しさん@お腹いっぱい。
09/11/21 02:02:27
bashを使用しています。
数字が入っている変数に3桁毎にカンマを入れる方法が分かりません。
どうやれば3桁毎にカンマを入れれるようになりますか?
607:名無しさん@お腹いっぱい。
09/11/21 12:27:50
>>606
printf "%'d" "$var"
608:名無しさん@お腹いっぱい。
09/11/21 22:05:46
>>607
これはいいことを聞いたと、試してみたができないぞ?
$ bash --version
GNU bash, version 4.0.28(2)-release (i686-pc-linux-gnu)
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4259日前に更新/233 KB
担当:undef