シェルスクリプト総合 その29at TECH
シェルスクリプト総合 その29 - 暇つぶし2ch374:デフォルトの名無しさん
19/05/03 21:28:48.60 wXl0ssRE.net
同じ出力のデータを分けて処理することは可能だが、なぜ魔法文にこだわっているのかがわからない。

375:デフォルトの名無しさん
19/05/03 21:31:24.78 m+FxQhlt.net
>>374
その話は関係ないから打ち切ろう
あるツールが「引数で指定した同じファイルを二回読込みしている」
そういう処理をしている。(そのツールの修正は不可能)
ここまでは理解しているかな?

376:デフォルトの名無しさん
19/05/03 21:32:23.63 m+FxQhlt.net
まあ結論としては無理ってわかってんだけどさ
bashの拡張を持ってしても

377:デフォルトの名無しさん
19/05/03 21:35:32.54 m+FxQhlt.net
あ、一時ファイル(FIFOファイル含む)作りたくないっていうのが最終的な希望ね。
メモリだけ(tmpfsや類似のメモリベースのファイルシステムやブロックデバイス除く)でやりたい。
無理ってわかってるけど。

378:デフォルトの名無しさん
19/05/03 23:01:24.06 wXl0ssRE.net
ただの無知か。

379:デフォルトの名無しさん
19/05/04 09:14:36.29 HnSBFy63.net
>>371
例がないと何を言っているか意味がよく分からない。
teeとかファイルに出力しながら標準出力にも出力しているけど、
そのようなことがbashだけで表現できればOK?

380:デフォルトの名無しさん
19/05/04 09:40:10.00 eyQzK648.net
>>379
「リダイレクトを受け付けないコマンド」例
ファイル内容と行数を表示するために「同じファイルを二回読み込む」
これは "例" でありこのコマンドの内容についてのレスは不要
実際には中身はわからずバイナリで修正不可能なものとする。
#!/bin/sh
cat "$1"
wc -l "$1"

↑このコマンドに対して、一時ファイル(FIFOファイル含む)を作らないでデータを渡す

381:デフォルトの名無しさん
19/05/04 09:47:38.10 HnSBFy63.net
>>380
ファイルを作らないでメモリだけでっていうことなら、
↓こんな感じならOKなの?
dat=$(cat $1)

382:デフォルトの名無しさん
19/05/04 09:57:48.90 eyQzK648.net
>>381
それでもいいよ
何をしたいのかわからんけど
kono-comand ?
↑?の部分になんて書く?

383:デフォルトの名無しさん
19/05/04 10:01:46.67 eyQzK648.net
明らかに読み間違えてるレスがくると疲れるんで、
一時ファイルを使った場合の例も書いておくは
これは例なんで、この例を修正しろなんてレスは不要
generate-text > /tmp/test.txt
kono-comand "/tmp/test.txt"
この一時ファイル test.txt を作りたくない
なんで?とかいう質問も不要

384:デフォルトの名無しさん
19/05/04 10:05:16.07 HnSBFy63.net
>>383
ホントに意味が分からないんだは、
上の例でもこれでいいんじゃないのと思っちゃう。
generate-text | kono-comand
だからこれを直せってほうが意味通じるかも。

385:デフォルトの名無しさん
19/05/04 10:05:29.00 ic6F2rX1.net
条件の説明が下手すぎ

386:デフォルトの名無しさん
19/05/04 10:07:09.78 eyQzK648.net
>>384
本当に疲れる。
>>371を読み返せ。
> リダイレクトを受け付けないコマンドに、一時ファイル作らずに渡せると思ったけど、
> リダイレクトを受け付けないコマンド
> リダイレクトを受け付けないコマンド
> リダイレクトを受け付けないコマンド
パイプもリダイレクトだ。

387:デフォルトの名無しさん
19/05/04 10:08:50.78 eyQzK648.net
っていうか、
generate-text | kono-comand
kono-commandの内容は上に書いたとおり↓で
> #!/bin/sh
> cat "$1"
> wc -l "$1"
修正不可能つってるんだから
これでは動きません。の一言でよかったなw
>>385
動かないコードを書いる時点で説明の問題じゃない。

388:デフォルトの名無しさん
19/05/04 10:09:39.22 ic6F2rX1.net
>>384
コマンドが標準入力をサポートしてない場合のだろう、よってパイプが使えない
標準入力サポートしていてパイプでいいだろうというコマンド例を挙げてくるとか説明が下手すぎなだけだろうなw

