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

■ このスレッドは過去ログ倉庫に格納されています
2019/08/10(土) 23:17:50.64ID:L+B8OP2P
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。

シェルスクリプト総合 その30
https://mevius.5ch.net/test/read.cgi/tech/1561989867/
2019/08/19(月) 10:13:25.39ID:U/sDEGN5
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\
2019/08/19(月) 11:28:24.99ID:xlQPwL5+
文体がちょっと違うから危うく荒しに構うところだった。
いつものチガイか。
2019/08/19(月) 11:36:19.43ID:JcVwKxxm
>>134
POSIX要らないとか一言も書いてないのだが
なんか変な妄想にとらわれてる人なの?いつもの
2019/08/19(月) 11:40:44.54ID:W/U4wDij
>>137
そっちじゃないよw
新しいPOSIXに対応するメリットがわからないんでしょ?
2019/08/19(月) 12:46:41.76ID:IzREAmBO
シェル単体の交換可能性を担保したところで出来ることはたかが知れてる。
システムとして実用的なレベルまで規格拡張しないと使いものにならない。
現状のPOSIXは最低限のI/F仕様を規格化するだけの中途半端な規格だ。
将来的にネットワーク、ハードウェア管理、セキュリティなどシステムとしての仕様が標準化され、全てのシステムがそれに準拠するまでは、POSIXに固執する必要性は無いと言っていい。
もちろん、可能な範囲で可搬性を追求することは間違いではないと思うぞ。現状では限界があるということだ。
2019/08/19(月) 12:51:57.60ID:4iryI+Qn
現実として問題になってるのは、半ば当たり前のように書かれる
Linuxで動くコマンドが、macOSで動かないことだよな
ググって、なるほどこれでできるのか、って思ってもmacOSで動かないのは問題
2019/08/19(月) 12:52:53.15ID:4iryI+Qn
>>139
POSIXはシェルだけを決めてるものじゃないよ。
コマンドとそのオプションも決めてる。
2019/08/19(月) 12:58:21.94ID:IzREAmBO
>>141
シェル「だけ」とは言っていない。
ここはシェルスクリプトのスレだから、シェルについて言っている。
POSIXについては>>2を読めば分かる。
2019/08/19(月) 13:02:42.41ID:4iryI+Qn
>>142
主張がよくわからないんだけど
「シェル単体の交換可能性を担保したところで出来ることはたかが知れてる。」から、
現状のPOSIXは中途半端で、もっといいものにするために新しいPOSIXを
規格化するべきだって言ってるってことあってる?
2019/08/19(月) 13:23:29.26ID:oONnFCD4
POSIXのような標準はそう簡単には変更できないだろ。バージョンによるになるから
そして、ツールを作るのは大なり小なり思想があってやっているんで、言うようなできる最大のものに合わせるなんてなりっこない
文句なり言うなら、POSIXにではなくBSDに言う方が現実的だし、文句言うくらいな自分で実装してBSDに上げればいいだろう。上げても却下されるとかあるかもだがw
言っているのは単にWebで探した事例がLinuxでBSDだと動かないってのだけだもん
2019/08/19(月) 13:40:48.28ID:4iryI+Qn
>>144
難しく考えすぎでしょ。すでにある実装を採用すればいいだけ
思想なんかは、既に実装されてる時点で問題ないということだし。

POSIXにではなくBSDに言う方が現実的というけどBSDの現状知ってる?
すでにgreadlinkとかgtarとか結局GNU版を実装しちゃってるの。(その逆は聞かない)
そういう二重開発をなくすためにも、今の実装(の一部)をPOSIXにしてしまうべきだと思うね
2019/08/19(月) 13:51:36.11ID:oONnFCD4
>>145
その採用がだよ。やりとり見てみ。はいそうですねでは進んでないから
それはいらないとかふつうにあるぞ。POSIXに限らず

