- 1 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 11:53:21.38 ID:BBiLRgnj0.net]
- !extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512 シェルスクリプトに関する総合スレッドです。 スレ立て時は以下の文を先頭行に加えて下さい。 後のつけ忘れ防止の為に複数行重ねて追加推奨 !extend:on:vvvvv:1000:512 全般 ・荒しは無視しましょう。 ・丁寧な姿勢を心掛けましょう。 ・ネチケット(死語)を意識しましょう。 前スレ シェルスクリプト総合 その28 mevius.5ch.net/test/read.cgi/tech/1532397676/ VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
- 363 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 21:26:47.89 ID:XoYPKH7l0.net]
- >>362
言い出した本人 (>>354) に聞いてください > ああ、(3)がSIGINTの数値だと思ったのか。違うぞ2だぞ。(3)は C API という意味
- 364 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 21:28:14.13 ID:XoYPKH7l0.net]
- >>361
(俺は最初から)trapの引数にSIGINTは使えないことがあるって 話をしていること、わかってますか? どうも勘違いして、突っ走ってる気がするな
- 365 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 21:37:09.45 ID:gJfQRhUl0.net]
- >>363
で?その目的がわからんな。単に素直な疑問なだけなら、>>348で応えているけど。話を振ってねちっこく続けているのは誰なの?>>349とか以後とか それも>>353でお前は納得したんだろ? なんか上でC++のことを偉そうにのたまっているのを誤爆したのお前じゃなかったっけ? それがお前じゃなくても、なんでコマンド関連のCなんて簡単なのにそんなに知らないのか不思議だな、なんか異常にシェルスクリプト「だけ」に拘るのもあって UNIX/Linux界隈では自分でCでコマンド書く(簡単なフィルタも)のも普通にいるだろうから、お前のようにシェルスクリプトだけしか言ってはいけないなんてないと思うけどな(それも俺からは単にお前の間違いをごまかすためだけにしか見えんからw) >>362は俺に振ってもいいが、なにを聞いているのか傍目にもわからないw すまんが、も少し具体的に>>362
- 366 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 21:40:16.96 ID:quDgO6NR0.net]
- またposix先生が宿題出してんの?
- 367 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 21:44:47.82 ID:EWkScXjB0.net]
- ぽっぽっぽー
- 368 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 21:49:30.03 ID:XoYPKH7l0.net]
- >>365
コマンド? もしかして、trapがコマンドだと思ってる? シェルビルトイン関数だよ シェルのプロセスでシグナルを扱わなきゃいけないから 外部コマンドで実装することは不可能 だからシェルスクリプトスレでtrapの話をするならば シェルスクリプト前提になるのは当然だろう?
- 369 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 21:53:11.18 ID:gJfQRhUl0.net]
- >>368
そういう細かいことは言いたいのね。大枠でコマンドでいいじゃん (1) の範疇なんだから その二行目以降はイミフ。なにを言っているの?言いたいの? お前から見てミスを論ってなんとかお前のなにかを保ちたいだけにしか見えない
- 370 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 21:53:58.49 ID:XoYPKH7l0.net]
- >>369
そのレスはなんのためにしたの? なにかを保ちたいだけにしか見えない
- 371 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 21:54:56.36 ID:gJfQRhUl0.net]
- 結局SIGINTの振りも>>368と同じでなにかをなんとかしたかっただけだろなww
SIGINTで失敗したから、別のにか。懲りないなw
- 372 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 21:55:59.54 ID:gJfQRhUl0.net]
- >>370
なんか失点を挽回しようとしているのが透けて見えてるのでwww
- 373 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 21:59:08.94 ID:XoYPKH7l0.net]
- >>372
それで、trapの引数のSIGINTの話をしていたところに C APIを持ち出してきたのはなんでですか? 失態隠しのためにそんなレスしてるんですかねw
- 374 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 22:00:47.39 ID:XoYPKH7l0.net]
- ID:gJfQRhUl0 がさっきから俺に言ってることって
全部自分の事になってるのわかってないのかな? どうせ次言う言葉も、自分のことを棚に上げて言うんだろうな
- 375 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 22:07:32.28 ID:gJfQRhUl0.net]
- >>373,374
はあ?無茶苦茶やな その答えはすでに応えているけど。「みんな SIG SIG 言ってるのに」のに対する応えを含めての それも最初に。それも話の流れで、お前も納得勉強wになっただろうにww よほど「お前のなにかを保ちたい」が琴線だったようだねえw
- 376 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 22:32:38.54 ID:reiOA0Hq0.net]
- UNIX板へ帰ろう
- 377 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 22:34:09.63 ID:gJfQRhUl0.net]
- https://www.freebsd.org/cgi/man.cgi?query=builtin&apropos=0&sektion=1&manpath=FreeBSD+12-current&arch=default&format=html
https://linuxjm.osdn.jp/html/GNU_bash/man1/builtins.1.html コマンドでよかったみたいだけどwww
- 378 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 22:50:09.83 ID:8zpC2JPUa.net]
- >>376
さすがにその選択肢はない この赤い奴らをNGすれば済む話 それすら嫌ならお前が消えろ、ここに来た経緯忘れんな
- 379 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 23:07:26.81 ID:JDWqlC9k0.net]
- 村を出てアイドルになるためだったよな
- 380 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 23:38:46.03 ID:5IpH1DwA0.net]
- シグナルを送信するコマンドの名前がsigとかじゃなくkillなのはなぜでしょうか。
例によって歴史的経緯? 元々はSIGKILLシグナルしか送信しなかったのでkillとか。
- 381 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 00:45:49.98 ID:OX2gPbsu0.net]
- >>379
某農家「村を出てアイドルになるなんてとんでもねぇ、両立するべ」
- 382 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 00:48:40.26 ID:gm+ugNlu0.net]
- ご想像どおり、version6 unix以前はkillしかできなかった模様
- 383 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 02:55:07.53 ID:OPK1oA4w0.net]
- d.hatena.ne.jp/oraccha/20110419/1303223401
こことかにありますね。ありがとうございました。
- 384 名前:デフォルトの名無しさん [2018/10/29(月) 22:10:10.39 ID:JGxixszg0.net]
- 村に戻って親が死んでたら
そいつは手遅れコロスしかない 親はいつまでも待っていない
- 385 名前:デフォルトの名無しさん mailto:sage [2018/10/30(火) 01:05:53.06 ID:2OC/bUyM0.net]
- >>304
それを言えるのは、まだ手遅れになってないからなんやで
- 386 名前:デフォルトの名無しさん mailto:sage [2018/10/30(火) 02:11:38.48 ID:yt1zemAy0.net]
- すまん、俺がsedなんて持ち出したばかりに…
- 387 名前:デフォルトの名無しさん mailto:sage [2018/10/30(火) 02:16:29.65 ID:lSvIGV4X0.net]
- お題:スクリプトのシグナルを扱う外部コマンドを設計せよ
- 388 名前:デフォルトの名無しさん mailto:sage [2018/10/30(火) 02:24:39.94 ID:2OC/bUyM0.net]
- こんな感じ?w
#!/bin/sh trap "$(extcmd)" INT [extcmd] #!/bin/sh cat <<HERE handler() { : なにかする } handler HERE
- 389 名前:デフォルトの名無しさん mailto:sage [2018/10/30(火) 08:39:46.28 ID:lJU58Qkm0.net]
- >>353
pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#trap 組込コマンドは「 Shell Command Language」の一部として定める方針みたいね。
- 390 名前:デフォルトの名無しさん mailto:sage [2018/10/30(火) 16:02:13.78 ID:7uiQkmXn0.net]
- >>389
おお、なるほど。長っ探しづらと一瞥では思ったが系統だってのでこっちのがいいか どうもです
- 391 名前:デフォルトの名無しさん [2018/10/30(火) 23:49:50.18 ID:H/liFP070.net]
- いや手遅れ
親がしんでたらゾンビスプロセスになる 殺すしかない
- 392 名前:デフォルトの名無しさん mailto:sage [2018/10/31(水) 05:39:40.82 ID:VU8NOm8y0.net]
- UTF-8で符号化された文字列に対応してるfmt(1)コマンドってある?
GNU coreutilsのfmt(1)は無理だった。
- 393 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 17:53:36.33 ID:Kkuf6Nxk0.net]
- 一回のループでファイルや変数を使わずに、偶数行と奇数行にまとめられないかなぁ?
例えば、入力ファイルが以下のような場合 1 2 3 4 5 出力は、以下のようにしたい 2 # ここから偶数行 4 1 # ここから奇数行 3 5 ファイルディスクリプタをうまく使えばできるんじゃないか? と思ってたりするけどうまくいかない
- 394 名前:デフォルトの名無しさん [2018/11/01(木) 18:26:55.97 ID:OxvwXsOaa.net]
- 変数も使っちゃダメなのか。うーん。
- 395 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 18:37:54.39 ID:eWvFwheDM.net]
- sedじゃあかんのけ?
- 396 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 18:50:36.53 ID:Kkuf6Nxk0.net]
- >>395
sedでできるならsedでもいいけど。 やっぱり無理だよなぁ 結局、奇数行のデータを後からだすためには どこかにためておく必要があるわけで メモリかディスクはどうしても使用してしまう 二回のループにするなら、メモリもディスクも消費しないけど 今度は入力データをためておく必要がある
- 397 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 19:37:55.15 ID:upF+pHX50.net]
- >>393
もし変数を使っていいなら,どうやって書くの?
- 398 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 19:42:09.40 ID:Kkuf6Nxk0.net]
- >>397
こんな感じでは? while 全行ループ; do if 偶数行 then echo 偶数行 奇数行変数 = 奇数行変数 + 奇数行 + 改行 done echo 奇数行変数
- 399 名前:デフォルトの名無しさん [2018/11/01(木) 19:46:11.92 ID:OxvwXsOaa.net]
- 元データがファイルに入っていて2回読んで良くて尚且つ変数使って良いなら楽だよ、っていうかそれなら誰でも作れるかw
- 400 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 19:51:11.07 ID:Kkuf6Nxk0.net]
- 遅くなるのでディスクに書き込みたくないし、メモリも
あまり使用したくなかったんだけど仕方ないか 実際には偶数行、奇数行じゃなくて、データを種類ごとに前後に分けたくて 後ろに分けるデータは基本的に少ないってことがせめてもの救いか
- 401 名前:デフォルトの名無しさん [2018/11/01(木) 19:58:02.45 ID:zOBF+lvD0.net]
- なんでバカって実行速度ばかり気にするんや?
- 402 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 19:59:10.65 ID:Kkuf6Nxk0.net]
- 何度も実行するものなので、遅いとストレスたまるから
- 403 名前:デフォルトの名無しさん [2018/11/01(木) 20:00:23.29 ID:zOBF+lvD0.net]
- バカなのにストレスたまるの?バカやめたら?
- 404 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 20:03:44.33 ID:Kkuf6Nxk0.net]
- その理屈だと、
・バカなのにストレス溜まるの?(不思議) ・バカじゃないならストレス溜まる(普通) ってことになるから、 バカやめたら、それこそストレス溜まるのでは?
- 405 名前:デフォルトの名無しさん [2018/11/01(木) 20:18:26.34 ID:zOBF+lvD0.net]
- バカの理屈わろたw
バカなんやから考えん方がええで
- 406 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 20:23:45.26 ID:Kkuf6Nxk0.net]
- なにか言い返せよw
- 407 名前:デフォルトの名無しさん [2018/11/01(木) 20:37:24.98 ID:zOBF+lvD0.net]
- バカに言いかえすとか無理やわ理屈がないからバカなんやでおまえ
- 408 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 20:38:28.76 ID:Kkuf6Nxk0.net]
- そりゃね。>>404が正しいから何も言いえせないわなw
- 409 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 20:43:56.74 ID:RCcSs0UBM.net]
- お前ら、哲学者か何かなん?
- 410 名前:デフォルトの名無しさん [2018/11/01(木) 20:50:42.34 ID:zOBF+lvD0.net]
- バカとバカを嘲笑う者や
- 411 名前:デフォルトの名無しさん [2018/11/01(木) 20:51:14.40 ID:5U41yww90.net]
- 奇数行だけ抽出するスクリプトと
偶数行だけの二つ作って、 奇数行スクリプトの出力に偶数行のを追記させる なんとなくそんなイメージ
- 412 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 21:54:51.76 ID:zo7FxUKXr.net]
- 速度言うならCなりJavaで書いてデーモン化して動かさんとな
シェルスクリプト特有のコマンド羅列のプロセス起動しまくりってのは すごいコストがかかってる
- 413 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 21:57:34.95 ID:eWvFwheDM.net]
- 偶数行抽出
grep "Kkuf6Nxk0" 奇数行抽出 grep "zOBF+lvD0" 楽勝すぎるわ
- 414 名前:デフォルトの名無しさん [2018/11/01(木) 21:58:38.71 ID:zo7FxUKXr.net]
- >>404
いや普通なら落としどころ決めるだろ シェルスクリプトだからあきらめるとか ちゃんとした言語で作るとか バカだから漠然と心配ばかりしてストレスが溜まる 今も月が落ちてくる心配でもしてるんじゃないの
- 415 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 21:59:28.16 ID:JoiMeSvG0.net]
- >>412
デーモンだって実行プロセスは立ち上げないとダメだろ
- 416 名前:デフォルトの名無しさん [2018/11/01(木) 21:59:49.59 ID:zOBF+lvD0.net]
- >>413
シェルが固まったんやがウイルスちゃうやろな?直しかた教えろバカ
- 417 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 21:59:57.39 ID:zo7FxUKXr.net]
- >>413
後出しで奇数偶数じゃないって言ってるよ
- 418 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 22:00:55.53 ID:45pCF+y00.net]
- seq 5 | awk '{print ($1%2?"b":"a") $1}' | sort -V | cut -c2-
- 419 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 22:06:42.28 ID:Kkuf6Nxk0.net]
- >>414
普通(?)の言語で作ったって、結局は変数に入れないとだめでしょ ファイルを受け取ってその順番を変えて出すんだから キミは本質をわかってない
- 420 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 22:08:20.21 ID:Kkuf6Nxk0.net]
- >>412
シェルスクリプト(と一部のPOSIXコマンド)で作るっていうのは 必須条件なのでそれはできないのです。
- 421 名前:デフォルトの名無しさん [2018/11/01(木) 22:09:12.59 ID:zOBF+lvD0.net]
- バカはいいかげん黙っとけ
- 422 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 22:12:35.86 ID:Kkuf6Nxk0.net]
- >>413
結局はそれ、二回読み込んでるんだよね >>418 それも考えたんだけど、結局はソートの ためにメモリに読み込むから本質的には変わらないかなーと あと>>393の例が良くなかったけど、入力ファイルは昇順とは限らなくて 偶数グループと奇数グループにわけるだけで、順番は変えたくないんだ
- 423 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 22:13:57.69 ID:Kkuf6Nxk0.net]
- >>421
バカじゃないので黙らないw ってか、俺を黙らせるのは不可能なのでNGにして 俺にくだらないレスしないようにしてください 俺にもくだらない反論(?)が来ないのでWIN♪WIN♪
- 424 名前:デフォルトの名無しさん [2018/11/01(木) 22:16:53.31 ID:zOBF+lvD0.net]
- >>423
要するにバカやんけおまえ
- 425 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 22:19:28.46 ID:Kkuf6Nxk0.net]
- まだNGにしてないのか?
- 426 名前:デフォルトの名無しさん [2018/11/01(木) 22:21:41.75 ID:zOBF+lvD0.net]
- >>425
バカを嘲笑うのがおもろいのにNGにするわけないやろ ホンマにバカやなおまえ
- 427 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 22:22:49.71 ID:45pCF+y00.net]
- ああもぅめんどくせぇなw 順番変えたくないなら stable sort でええやんけ
メモリがどーたらこーたらは知らんw $ cat hogehoge | awk '{print ($1%2?"b":"a") "\t" $1}' | sort -s -k1,1 | cut -f2
- 428 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 22:22:56.19 ID:Kkuf6Nxk0.net]
- じゃあなんで黙れって言ったの?
俺が書き込みしなきゃ、お前出てこれないじゃん 矛盾してるよね。
- 429 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 22:23:55.45 ID:Kkuf6Nxk0.net]
- >>427
いや、頑張らなくていいよw
- 430 名前:デフォルトの名無しさん [2018/11/01(木) 22:25:19.85 ID:zOBF+lvD0.net]
- >>428
バカはしゃべるな
- 431 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 22:31:12.95 ID:zo7FxUKXr.net]
- >>419
だから変数使えって言ってるんだよ たいした理由も無いのに速度だリソースだって言ってるだけなんでしょ だったら奇数用途偶数用を1回ずつ合計2回実行すればいいだけ
- 432 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 22:35:03.93 ID:Kkuf6Nxk0.net]
- だから仕方ないかって書いてんのにw
ほんと人の話読まないやつだな 400 自分:デフォルトの名無しさん (ワッチョイ ab98-QXT6)[sage] 投稿日:2018/11/01(木) 19:51:11.07 ID:Kkuf6Nxk0 [4/15] 遅くなるのでディスクに書き込みたくないし、メモリも あまり使用したくなかったんだけど仕方ないか
- 433 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 22:35:30.89 ID:bLNYdVH2a.net]
- えっなにこれは…
- 434 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 22:36:17.06 ID:upF+pHX50.net]
- tee(1)コマンド使ったらいけるかなとか考えたが無理かな。
- 435 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 22:43:09.27 ID:Kkuf6Nxk0.net]
- >>434
片方ファイルだもんね。 メインプロセス起動(出力を2つに分岐) ├出力1 偶数行表示プロセス実行 └出力2 奇数行表示プロセス実行(偶数行表示プロセス終了後に処理開始) みたいな事ができるかな?と思ったんだけど まあ、これでも内部的には出力がバッファに 溜め込まれてるんだろうけどね
- 436 名前:デフォルトの名無しさん [2018/11/01(木) 22:48:35.54 ID:zo7FxUKXr.net]
- >>432
お前ホントバカだな お前のようなバカのためにプログラム書いてやったぞ eo-sort.exe 第一引数に入力ファイルを渡せば標準出力に まず偶数業出してその後に奇数業出してくれる 必要ならそれをファイルにリダイレクトしなよ
- 437 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 22:49:59.34 ID:Kkuf6Nxk0.net]
- いらねっす
- 438 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 22:53:44.24 ID:zo7FxUKXr.net]
- ああ、あと出し情報で偶数奇数じゃなかったんだよな
そりゃいらないわなw
- 439 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 22:54:34.69 ID:Kkuf6Nxk0.net]
- え?あぁ、そうだな
- 440 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 23:01:11.09 ID:upF+pHX50.net]
- >>435
というかよく読んだら「ファイルディスクリプタをうまく使う」ってそういうことだよね teeっていうのはファイルと標準出力に書き込む「ファイルディスクリプタをうまく使う」コマンドの一つなんだからさ。 まあ俺には変数使わずに出力を分けるのは無理かな。 ところで変数使わない理由はPOSIXシェルスクリプトは変数のスコープができず 利用者が定義している定数を潰す可能性があるからって理解でいいのかな?
- 441 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 23:17:46.65 ID:JoiMeSvG0.net]
- 印刷して紙でやればメモリもディスクも使わないんじゃね?
- 442 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 23:22:18.99 ID:0eDQcpEPa.net]
- 天才か
- 443 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 23:31:18.23 ID:45pCF+y00.net]
- じゃぁ moreutils の pee コマンドでも使ったら
$ cat hogehoge | pee 'awk "!(\$1%2)"' 'awk "\$1%2"'
- 444 名前:デフォルトの名無しさん [2018/11/01(木) 23:58:02.32 ID:s+SrulDE0.net]
- >>441
コペルニクス的転回だな。
- 445 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 00:25:05.23 ID:qf9daF/z0.net]
- 同じターミナルに出力するのが仕様間違いだろ。スクロールバックがめんどくさい。
- 446 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 01:50:44.73 ID:RWqagkCBM.net]
- >>393
出来るぞ もう諦めたのならまあいいか
- 447 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 03:41:34.10 ID:fhEBIQ700.net]
- 確かに
- 448 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 06:24:06.72 ID:tmRne/9W0.net]
- >>443
これすごいね。 peeコマンドに可搬性を持たせられたらいいんだけど、それが問題だよね
- 449 名前:デフォルトの名無しさん [2018/11/02(金) 06:38:46.12 ID:BwjETkqh0.net]
- あのう、プロセス動かすだけでメモリ消費してしまうんですが
変数や作業用ファイル作らなくても内部的な一時ファイルは作られるわけで リソース消費しないで切り分けようとエディタ立ち上げて手作業でやっても、やっぱりリソース消費があるので 誰かが言ったように、ノートかなにかに手書き転記するしかないと思う つうか、そんな人はコンピュータ使っちゃダメだと思う まるで、経団連会長みたいなんだもの 最近会長室にコンピュータが導入されたらしい あれこれ、たかが変数や作業用ファイル如きでリソース消費しないように考える時間など無駄中の無駄 なにも、惑星探査衛星の限られたリソースでなんとかするって話じゃないんだから 時間の使い方を間違っている そんな下らない話題で、ここのスレのリソースも無駄遣い
- 450 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 07:18:03.73 ID:bE/8yEKV0.net]
- >>446
諦めてないです!まってます!
- 451 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 07:42:30.53 ID:bE/8yEKV0.net]
- >>448
> peeコマンドに可搬性を持たせられたらいいんだけど、それが問題だよね こんなんでどう? peeコマンドのシェルスクリプト実装版 シェルスクリプトで実装したから外部コマンドだけじゃなくてシェル関数も呼べるよ #!/bin/sh pee() { ( ( ( while IFS= read -r line; do printf '%s\n' "$line" printf '%s\n' "$line" >&3 done | "$1" >&4) 3>&1 ) | "$2" ) 4>&1 } foo() { printf 'foo %s\n' "$(cat -)"; } bar() { printf 'bar %s\n' "$(cat -)"; } pee foo bar
- 452 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 07:59:00.48 ID:bE/8yEKV0.net]
- >>443
>>451のシェルスクリプト実装版もそうだけど、 俺の予想が正しければ、その2つのawkは並列に動作するんじゃないかな? 1つ目のコマンド実行が完了まで2つ目のコマンドの実行をブロックするとは 思えないので2つの出力は混じって出てくると思う。 プロセス起動のオーバーヘッドがあるから少量のデータだと コマンド順に出力されるように見えるかもだけど
- 453 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 08:25:40.36 ID:bE/8yEKV0.net]
- あれ? これでできてね?
最初こんな感じだったからブロックされずに混じって出てくることになったけど foo() { cat -; } bar() { cat -; } こうしたせいで出力がブロックされてる気がする foo() { printf 'foo %s\n' "$(cat -)"; } bar() { printf 'bar %s\n' "$(cat -)"; }
- 454 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 08:26:07.31 ID:tmRne/9W0.net]
- >>451
https://www.mankier.com/1/pee これを読む限り引数は2つだけじゃないから,ちょっと機能不足かもね。 もちろん今回のあなたの目的には合うけど(2通りのパイプがあればそれで十分でしょう?) ただ,もっと一般的なpee(1)コマンドを作ろうと思うと, 引数の数に応じてまずは雛形を作りそれをevalする,みたいな方法を採る必要があるかも。
- 455 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 08:41:23.56 ID:bE/8yEKV0.net]
- >>454
複数対応だと面倒くさそう・・・ eval使えば可能だろうけど、文字列組み立てるのが そう。今回書いた内容は>>453でできる。 だけど今回書いてないもう一つの制限があってそれで出来ない・・・ (制限っていうのはパイプで関数に渡すんじゃなくて変数で渡したい) まあいいや、また長くなりそうだから質問閉じるわ とりあえず変数使わずに出力をまとめることはできたし あとは別の問題
- 456 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 09:19:53.88 ID:Rb6mIS4M0.net]
- foo() { printf 'foo %s\n' "$(tail -n 1 -)"; }
bar() { printf 'bar %s\n' "$(head -n 1 -)"; } ってして seq 1000 | ./pee.sh としたら実行する度に foo の値 が違ってるな…どちからの子プロセスが実行完了したら while も終了するから仕方ないんだろうけど。trap '' PIPE ってすると I/O error になるし
- 457 名前:デフォルトの名無しさん [2018/11/02(金) 09:45:49.16 ID:0QIYfvOaa.net]
- >>449
> なにも、惑星探査衛星の限られたリソースでなんとかするって話じゃないんだから いや知らんけどそういう極小環境なのかも知れんよ。そうでなければこんな要求出てこないと思うが。
- 458 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 09:56:03.14 ID:bE/8yEKV0.net]
- >>457
正解。組み込みマシンも対象としている
- 459 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 09:59:54.78 ID:bE/8yEKV0.net]
- 限定的ながら変数で渡すっていうのが出来てしまったので晒す。多分使わない
#!/bin/sh main() { index=0 ( ( ( while IFS= read -r line; do index=$((index+1)) dumpvar_and_call "even" dumpvar_and_call "odd" >&3 done | eval "$(cat -)" >&4) 3>&1 ) | eval "$(cat -)" ) 4>&1 } dumpvar_and_call() { set; echo "$1"; } even() { if [ $((line % 2)) = 0 ]; then echo "index:$index even $line" sleep 1 fi } odd() { if [ $((line % 2)) = 1 ]; then echo "index:$index odd $line" fi } main<<HERE 3 6 7 4 2 8 HERE
- 460 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 10:03:43.36 ID:bE/8yEKV0.net]
- なんで使わないかというと、変数をパイプで渡すために
setでシェル変数をダンプして、evalしてるんだが、 bashでは読み取り専用変数があってエラーになるから setの出力をあれこれフィルタすればできると思うが、 変数の中に改行が入ってる場合とか対応が面倒 bashなら変数名に特定のプリフィックスがついたものだけ ダンプできたとは思うが他のシェルではそうは行かない また、行ごとに変数すべてをsetしてevalとか パフォーマンス悪そうだし。
- 461 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 10:11:28.72 ID:GFVwJxnL0.net]
- >>457
そんな環境でPosix縛りだとしたら、プロジェクト自体が間違ってる。
- 462 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 10:16:42.75 ID:bE/8yEKV0.net]
- > そんな環境でPosix縛りだとしたら
実はPOSIXよりも状況が悪いw 使える機能がPOSIX未満なんだよ。 つまり一部の機能しか実装されていない
- 463 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 11:47:49.42 ID:tmRne/9W0.net]
- ただの愚痴だけど
POSIXユーティリティにネットワーク通信が含まれてないのってマジで致命的欠陥だと思う。 POSIX原理主義とか,たしかに素晴らしい考えだとは思うけど,ネットワーク通信なくして現在のコンピュータを管理・運用するのは不可能っていうか もしできてもすごくつまらないでしょう。
|

|