389:デフォルトの名無しさん
19/05/04 10:10:34.97 eyQzK648.net
>>388
あ、回答者の説明が下手すぎってことかw

390:デフォルトの名無しさん
19/05/04 10:10:41.51 ic6F2rX1.net
いつもの自信過剰な人か

391:デフォルトの名無しさん
19/05/04 10:11:55.19 eyQzK648.net
>>390
ん?今回はへこましてみるか?
俺「やっぱできないよなぁ」
→ 俺もできないと思うよ。
で終わればいいやん。

392:デフォルトの名無しさん
19/05/04 10:15:59.85 ic6F2rX1.net
標準入力もデバイス(ファイル)としてある

393:デフォルトの名無しさん
19/05/04 10:16:50.69 eyQzK648.net
URLリンク(hogem.hatenablog.com)
> diff -u hoge.out fuga.out
> diff <(./hoge) <(./fuga)
よくこんな感じで、一時ファイルを作らない例として挙げられてるけど、
これって、diffが引数のファイルを一度しか読み込まないという
内部実装に依存しているってことなんだよな。
だから複数回読み込んでいたりすると使えない。
一度しか読み込まないという仕様はないだろうから
たまたま使えたということ。

394:デフォルトの名無しさん
19/05/04 10:17:09.83 eyQzK648.net
>>392
知ってる

395:デフォルトの名無しさん
19/05/04 10:23:29.06 ic6F2rX1.net
ストリームでいいのかファイルでなければならないのか条件説明がやっぱり下手すぎ
標準入出力は普通は単なるストリームで戻ったりはしたない、一気通貫するだけ
2度読み??とかストリームでないなら当然ファイルにしなければならないだろうに、あたりまえだろう。結局あたりまえのことを確認したいだけなのか。例で上げてくるのがストリームでいいだろうのを出すから下手なんだよ

396:デフォルトの名無しさん
19/05/04 10:24:53.38 eyQzK648.net
>>395
これを満たせばいいだけ。
いい加減にしろや

「リダイレクトを受け付けないコマンド」例
ファイル内容と行数を表示するために「同じファイルを二回読み込む」
これは "例" でありこのコマンドの内容についてのレスは不要
実際には中身はわからずバイナリで修正不可能なものとする。
#!/bin/sh
cat "$1"
wc -l "$1"

↑このコマンドに対して、一時ファイル(FIFOファイル含む)を作らないでデータを渡す

397:デフォルトの名無しさん
19/05/04 10:26:01.06 eyQzK648.net
はは。catとwcでファイル読み込みを二回実行してるから、
ストリームでは無理なことにも気づいてない(笑)
マヌケか

398:デフォルトの名無しさん
19/05/04 10:26:07.92 ic6F2rX1.net
それが下手だと言ってもわからないんだな

399:デフォルトの名無しさん
19/05/04 10:27:31.82 eyQzK648.net
>>398
どこが下手なのか言ってないからね。
ストリームで不可能な例を見て、
これストリームで可能じゃん!って
言ってしまった時点で、お前の負け

400:デフォルトの名無しさん
19/05/04 10:30:40.72 eyQzK648.net
俺が言いたいのは、
> diff <(./hoge) <(./fuga)
が使えるかどうかは、コマンド(この場合はdiff)の
内部実装に依存するから、試してみるまでわからないということ、
ファイルじゃないと二度読みはできないとかそういう話はしてない。

<(./hoge)が使えるかどうかは、コマンド次第という話をしてる
どんなコマンドだって、一度読むだけで実装することは可能(メモリに読み込めばいい)
だから、<(./hoge)が使えるかどうかはやってみるまでわからんのだよな。
という話をしてる。

401:デフォルトの名無しさん
19/05/04 10:31:29.76 ic6F2rX1.net
>>384
というように、
cat "$1" | wc -l
したいわけじゃないんだよ。後は後出しでいろいろ言ってくるだろう

402:デフォルトの名無しさん
19/05/04 10:32:27.87 eyQzK648.net
ということを、とあるファイルを引数にするコマンドを
一時ファイルを作らないでやろうとして
あれ?となった次第。
そのコマンド、一度だけしか読まないでできるように思えるんだけどな。