何言ってるの?単にBSDにGNU coreutilsのパッケージがあって、それが入ることもあるってだけだよ。gって自分で付けて気づかないの?GNU coreutilsが入っているのが嫌という人も居るようだけど
2019/08/19(月) 13:53:39.09ID:4iryI+Qn
>>146
> はいそうですねでは進んでないから

? 思想とかなんとか困難な道を乗り越えて見事、採用されたものを
POSIXにも入れればいいだけって言ってるんだけど
2019/08/19(月) 14:01:04.44ID:oONnFCD4
何を言いたいのかさっぱり

BSDも標準では入ってないぞ GNU coreutils は。何かそれを必要としたパッケージがあってそれにともないだろう
パッケージは誰かが作ってそれなりに利用されるのならわりと簡単にだぞ?パッケージだからな。必要な人は入れるというだけの
2019/08/19(月) 17:39:47.54ID:xlQPwL5+
・POSIXに準拠することにはメリットがある
↑これは俺もそう思うけど(正しいかどうかは別にして)
・今のPOSIXでは不十分なので,規格を拡張して,各社にそれを追従するよう促すべきだ
↑これは違うと思う。POSIXの「不便さ」は「どこでも動く」ことの引き換えであることを忘れてはいけいない(ルポ風)
2019/08/19(月) 17:40:43.60ID:xlQPwL5+
cat >>149 | sed -e 's/いけいない/いけない/'
151デフォルトの名無しさん
垢版 |
2019/08/19(月) 18:49:04.48ID:0HwI7cO5
やっぱりどこでも動くシェルスクリプトなんて幻想なんだね。
152デフォルトの名無しさん
垢版 |
2019/08/19(月) 19:12:44.68ID:peefgVfy
Write once, Bug anywhere.
2019/08/19(月) 19:43:03.92ID:6nSAEgtv
>>149
でも「今のPOSIXでは不十分なので,規格を拡張して」は
遅いながらも今のPOSIX団体がやってることですよ?
POSIX団体がやってることを批判するんですか?
2019/08/19(月) 20:19:55.37ID:WiF5XT2w
bashで長いシェル書いてるといつもたくさんファイルを生成してしまうんだが上手い具合に生成しなくて済む方法ってある?
2019/08/19(月) 20:22:05.55ID:oWmB5KZ/
>>154
たくさんファイルってどういうこと?
2019/08/19(月) 20:25:47.56ID:GYeBbzEk
>>154
パイプ。リダイレクション。
2019/08/19(月) 20:28:19.59ID:WiF5XT2w
>>155
どっかからデータをとってくる

raw_file(最初)
user_file
user_and_id_file
format_file(完成形)

めっちゃテキトーに書いたけどこんな感じで4つぐらい作られてしまう
rmで消すのって有りなのかな
2019/08/19(月) 20:29:18.05ID:oWmB5KZ/
はぁ? と言われましても、
無駄なら無駄なところをなくせ、必要ならそうするしかないで終わるんだが?
それじゃ全く何もわからないよ
2019/08/19(月) 20:33:15.52ID:WiF5XT2w
>>156
参考になりました。ベストアンサーあげます
2019/08/19(月) 20:50:25.65ID:JcVwKxxm
>>149
おれは、促すまではいいと思うが、こんな所での妄想レベルの機能なんか
促されたからってそうホイホイ実装しないだろうと思うんだな
2019/08/19(月) 20:53:38.13ID:PiISpjsD
>>160
人の話ちゃんと聞こうぜ?
誰も妄想レベルの機能を言っちゃいない。
既に実装済みの機能をPOSIXで標準化しようって話をしてる。
2019/08/19(月) 20:58:54.83ID:QrnBNgWe
pasteで処理の結果をくっつける方法ってありますか?

処理A、処理B、処理Cの計3つでファイルを作成せずにくっつけたいです。
2019/08/19(月) 21:02:40.84ID:WV8MsfnG
Xxx <(Yyy) <(Zzz)
こんな感じのがあったような?
2019/08/19(月) 21:03:35.55ID:PiISpjsD
>>162
pasteは複数のファイルを受け付ける
pasterは標準入力からも受け付ける

