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

レス数が900を超えています。1000を超えると表示できなくなるよ。
2019/07/01(月) 23:04:27.02ID:/rKj5XUf
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。

前スレ:
シェルスクリプト総合 その29
https://mevius.5ch.net/test/read.cgi/tech/1537540487/
2019/08/10(土) 17:00:18.98ID:lTTXvTcQ
840デフォルトの名無しさん
垢版 |
2019/08/10(土) 17:01:40.37ID:tdOS9ehT
>>834
複数ファイルに対して同一の処理をする時。
例えば特定の文字コードに変換するとか。
2019/08/10(土) 17:04:52.26ID:4go3Z6Df
クロスプラットフォーム必要なケースで、シェルスクリプトで作り込んだりしないよ
PerlかPythonか、Windowsも対応するならGoとか使う
2019/08/10(土) 17:10:57.28ID:L+B8OP2P
>>838
逆じゃね? 何かをシェルスクリプトで作ったとして
多くの環境で使うなら、多くの環境で動かんとだめでしょw
2019/08/10(土) 17:14:02.55ID:L+B8OP2P
>>841
例えば組み込み機器でPerlやPythonも入ってない、入れられないときはどうする?
シェルスクリプトはかろうじて使える(最初から入ってるから)
Goはバイナリがでかいから、空き容量も制限されてる組み込み機器には入れたくない
今はIoT時代ですよ(笑)
2019/08/10(土) 17:24:27.35ID:leF4BPLu
>>843
シェルスクリプトってすごいんだな
そんな組み込みでも走るとは
2019/08/10(土) 17:35:44.47ID:L+B8OP2P
>>844
組み込みLinux用に作られたBusyBoxっていうのがあって、
一つのバイナリに様々な外部コマンド(catとかsedとかwcとか)が詰め込まれてる。
そのBusyboxにashも組み込まれてる。

ただし様々な外部コマンドが組み込まれてるといっても、POSIX完全準拠を
目指しているわけじゃなくて、容量節約のためあまり使われないオプションを実装していない。
それでもシェル(ash)はPOSIX準拠になってる。