403:デフォルトの名無しさん
19/05/04 10:33:45.55 eyQzK648.net
> cat "$1" | wc -l
> したいわけじゃないんだよ。
>>380 を読めばそれぐらいわかる

404:デフォルトの名無しさん
19/05/04 10:36:59.95 ic6F2rX1.net
catやwcなんぞ各コマンドの入力ソースはストリームでしかないので、できないことはないけどな。お前には教えないがw

405:デフォルトの名無しさん
19/05/04 10:38:28.81 eyQzK648.net
>>404
> これは "例" でありこのコマンドの内容についてのレスは不要
あーあ、やっちまった。コマンドの内容にレスしたね(笑)

406:デフォルトの名無しさん
19/05/04 10:40:23.60 ic6F2rX1.net
>>405
>>385 そう言うなら、当然これを受け入れろな

407:デフォルトの名無しさん
19/05/04 10:40:24.64 eyQzK648.net
例だから、実際にはcatやwcが使われているわけじゃないのに
catやwcなんぞとかwww

408:デフォルトの名無しさん
19/05/04 10:40:58.27 eyQzK648.net
>>406
自分の理解力のなさを自覚するように。
こっちは、ちゃんと例を出してる。
その例を満たせなかった時点でアウト

409:デフォルトの名無しさん
19/05/04 10:44:00.90 ic6F2rX1.net
コマンドの入力がストリームでいいならできる、他のなんか知らんコマンドがストリームじゃダメならできないでしかない。使用するコマンドによるでしかないだろにアホか

410:デフォルトの名無しさん
19/05/04 10:53:18.47 eyQzK648.net
> コマンドの入力がストリームでいいならできる、
そんな当たり前のことを言われてもなw

重要な点は、本来、該当のコマンドは「ファイルを指定する」前提であるということ
diffコマンドみたいにな。
それを半ば無理やり、ストリームから読み込ませる文法が
bashにはあるということ
> diff <(./hoge) <(./fuga)
だが、本来コマンドは、ファイル名を指定させる以上、ストリームを前提としているとは限らないわけで、
そういうコマンドに、bashを使って無理やりストリームで渡して動いたとしても、
それはたまたま動いただけいう話をしてる。
(コマンドの仕様で規定されてないならば)実装依存なので動くという前提に立ってはならない。

411:デフォルトの名無しさん
19/05/04 10:54:58.56 eyQzK648.net
あ、bashの拡張なんて俺は普通使わんけどなw
今回はたまたま利用可能だったってだけで

412:デフォルトの名無しさん
19/05/04 10:55:49.57 ic6F2rX1.net
では、なにを当たり前のことを延々と言っているのかね?
というような、お前のレスはこんなんばっかだな

413:デフォルトの名無しさん
19/05/04 10:56:37.92 eyQzK648.net
>>412
俺「やっぱできないよなぁ」
→ 俺もできないと思うよ。
で終わればいいやん。

414:デフォルトの名無しさん
19/05/04 10:58:48.90 eyQzK648.net
基本的に、俺が出した結論が正解なので、
最後の最後でここで他になにかないのか?と聞いても
新しいことは何もわからないというのがいつものパターン

415:デフォルトの名無しさん
19/05/04 11:00:31.72 ic6F2rX1.net
そうならないのは、
>>385,390
(実は答えは別にもあるのだが、お前には教えないw)

416:デフォルトの名無しさん
19/05/04 11:03:05.91 eyQzK648.net
>>415
その答えは俺も知ってるけどな(笑)

417:デフォルトの名無しさん
19/05/04 11:04:39.93 eyQzK648.net
そういや前にも、
他にもやり方あるけどお前には教えてやんないよ。ばーかばーか
みたいなレスあったなw
結局やり方なかったみたいだけどw

あ、今回は有るんですよね?知ってます。だって俺も知ってるからね!

418:デフォルトの名無しさん
19/05/04 11:05:09.17 ic6F2rX1.net
ほほー、よくわからんが解決してなにより
めずらしくちゃんと終えられてよかったよ

419:デフォルトの名無しさん
19/05/04 11:10:16.30 eyQzK648.net
ほほー(笑)

420:デフォルトの名無しさん
19/05/04 20:25:44.11 ifYIOobQ.net
やれやれ、何事かと思ったら……
「そのツール」って何だよ。それを書かない時点で相手にする価値が無いゴミだろ。