この二つのどちらかまたは両方を使えばでできるでしょ?
165デフォルトの名無しさん
垢版 |
2019/08/19(月) 21:03:42.78ID:peefgVfy
プロセス置換でできるかな?
2019/08/19(月) 21:04:17.45ID:PiISpjsD
あ、入力元はファイルじゃないのか?
2019/08/19(月) 21:06:17.42ID:xlQPwL5+
>>163
BashやZshに依存してもいいならこれ。
2019/08/19(月) 21:08:14.71ID:PiISpjsD
pasteは複数の標準入力を受け付けるみたいね

printf '%s\n' a b c d e f g | paste - - -
a b c
d e f
g

だから処理A、処理B、処理Cをそれぞれ1行ずつ
出力できるならくっつけられるね。
2019/08/19(月) 21:12:53.53ID:PiISpjsD
あとは処理A、処理B、処理Cの順でデータを出力するなら、
それぞれ変数に入れといて、1行ずつとりだすとか。
まあできなくはない。
2019/08/19(月) 21:26:09.66ID:PiISpjsD
>>167
> BashやZshに依存してもいいならこれ。

どこでも動かないのはPOSIXに>>163が入ってないからだね
2019/08/19(月) 21:32:21.04ID:R3NGICj0
>>154-159
一時ファイルとか、メモリ内ファイルとかは?
2019/08/19(月) 21:38:04.83ID:PiISpjsD
>>162
あ、nlとsort使えばいけるじゃん。

(
処理Aを出力 | nl -i3 # 1, 4, 7 と行番号をつける
処理Bを出力 | nl -i3 -v2 # 2, 5, 8, と行番号をつける
処理Cを出力 | nl -i3 -v3 # 3, 6, 9, と行番号をつける
) | sort -n | paste - - - | 行番号を削除

これでできないかな?
行番号を消すのは、nlの-sで区切り記号をつけられるから、
cutかsedでやればいいかな? 1行目が1ってわかってるから、
行番号の文字数もわかるので、あとはどうにかw
2019/08/19(月) 21:52:44.53ID:PiISpjsD
こんな感じかな?

a() { printf '%s\n' a b c d e; }
b() { printf '%s\n' A B C D E; }
c() { printf '%s\n' 1 2 3 4 5; }

{
a | nl -i3 -v1 -s:
b | nl -i3 -v2 -s:
c | nl -i3 -v3 -s:
} | sort -n | cut -d: -f2- | paste - - -

出力
a A 1
b B 2
c C 3
d D 4
e E 5
2019/08/20(火) 07:40:59.29ID:Gkd3xMH4
そのsortって安定だっけ。
じゃなかったら処理結果が入れ替わるおそれない?
2019/08/20(火) 08:07:31.90ID:JOMXhFk+
>>174
安定になる条件と行番号の関係について
考えてみようか?
2019/08/20(火) 08:24:06.78ID:Gkd3xMH4
POSIX sortだと-s(=stable sortのs)オプションが提供されてないので
どう足掻いても安定にはならんな。

「たまたま」順番が変化しない場合もあるやもしれんが。
2019/08/20(火) 08:37:08.94ID:JOMXhFk+
なんで重複しない行番号の順にソートして並びが入れ替わるんだよw
2019/08/20(火) 12:54:26.88ID:/fB0Ptq3
>>176
「安定」の意味分かって書いてる?
179デフォルトの名無しさん
垢版 |
2019/08/20(火) 13:41:04.53ID:tzbk8R3g
安定の書き込みクオリティ
2019/08/20(火) 13:47:15.01ID:/V4ccaND
シェルスクリプトってテキストファイルこねくり回すくらいしかできないんだよな
2019/08/20(火) 13:52:13.54ID:I7f/WloD
それで十分ですよ
2019/08/20(火) 17:13:37.74ID:Gkd3xMH4
バイナリファイル扱えるスクリプト言語ってある?
Pythonとか?
183デフォルトの名無しさん
垢版 |
2019/08/20(火) 17:15:25.76ID:OyLrpvkx
使えないの挙げたほうが速いのでは?
2019/08/20(火) 17:32:48.20ID:30Dp6unL
使えるほうが多いのか?
2019/08/20(火) 17:47:53.72ID:CuOLtXP9
シェルスクリプトでバイナリを扱いたければ
odを使うしか無いだろう。

zshはNULLを扱えたはずだが、
bashやそれ以外はNULLを扱えない。

例のawkおじさんは、awkスクリプトで頑張ってるようだが
もちろんあれはシェルスクリプトではない
2019/08/20(火) 17:56:41.96ID:/V4ccaND
>>182
扱えるというのはバイナリファイルの編集ができるってことだよね
2019/08/20(火) 17:57:11.37ID:Gkd3xMH4
無知ですまんがAWKおじさんってだれ?
なんか否定的な書き方だけど悪名高いコテハン?
2019/08/20(火) 18:00:14.90ID:CuOLtXP9
>>187
自称シェルスクリプトで色々頑張ってる人。ググればわかる。
悪名高いコテハンではないが、俺的にはあのセンスが受け入れられない。

色々頑張ってるが、コードを見るとawkスクリプトを
シェルスクリプトで生成して、メインの処理はawkで
実行してるのでダサい
2019/08/20(火) 18:01:35.41ID:/V4ccaND
>>187
https://github.com/ShellShoccar-jpn
2019/08/20(火) 18:05:24.00ID:CuOLtXP9
odの他にhexdumpとかでもできるがhexdumpはPOSIXじゃない。
あとbase64もPOSIXじゃない。

あとは出来る可能性があるとすれば uuencode だけど
あれを処理するのは難しいだろうな。
2019/08/20(火) 18:07:02.56ID:CuOLtXP9
>>187
> なんか否定的な書き方だけど
別に否定はしてない。awkもPOSIX準拠だから物自体はいいけど
シェルスクリプトじゃないよねって話
2019/08/20(火) 18:10:40.86ID:Gkd3xMH4
>>189
あぁ、この人のことか。ありがとう。
なんかQiitaかどっかでメチャメチャ喧嘩腰のコメントしてた記憶があるわ。
https://qiita.com/richmikan@github/items/5158eac47467d8a29056
↑ここのコメントとかかな。
言ってることは正しいのかもしれんが、ちょっと品性に欠けるなぁと思った。
2019/08/20(火) 18:15:23.89ID:Gkd3xMH4
>>190
実はBase64はPOSIXの範囲でも(簡単に)実現できる。
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/uuencode.html
によればuuencode -m /dev/stdoutこれでほぼbase64コマンドと同じ挙動になる。
ていうか/dev/stdoutってPOSIXで規定されてないのにその肝心の公式が仕様書内で
/dev/stdoutを使っちゃっていいのかねw
2019/08/20(火) 18:19:45.77ID:5hgm7I5A
>>193
base64をしたいんじゃなくて、base64コマンドはPOSIXじゃないって意味なんだけど
その文章の読めなさ、相変わらずやなw
195デフォルトの名無しさん
垢版 |
2019/08/20(火) 18:23:52.47ID:PFkWfbQh
POSIX、POSIXとか言ってるやつも、AWKおじさん並みのKitty。
2019/08/20(火) 18:25:32.24ID:Gkd3xMH4
Base64を実現したくはないのにbase64コマンドが必要な状況ってどんなのだろう…?
2019/08/20(火) 18:27:06.57ID:5hgm7I5A
今シェルスクリプトでバイナリを扱う話してたろうが
そういうとこやで
2019/08/20(火) 18:41:10.24ID:Gkd3xMH4
こりゃダメだ
2019/08/20(火) 18:49:07.29ID:5hgm7I5A
ふぅ。アスペに説明しても理解できないかもしれんが(他の人は理解できるだろうから書くけど)

1. シェルスクリプトはテキストを扱えない。という話が発端 (>>180
2. バイナリを扱うにはどうするか?→バイナリをテキストに変換するコマンドを使えば良い
3. POSIXの範囲ではodが最適。hexdumpやbase64コマンドはPOSIXではない

ここまではまともな流れ。

なぜかBase64を実現したいことだと勘違いする>>193

(バイナリ→テキストを実現するための)base64 "コマンド" の話だというと

なぜかBase64を実現したくないのにとか、斜め上のことを言い出す>>196
2019/08/20(火) 18:52:24.07ID:/V4ccaND
はい解散
2019/08/20(火) 20:00:45.18ID:Gkd3xMH4
自分の主張をマトモだとか言っちゃう男の人って…
2019/08/20(火) 20:02:58.01ID:ar+OimNr
こいつ素でやってるのか?w

会話の流れがまともだって言ったら、
今度は主張がまともと言ってるんだと読み間違えやがったw

まあ確かにそのとおりではあるが、
文章はそう読めるはずがないよな
2019/08/20(火) 20:15:26.86ID:/fB0Ptq3
>>201
そんでsortの何が安定なのかは分かったの?
2019/08/20(火) 21:24:50.14ID:Gkd3xMH4
sortの話はもう終わったでしょ、お爺ちゃん。
2019/08/20(火) 21:27:12.41ID:ar+OimNr
>>204
あんた最後になにもレスしてないよね?
お前が間違っていましたってことで終わったの?w
2019/08/20(火) 21:28:59.99ID:ar+OimNr
176 名前:デフォルトの名無しさん[sage] 投稿日:2019/08/20(火) 08:24:06.78 ID:Gkd3xMH4 [2/10]
POSIX sortだと-s(=stable sortのs)オプションが提供されてないので
どう足掻いても安定にはならんな。

「たまたま」順番が変化しない場合もあるやもしれんが。

177 自分:デフォルトの名無しさん[sage] 投稿日:2019/08/20(火) 08:37:08.94 ID:JOMXhFk+ [2/2]
なんで重複しない行番号の順にソートして並びが入れ替わるんだよw

178 名前:デフォルトの名無しさん[sage] 投稿日:2019/08/20(火) 12:54:26.88 ID:/fB0Ptq3 [1/2]
>>176
「安定」の意味分かって書いてる?

179 名前:デフォルトの名無しさん[] 投稿日:2019/08/20(火) 13:41:04.53 ID:tzbk8R3g
安定の書き込みクオリティ
2019/08/20(火) 21:30:41.86ID:ar+OimNr
ここで、終わったって自分で言ってるから、
ここで\(^o^)/オワタなんだろうなw
2019/08/20(火) 22:46:08.19ID:Gkd3xMH4
お爺ちゃん怒りの3連レス。そんなに熱くならなくてもいいのに。冷房がもったいないw
2019/08/20(火) 23:02:20.69ID:55BxDwsc
みっともないな>>204
2019/08/20(火) 23:39:15.24ID:I7f/WloD
自称「神様」には何を言ってもムダ
2019/08/21(水) 00:33:27.35ID:XuzWeGbv
自分が常に正しいと思ってる奴にロクな奴はいない
2019/08/21(水) 02:24:45.15ID:GZen3C6t
>>208
あはは。二代目神様襲名おめでとうw
2019/08/21(水) 11:27:36.55ID:eilohrgH
思ったんだけどbash依存するのってなんの機能を使いたくてbash使うの?
bashだけにある機能の事なら知ってる
2019/08/21(水) 11:41:07.46ID:g3Au7XoK
ぐぐったら出てくるから
2019/08/21(水) 11:42:23.31ID:CWF24/8E
別に使いたいわけじゃなくて、ぐぐったらそれがbashスクリプトだったってこと?
じゃあそのbashスクリプトを書いた人はなんでって話になるけど
2019/08/21(水) 11:43:24.61ID:CWF24/8E
訂正

× そのbashスクリプトを書いた人はなんでって話になるけど
○ そのbashスクリプトを書いた人はなんの機能を使いたくてbashを使っているの?
2019/08/21(水) 12:37:03.95ID:+hDHTeft
bashしか使わない人がbash依存して何か問題あるのかね

シェルに限らずLinuxしか使わない人が「Windowsでも動く」プログラムを書く必要はないし

(シェアの低い変なコンピュータ使ってる人はその人だけ苦労すればいい)
2019/08/21(水) 12:38:05.34ID:tOxptV2F
> bashしか使わない人がbash依存して何か問題あるのかね

問題ないよ。なにを目的にbash依存してるのか聞いてるだけ
2019/08/21(水) 12:58:08.94ID:23vMmTO3
>>218
>>217って言ってるだろう
bashを使い他を使うこともないから、わざわざ他を意識する調べることがないってことだろ
2019/08/21(水) 13:00:19.86ID:tOxptV2F
>>219
bashのなにかの機能を使いたくてbashにしているわけじゃないってこと?
配列とかbashにしかないなにかの機能を使いたいからbashを使ってるんじゃないの?
2019/08/21(水) 13:02:07.60ID:23vMmTO3
大多数はそんなこと気にしてないだろう
配列使うにしてもシェルスクリプトで配列使えるか調べ、現在使ってるシェル(大多数がbashだろう)で使えればそう使ってるだけだろう
2019/08/21(水) 13:05:16.74ID:tOxptV2F
なんかそれだとbashにする理由はないのに
bash依存してるって言ってるように見えるなw
2019/08/21(水) 13:07:38.33ID:23vMmTO3
逆でもあるだろうに。それで問題ないなら問題ないだろに
てか、>>217って言ってるのをを未だに理解できないの?理解したくないの?
2019/08/21(水) 13:09:19.14ID:ttxmDenw
結果的にbash依存になっているが当人はそんな事を意識していない、って感じ
2019/08/21(水) 13:09:33.13ID:tOxptV2F
>>223
君が質問に答えないからだよ

質問
> 思ったんだけどbash依存するのってなんの機能を使いたくてbash使うの?

結論
特になにかの機能が使いたいわけではないが、動いてしまったからbash依存になっただけ
2019/08/21(水) 13:11:10.44ID:23vMmTO3
そう>>217が言っているんだがな。なにか文を変えたいだけか?それもいやらしく
いつのもやつか、やっぱり
2019/08/21(水) 13:11:19.76ID:tOxptV2F
>>224
そうそう。そういう感じの答えが欲しかった。

(便利だから)特定の○○の機能が使いたい
or 理由はない

そういう答えを期待していた。
2019/08/21(水) 13:12:38.86ID:tOxptV2F
bashの機能のうち、これは絶対欲しいっていう機能は
あまりないってことなのかな?
2019/08/21(水) 13:18:24.42ID:8muhIeVb
最初から「bashの便利な機能」を聞いてるのに、
思いつかないなら無いって言わないから話がこじれるんだろう。
2019/08/21(水) 13:26:22.43ID:23vMmTO3
bashの便利な機能ってのが何を聞いてるのか曖昧だからな
kash,zshなどでも同じくあるのではないあくまもでbash独自の機能なのかなんななの曖昧
シェルスクリプトに限らずスクリプトに限らずマルチプラットフォームを意識するかどうかの話にならざるを得ないだろう
2019/08/21(水) 13:28:58.51ID:rB/3mk9e
という話をして欲しいんじゃなくて
(あんたが思う)bashの便利な機能を聞いてるんだよ
2019/08/21(水) 13:30:51.65ID:KOXkIKEx
思いつかないなら、無いって素直に言えばいいじゃん。言い訳ばっかり
2019/08/21(水) 13:30:58.28ID:23vMmTO3
ksh,zshなどでも同じくあるのではないあくまもでbash独自の機能なのかなんなのか曖昧

bashの便利な機能もどっちにしろそれが使えないとわかった時に気がつくものだろう。もちろんそんなに便利でもないのもあるだろうけど
2019/08/21(水) 13:31:56.80ID:23vMmTO3
>>231,232
ksh,zshなどでも同じくあるのではないあくまもでbash独自の機能なの?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況