BSDなどでもそうなんだが外部コマンドはオプションが違うことがある。
オプションの違いでLinuxで動いたものがMacで動かなかったりするが
シェルスクリプトで実装していればそういうこともない。
2019/08/10(土) 17:37:10.25ID:L+B8OP2P
(Busyboxは組み込み用ではあるが、組み込みLinux用とは限らんかw)
2019/08/10(土) 17:46:25.47ID:6d2gRK68
(´-`).。oO(IoT機器で文字列くっつけたりTSVファイルを混ぜたりしているのか…
2019/08/10(土) 17:53:19.49ID:L+B8OP2P
そりゃすることもあるだろw

IoTはモノのインターネットの略なんだから
インターネットにあるものと連携してるよ。

TSVやCSVだけじゃなくJSONやXMLやYAMLも扱いたい
(簡易なことならsedなどで対応できるが)
849デフォルトの名無しさん
垢版 |
2019/08/10(土) 17:56:06.44ID:C/8mgJdF
やっぱりどこでも動くシェルスクリプトなんて幻想なんだね…
2019/08/10(土) 17:56:37.22ID:6d2gRK68
(´-`).。oO(心の声に反応しないで欲しい…w
2019/08/10(土) 18:04:41.45ID:L+B8OP2P
>>849
POSIX準拠でシェルスクリプトで書けば可能だって言ってんだろw
852デフォルトの名無しさん
垢版 |
2019/08/10(土) 18:30:59.43ID:SA5rOGgq
今現在でも世界中で書かれているシェルスクリプトの一体何%がPOSIX準拠なのか。
ま、実質幻想だね。
2019/08/10(土) 18:31:19.35ID:4go3Z6Df
まあ無理だね
2019/08/10(土) 18:38:02.19ID:6d2gRK68
(´-`).。oO(心は常に幻想を追い求める…原理主義者の業の深さよ…
2019/08/10(土) 19:05:33.96ID:blTYOOvx
具体性ゼロだな。単なる可能性想像上だけの話だな
多くは限られた環境しか使わんし、それで動けばいい、何か他で使うようなときに問題があったら考えようで十分だろな
使ってる環境(OS)にデフォで入っている汎用スクリプトもそのOSでしか動きませんというのもそんなもんだし
2019/08/10(土) 19:15:08.08ID:L+B8OP2P
例えば、gitはいろんな環境で使うが、35.7%がシェルスクリプトである

https://github.com/git/git
2019/08/10(土) 19:24:04.14ID:gKKk3ZAT
(´-`).。oO(いつからgitはPOSIXコマンドになったんだろう)
2019/08/10(土) 19:26:31.61ID:6d2gRK68
シェルスクリプトと言いつつ Perl もご使用の様子

https://github.com/git/git/blob/master/git-filter-branch.sh#L284
2019/08/10(土) 19:29:59.92ID:L+B8OP2P
35.7%っていってるんだから、探すまでもなく他の使ってるってわかるだろw
2019/08/10(土) 19:30:21.32ID:L+B8OP2P
>>857
gitがPOSIXコマンドだって誰も言ってない
2019/08/10(土) 19:34:35.69ID:6d2gRK68
少なくとも git-filter-branch.sh は perl がインストールされていない環境では
動作しない…それに、シェルスクリプトの表現能力が(他の言語に比べて相
対的に)低いために全体の占める割合が高くなってしまっているという可能性
も否定できない。別段それが悪いわけではないが。
2019/08/10(土) 19:49:03.72ID:lTTXvTcQ
gitコマンドの話(しかも実装の話)を延々とされても困るわ
2019/08/10(土) 19:51:14.48ID:L+B8OP2P
そりゃ具体例があるという話をされると困るやろなw
2019/08/10(土) 19:52:40.23ID:L+B8OP2P
じゃあ続いての具体例、rbenv。Shellが96.5%
https://github.com/rbenv/rbenv
2019/08/10(土) 19:56:39.76ID:6d2gRK68
shbang が全部 #!/usr/bin/env bash だな。個人的にはこの方がいいけどw
2019/08/10(土) 19:58:18.27ID:gKKk3ZAT
(´-`).。oO(gitを使うシェルスクリプトはPOSIX準拠じゃないだろ)
2019/08/10(土) 19:59:11.41ID:L+B8OP2P
gitを使うシェルスクリプトってなんのこと?
2019/08/10(土) 20:01:14.55ID:gKKk3ZAT
gitを呼び出すシェルスクリプト...
2019/08/10(土) 20:03:00.81ID:N6maMe0S
まさかと思ったが具体性のために git を出したのか。誰がそんなことを聞いているねん
ここにいるどんだけの人がそういう多くの人が使うのを書いているねん。今までのでもほとんど「私用」だろに
2019/08/10(土) 20:03:07.19ID:L+B8OP2P
gitを呼び出すシェルスクリプトの話は誰もしてない
2019/08/10(土) 20:04:38.53ID:L+B8OP2P
>>869
世界の話をするな。ここにいる人たちだけの話をしろ
俺たちの村の話だ。って言いたいわけ?
2019/08/10(土) 20:07:18.63ID:N6maMe0S
私用で限られた環境で動けばいいのならPOSIXにこだわる必要性はほぼゼロだな
そしてこのスレでの限られた人を除いては、あくまでも私用範囲といういたって普通の話だろう

だから、あなたがgitレベルの何を書いているのかね?そういう具体性。自分でそういうの書いていないのに?
2019/08/10(土) 20:20:07.09ID:N6maMe0S
>>865
結局彼は何を言いたいのかな?わけわからんなw
2019/08/10(土) 20:32:37.04ID:6d2gRK68
ワシもわけわからんw 具体例なら例の某POSIX原理主義者が書いた
ピュアシェルスクリプトの nkf 互換コマンドを出せばいいのに、って思う
2019/08/10(土) 20:40:24.97ID:N6maMe0S
それが nkf を置き換えるぐらいメジャーだったら出してたのかも
所詮お遊び趣味可能性を示しただけという認識なのかも
よく知らんけどそのスクリプトがどれだけ使われているのか
2019/08/10(土) 20:40:54.36ID:x0rFB4wI
例えばさ、リモートでHW情報(CPU,メモリ,ディスク...)を取得したいとするじゃん
プラットフォームも様々Linux, FreeBSD, mac...
これPOSIX準拠で書けるかって話

実装はsshでログインしてproc見てってやるじゃん
sshはPOSIXコマンドじゃないし
procはLinuxとBSD系で構成が違うから判断が必要

POSIXで担保できる可搬性には限界があるってことだ
2019/08/10(土) 20:44:39.21ID:6d2gRK68
>>875
確かに処理速度が遅すぎて全然使い物にならんかったよ…
本人は「遅くてもいいのだ、POSIXシェルがあればどこでも
使えるんだから」って強弁してたけどw
2019/08/10(土) 20:45:40.10ID:N6maMe0S
w
(そんなオチかよw)
2019/08/10(土) 20:49:13.37ID:lTTXvTcQ
どうでもいいけどgitやらrbenvやらって「POSIXシェルスクリプト」で書かれてんの?
そうじゃなきゃ彼の「世界中でPOSIX準拠のシェルスクリプトが動いてる!」って主張は
まったく支援されない,いや寧ろBashに依存したシェルスクリプトがrbenvという世界的な
プログラムで採用されてることによってその説は説得力を失なってるまである。

あ,「俺は『世界中でPOSIX準拠のシェルスクリプトが動いてる』なんて言ってない」なんて
くだらねー反論を先に封じておくと,
>>852に対して>>856を出した訳だから,
当然「シェルスクリプトの一体何%がPOSIX準拠なのか」に答えてる訳だからねぇ。
2019/08/10(土) 21:19:03.25ID:L+B8OP2P
>>874
> ピュアシェルスクリプトの nkf 互換コマンドを出せばいいのに、って思う
しらんけど、どうせ大部分がawk実装で、
シェルスクリプトで実装してないんだろ?
2019/08/10(土) 21:19:45.62ID:L+B8OP2P
>>879
> どうでもいいけどgitやらrbenvやらって「POSIXシェルスクリプト」で書かれてんの?

話ずれまくりw いろんな環境で動くことが重要って話だろ
2019/08/10(土) 21:23:38.65ID:6d2gRK68
>>880
いや、POSIXシェルの機能だけを使ってる。可搬性は高いが遅い。
2019/08/10(土) 21:31:01.53ID:N6maMe0S
いろんな環境で動くなにを書いているのだか...w
2019/08/10(土) 21:33:10.93ID:L+B8OP2P
>>883
思いつかない人のために、gitやrbenvという具体例をだしました。
2019/08/10(土) 21:35:17.53ID:L+B8OP2P
>>882
それがどこにあるのかしらんが、iconvがPOSIXなのでどうでもいいかなw
nkfなんて所詮日本語にしか対応してないし
2019/08/10(土) 21:35:31.35ID:eyby+BxV
意味わからん逃げだな
そんなに多くの人が使ってるようなの書いていたら言えるだろうに。具体的に
2019/08/10(土) 21:39:50.03ID:L+B8OP2P
>>886
もしかして俺が誰か特定したかったのか?
2019/08/10(土) 21:41:52.82ID:eyby+BxV
なにを言っているのか意味わからん
いろんな環境で動くがほぼ絶対なんだろう?そのいろんな環境で動くなにを書いているんだよという素朴な疑問
多くはいろんな環境で動くのを想定してなんていなく、自分の使う環境でしかとしか思わないからな
2019/08/10(土) 21:50:32.32ID:L+B8OP2P
>>888
> そのいろんな環境で動くなにを書いているんだよ

俺の個人的な便利ツール
2019/08/10(土) 21:52:52.92ID:L+B8OP2P
便利ツールは、俺が興味がある環境すべてで使う。
LinuxやBSDやmacOSや組み込み環境
Unixも興味あるがSorarisとMac以外は個人で使うのが難しいので残念
2019/08/10(土) 21:52:57.75ID:eyby+BxV
だったら、いろんな環境で動くがほぼ絶対はあんただけのことだな
2019/08/10(土) 21:55:49.46ID:L+B8OP2P
>>891
俺が和洋中すべての料理を食べるって言ったら、
これらの料理を食べるのは、俺だけってことになるんか?
2019/08/10(土) 21:56:20.44ID:lTTXvTcQ
被害妄想やばない?
894デフォルトの名無しさん
垢版 |
2019/08/10(土) 21:58:00.05ID:SA5rOGgq
問.今現在でも世界中で書かれているシェルスクリプトの一体何%がPOSIX準拠なのか

池沼の答え1.gitは35.7%がシェルスクリプトである。俺は問に答えた!

池沼の答え2.rbenvはShellが96.5%。これが具体例だ!

ぼく「・・・」
2019/08/10(土) 21:59:30.89ID:eyby+BxV
>>892
また意味わからんことを言い出す
いろんな環境で動くがほぼ絶対と聞いたら俺の個人的な便利ツールってんんだもん、そんなの「あなたの[限られた]環境」の話だろう

結局自分の趣味の話だけじゃないの(なにその>>890のもろ趣味ですは)
それを根拠に他人に押し付ける、他人のを否定するんじゃないよ
2019/08/10(土) 22:01:46.59ID:L+B8OP2P
>>895
お前、他の人が「個人的な便利ツール」を持ってないとでも思ってんのか?

なんで、俺一人から情報もらったら、
世界全部のことを知ったつもりになるのさw
2019/08/10(土) 22:03:58.32ID:L+B8OP2P
>>894
あのー?その問いに答えたつもりはないんですが?

>>855が「具体性ゼロだな。多くは限られた環境しか使わんし、それで動けばいい」っていうから
具体的に、いろんな環境で動かすツールを出したんですが?
2019/08/10(土) 22:04:32.77ID:eyby+BxV
>>896
意味わからん。なに言っているの?
特定な環境で動く個人的ツールの方が腐るほどあるだろうなんて理解できないの?個人的ツールだろ?意味わかって個人的ツールって使ってるの?
2019/08/10(土) 22:12:33.18ID:L+B8OP2P
>>898
だから、俺の個人ツールの話を聞いただけで、
POSIX準拠が必要なのは、世界中で俺だけだって判断してるのが
意味不明だって言ってるんだがw
2019/08/10(土) 22:18:08.74ID:eyby+BxV
根本的に何も理解できないのな
マルチプラットフォームを意識するスクリプトも当然あるし、そうじゃない特定の環境で動けばいいスクリプトも当然ある

あんたは前者ひとつと言うからおかしい。具体的にって聞いたら個人的ツールってことなので、全然いろんな環境で動くがほぼ絶対ではないってことだよ
というか逆に特定の環境で動けばいいの方が多数を占めているのが現実だろう。なぜかは自分で>>890で言っているようなもん

POSIX大好きいろんな環境で動くスクリプト書くのが好きってだけだな
2019/08/10(土) 22:24:37.93ID:L+B8OP2P
>>900
あのさぁ、俺はすべてのシェルスクリプトがPOSIX準拠するべきだなんて一言も言ってないんだが?
お前の思い込みだろ。俺がそう言ってるって。

俺は
POSIX準拠であれば、多くの環境で動く(事実)
俺が使ってる個人ツールは、多くの環境で動かしたい(事実)
俺の個人ツール以外でも、gitに含まれてるスクリプトやrbenvなど多くの環境で動かしたいものはある(事実)
としか言ってないの
2019/08/10(土) 22:27:45.82ID:L+B8OP2P
他にも俺が言ったことには、

外部コマンドはオプションが異なることがあるので、シェルスクリプトで実装すると、
その違いに振り回されなくてすむ

というのがあります。
2019/08/10(土) 22:37:35.17ID:eyby+BxV
>>830に対して>>837なんて言い出す、それも自分ではPOSIXでの人だからそうとられても仕方がないと思うけど
(>>830はbashとzshの違いだし、デフォルトシェルが変わるだけでbashにすればだけで済む話でもあって)

まあ、言う通りなら俺の読み違いってことだな、まあ、すまんかった...腑に落ちないがw POSIXで書く書かないは好きにしろってことなら、すまんかった
2019/08/10(土) 22:48:47.16ID:lTTXvTcQ
だいたいPOSIXに従ってないシェルもあるんだから
POSIXで書いたからといってどこでも動くわけじゃないし。

なんというか,ベンダ依存を嫌うあまりPOSIXに「依存」してしまってる感がある。
2019/08/10(土) 22:49:05.60ID:x0rFB4wI
ここってPOSIXシェル以外の話題もおkなんだよな
なのに、それはbash依存とか外部コマンド使ったら遅いとか押しつけがましいやつがウザいんだよ
そんなもん好きに書かせろやって感じだわ
2019/08/10(土) 22:50:33.71ID:AU+T1mdi
まったく言う通りでございますw
2019/08/10(土) 22:56:44.56ID:L+B8OP2P
> 最新のOSXだとZshになってるんだな
という話に続いて、他のOSではいろんなシェルが使われてるという話をすることに
なんの問題があるのかわからんが?

bashをインストールするのが大変な環境もあるんだし
POSIX準拠の範囲でできるなら、POSIX準拠でやればいいだろ。対して手間もかからんし。
逆にオプションの違いで動かんことに対応する方が手間なんだよ。

上の方でも出てたけど、sort -Vで動くウェーイってやってたらmacOSで動かんのだろ?
(ぐぐって確かに動かんというような記事ばかりだが、最新のmacOSだと対応してる気もするw)
2019/08/10(土) 22:58:46.81ID:AU+T1mdi
結局POSIXで書けって言ってるだろうに。ふらふらしてんなあ
2019/08/10(土) 23:01:39.84ID:L+B8OP2P
>>904
> だいたいPOSIXに従ってないシェルもあるんだから
> POSIXで書いたからといってどこでも動くわけじゃないし。

もっといい案があれば採用するが?
条件後出しするなって言われそうだから条件

組み込み機器など含めてソフトウェアを追加するのが困難なシステムでも動く
コンパイルはもとより、クロスコンパイル環境も不要
この条件でできるだけ多くの環境で同じように動く
2019/08/10(土) 23:02:36.58ID:L+B8OP2P
>>908
どこをどう読めば、お前は命令されてるように感じるんだ?w
2019/08/10(土) 23:04:12.98ID:AU+T1mdi
>POSIX準拠の範囲でできるなら、POSIX準拠でやればいいだろ。対して手間もかからんし。
誰に向けて書いているの?
2019/08/10(土) 23:04:27.98ID:L+B8OP2P
補足

> この条件でできるだけ多くの環境で同じように動く
これは多くの"種類"の環境っていみな
世の中Windowsばかりだろという反論は筋違い
2019/08/10(土) 23:05:05.76ID:L+B8OP2P
>>911
する必要もないのに、bashに依存してる人
2019/08/10(土) 23:05:18.04ID:6d2gRK68
なんかシラケちゃったな
2019/08/10(土) 23:05:34.13ID:AU+T1mdi
それがだろうが。自分で何を書いているのかわかららないの?
2019/08/10(土) 23:06:03.29ID:L+B8OP2P
>>915
だからそれってなんだよw
2019/08/10(土) 23:06:21.63ID:AU+T1mdi
一貫性がないね。言質とられても逃げるだけだね
2019/08/10(土) 23:06:45.91ID:L+B8OP2P
ずっと同じこと言ってるだろw
2019/08/10(土) 23:08:20.30ID:AU+T1mdi
別にbashに依存してもいいだろう?それでそのスクリプトの実行に問題がなければ
>俺はすべてのシェルスクリプトがPOSIX準拠するべきだなんて一言も言ってない
と相入れないね
2019/08/10(土) 23:09:10.56ID:L+B8OP2P
唐揚げにレモンをかけると美味しくなりますよって言ったら、
「俺にレモンをかけろと命令したな!ムキー」って怒るような
話が通じない人が多いw
2019/08/10(土) 23:10:11.18ID:AU+T1mdi
わからんけど、複数が「?」と思ってるのだよ。よく考えような
2019/08/10(土) 23:11:23.84ID:L+B8OP2P
>>919
bashに依存してもいいだろ。というと
POSIXのすることのメリットは矛盾しないからねw

「bashに依存してもいいだろ」はお前の主観で、
POSIX準拠で作ることのメリットは客観的なもの
客観的事実に、主観で反論しないでください
2019/08/10(土) 23:11:53.50ID:L+B8OP2P
>>921
そうだと良いね(笑)
2019/08/10(土) 23:12:31.18ID:AU+T1mdi
それもPOSIX好きな主観だとは気づかないのね
2019/08/10(土) 23:13:23.36ID:L+B8OP2P
>>924
「POSIX好き」は主観
そのPOSIX好きの俺が述べてるPOSIX準拠のメリットは客観
2019/08/10(土) 23:14:17.64ID:L+B8OP2P
あと11レスで今日一日でこのスレの1/10を俺が占拠したことになる。
お前ら、レス頑張れ!
2019/08/10(土) 23:14:26.20ID:AU+T1mdi
結局何を言いたいの?POSIXで書け、できるだけそう書けと言いたいの?
2019/08/10(土) 23:15:52.78ID:L+B8OP2P
>>927
POSIX準拠で書けば、メリットがあるので、
POSIX準拠で書く話をしましょう。
ネタがなければ、私が時々問題を出しますよ

興味がない人は見なくていいです。
レスもしなくていいです。
2019/08/10(土) 23:16:41.85ID:AU+T1mdi
すべてのシェルスクリプトがPOSIX準拠するべきだ
との違いがわからんな
2019/08/10(土) 23:19:56.39ID:6d2gRK68
     ∧∧  ミ _ ドスッ
     (   ,,)┌─┴┴─┐
    /   つ.  終  了 │
  〜′ /´ └─┬┬─┘
   ∪ ∪      ││ _ε3
            ゛゛'゛'゛
2019/08/10(土) 23:23:45.46ID:L+B8OP2P
>>929
Javaで書けばいろんなOSで動きます。

と言ったからって、ドライバまでJavaで書けと言ってるんだ!
なんて思いますか?
2019/08/10(土) 23:27:18.24ID:AU+T1mdi
ドライバがJavaで書けるなら書く人もいるだろう。そんなOSがあれば
不適切よくわからん例えだな

結局
すべてのシェルスクリプトがPOSIX準拠するべきだ
と言ってるのね。好きにしろではなくてPOSIXを強く勧める押し付けがましく
2019/08/10(土) 23:29:21.42ID:L+B8OP2P
>>905
少なくとも5年前から

> □A. お約束
> 1. 特記なき場合は #!/bin/sh がデフォルトです。この場合可搬性に注意し、
>  Traditional Bourne Shell もしくは、POSIX 相当のスクリプトでお願いします。
>  bash / zsh / ksh / ash / dash や OS 等に依存する場合は、明示しましょう。
>  良く分からない方は、使用している OS を書いておけば OK です。是非ご参加下さい。

https://peace.5ch.net/test/read.cgi/unix/1415634843/
2019/08/10(土) 23:30:20.34ID:L+B8OP2P
>>932
> ドライバがJavaで書けるなら書く人もいるだろう。

そう思うのが普通ですよね?
「書けと命令したんだ!ムキー」ってなる方がおかしい
2019/08/10(土) 23:31:49.03ID:AU+T1mdi
自分だって否定されたらそうなってるように見えるけど?
2019/08/10(土) 23:32:16.77ID:L+B8OP2P
>>932
Javaで例えれば冷静になって、
> ドライバがJavaで書けるなら書く人もいるだろう。
っていうわけだよね

でも、POSIXで書けばいろんなOSで動きますって言うと、頭に血が上って
> すべてのシェルスクリプトがPOSIX準拠するべきだ
> と言ってるのね。好きにしろではなくてPOSIXを強く勧める押し付けがましく

っていう感想に変わっちゃうんだよねw
2019/08/10(土) 23:33:23.10ID:L+B8OP2P
俺が「POSIXで書けばいろんな環境で動きます。」って言ったんだから

「POSIXで書けるなら書く人もいるだろう。」って言えばいいだけなのにw

Javaの場合みたいに!
2019/08/10(土) 23:36:17.65ID:AU+T1mdi
全然わかってなくて、そのレスは酷い。なにか揚げ足とってよろこんでいるように見えるけどw
問題なければいいよどうでもというのと、問題なくてもメリットがあるからこっちに「決まってる」という違い
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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