421:デフォルトの名無しさん
19/05/04 21:30:57.91 eyQzK648.net
ツール名聞いたって何の意味もないくせにw
じゃあgccとでも言っておこうか。一例として

422:デフォルトの名無しさん
19/05/05 00:09:54.93 v1YqewFO.net
チンピラ以下の馬鹿だな

423:デフォルトの名無しさん
19/05/05 01:20:16.53 kL93aIfd.net
なぜかシェルスクリプトのスレなのにコマンドの世界の話をしてますね。

424:デフォルトの名無しさん
19/05/05 01:55:58.03 BV99JfCS.net
シェルスクリプトはコマンドを使って組むもの。基本的なものですらコマンドだったり。
コマンドの動作がどうだから入出力がどうだからで組みもするもんだろう。

425:デフォルトの名無しさん
19/05/05 04:20:05.42 HUD7QHVp.net
いつものってことはこいつは常連客なのか
ちゃんとコテ付けてくれないと困るなぁ

426:デフォルトの名無しさん
19/05/05 13:10:37.85 ptHRpxR9.net
>>424
プログラムですよ?

427:デフォルトの名無しさん
19/05/05 19:12:30.87 Cb4SiVVu.net
なにいってんのこいつ

428:デフォルトの名無しさん
19/05/05 22:39:57.67 QbHFXZX+.net
やっぱワッチョイ導入しよーぜ

429:デフォルトの名無しさん
19/05/06 01:18:15.86 VbOWf0H0.net
やはりそれが目的ですか

430:デフォルトの名無しさん
19/05/06 13:16:54.80 UGCyqtDX.net
どういうこと?

431:デフォルトの名無しさん
19/05/11 15:19:07.32 D877RybE.net
[ string1 > string2 ] ってPOSIX準拠じゃないよね?
POSIXの範囲で(外部コマンドを使わずに)
文字列の大小の比較ってできたっけ?

432:デフォルトの名無しさん
19/05/12 02:15:32.41 0u/cIV/f.net
>>427
おまえさ、ここはシェルスクリプトのスレッドだぞ?
コマンド一発にしたいのなら、そういうコマンドを作ればいい。
UNIXの考え方は、あるものの組み合わせで実現できるものはそうすべきだが、無理やりあるものの組み合わせでやれなんて言ってない。

433:デフォルトの名無しさん
19/05/12 02:18:26.37 0u/cIV/f.net
>>431
どの言語でも、単に文字列を比較する構文は、どういう比較なのか分かりにくいから、まともなプログラマは避ける。

434:デフォルトの名無しさん
19/05/12 02:27:43.60 4QpB/QIi.net
これまた変なのが現れたな

435:デフォルトの名無しさん
19/05/12 18:06:37.34 VATOmp33.net
>>431
外部コマンドを使わないという制約なら
↓こういうのでは
string1='aaaaa'
string2='bbbb'
[ ${#string1} -le ${#string2} ]

436:デフォルトの名無しさん
19/05/12 19:46:54.27 OoMn1CYl.net
「文字列の比較」ができるという触れ込みで文字数の比較を
している言語やデータベースなんか聞いたこと無いなw
普通は現在のロケールに従って文字列の照合順序で比較のことを言う
百歩譲っても文字コード順とか

437:デフォルトの名無しさん
19/05/12 20:03:17.70 0u/cIV/f.net
>>436
文字列が同じ値かどうかの比較を忘れているのか?

438:デフォルトの名無しさん
19/05/12 22:54:11.71 OoMn1CYl.net
変なやつだったようだな

439:デフォルトの名無しさん
19/05/12 23:14:03.33 VATOmp33.net
文字数の比較じゃないのか。申し訳ない、俺の読解力が不足してた。
後学の為に訊いておきたいんだけども、文字列の比較がごく普通にできるプログラミング言語って例えばなんだろう。

440:デフォルトの名無しさん
19/05/12 23:17:08.65 OoMn1CYl.net
C言語

441:デフォルトの名無しさん
19/05/13 03:22:38.08 gc1mJry9.net
構文的ならC言語はできない方かなあと
他の(スクリプト)言語でいくらでもあるからそちらでもよかったんじゃないかと

442:デフォルトの名無しさん
19/05/13 04:40:36.56 0SM9rJAF.net
>>439
ベイシック


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch