シェルスクリプト総合 その30
■ このスレッドは過去ログ倉庫に格納されています
シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
前スレ:
シェルスクリプト総合 その29
https://mevius.5ch.net/test/read.cgi/tech/1537540487/ >>790
うーん。
まあそうなのかもしれないが
poshを「無意識に」使ってしまう環境なんてあるのだろうか?
例えば#!/bin/shが/usr/bin/bashにリンクされてる環境であれば,
BashのPOSIX互換モード特有のバグには注意しなくてはいけないし,
/bin/shの実体が/usr/bin/bashになってる環境は多いので,
多くの利用者が「今 自分が使っている/bin/shが実はBashだ」と意識することなく
POSIX shで正しく動く筈のシェルスクリプトを走らせることがあると想定できる。
でもposhが既定で/bin/shにリンクされてたりする環境があるとは思えない…。 >>751
この書き方が分かりやすくて良いと思うんだけど何か問題あるの? >>793
何が言いたいのかわからん。
set -uで動かないシェル(例 posh)があると言い出した(>>763)のはあんただろ?
なんで俺が書いたコードがset -uで動かないと言い出した本人が
set -uで動かないシェルを使う環境なんてあるとは思えないって言ってるんだよw 引数を置換するってだけで何をぐだぐだ言ってるんだかw だから>>751は「引数を置換する」コードになってないだろ? オリジナルの引数を置換するのはプログラマーの本能が止めろと言っているw
普通は置換したもの別の変数に入れて使うよな >>801
そのルールを守りつつ、IFS=,でjoinするというテクニックを使って(必須です。カンマ区切りをするときに使用します)
引数 a b c (例です。引数の内容、個数は変わることがあります)から
xaz,xbz,xcz (例です。引数の前後にxとzをつけてカンマ区切りにするという意味です)
という出力を得るコードを書くところまでやるのが君の仕事。
それができれば一人前だ! 「POSIX準拠で」をつけ忘れたなw
そこまで文脈読めてないやつじゃないだろうが >>804
?
俺はシェルスクリプトではやらないが、
他の言語で引数を置換するのはやめろというのはわかるから
その理屈は間違いじゃないとして、じゃあそれをシェルスクリプトでやるには
どうすればいいだろうか?という新たな出題に変えただけだけど?
いや、できるでしょ?これ。 もちろんトリッキーなコードになるだろうけど
(こういうのこそトリッキーというべきだろう) え?
だから>>751でいいじゃん
何か問題あるのか? >>807
自分でルールを守ってない
> 普通は置換したもの別の変数に入れて使うよな >>808
は?
だから出力を変数に入れて使えばいいんだろ それから >>751 に関しては
引数をIFS=,でjoinするならばどうすればいいだろうか?という
出題のルールを守ってないよねってことで>>694に反してる。 >>809
また書くのが遅れたけど、>>751は>>694のルールを守ってないのでだめなんだよ。
その話は終わったって言ってるでしょw >>809
「置換したものを別の変数に入れて」使わなければだめ
「出力したものを別の変数に入れる」のは自分で作ったルールに違反してるw 「やりたいこと」は>>694に書いてあるとおり
「IFS=,でjoinするために引数を置き換える」がやりたいこと(解答はすでに出してる)
んで、新しい問題の「やりたいこと」は>>802に書いてあるとおり 手段が目的化する典型的な例だな
そんな縛りプレイに付き合う気になれんな
で、後からコード出して
こんなのも分からんのか?大したことねえな
ってやりたいんだろ?
それはな、
その問題がつまらないから誰もやらないんだよw >>798
「コードがset -uで動かない」という発言と
「poshを「無意識に」使ってしまう環境なんてあるのだろうか?」という発言は
ほぼ矛盾しないと思うんだけど。
set -uで"$@"が空のとき失敗するシェルはposhだけじゃない。
>>788で示したリンク先を見てくれ。
なぜかあなたはposhに拘ってるけど(最近になっても解決してないからか?)。
poshに限った話じゃないのに,なぜかposhに限定して話を進めてるから困るわ。 あ,ごめん。ID変わってるけど>>797とかです。 >>816
あんたはposhが使われる環境があるとは思えないが
古いシェルが使われる環境はあると思ってset -uの話をしたってこと?
> bash-4.0.0 ... -4.0.27
> dash-0.4.6 ... -0.4.18
> all ksh88
> ksh93 until release t+20090501
> pdksh-5.1.3, -5.2.14
> mksh before R39 (as pdksh descendant)
> posh < 0.10 (as pdksh descendant)
> NetBSD 2 ff. /bin/sh
> all traditional Bourne shells
bash 4.0といえば2009年だね。10年近く前のシェルで動かないからって何?
そんなシェルのことまで考えろって言いたかったの? >>815
俺に出されるのが嫌なら、お前が先に出せばいいやんw >>819
問題がつまらないって言ってるだけだ
なんで俺が問題出さなきゃならんのよ
お題スレでも行けや な?日本語の読解力に問題があるやろ?
俺は>>815にレスをしていて、その>>815は
> で、後からコード出して
と書いてあるように、"出す"のは"コード"という話をしてるのに
"問題"を出す話だと勘違いしてくる。
もうね。日本語のレベルでおかしいから、会話にならんのよ。 >>821
お前の言葉が足りないだけだ
エスパー期待するなよアホ 足りないなら足りない部分を指摘するべき。
自分で勘違いしておいて、後から足りなかったんだっていうなよw >>818
うん。
だって>>685でbash 2.xの話をしてるということは
少なくともBashがそのバージョンであった時代くらいまでは考えるべきなんでしょ? OSXのデフォルトシェルがBash3だったはずと思ったら、最新のOSXだとZshになってるんだな
ま、LTSの古いOSとか、BSD系だとBash4じゃないのも結構あってまだ動いてると思う 実務だとプログラミングって才能とかよりどれだけ知識を蓄えてるかの方が重要だよね?
このスレに居る猛者はどうやって強くなったんすか 才能のないのはまず脱落する。
体力のないのもすぐ脱落する。
あとは下積みあるのみ。 シェルスクリプトの才能ってなに?
驕り高ぶらないこと?w
↑半分本気 シェルスクリプトって5行以内で使うルールで使ってるけど
引数をたくさん使いたいっていう有用なケースってある? >>829
その時代まで考えることと、poshが最新版でも
直ってないことは矛盾しないんだがw >>830
>>2にも書いてあるが、/bin/shの実体が何かわからん時代になったからな
> FreeBSD ユーザーは /bin/sh の実体が ash なので注意。
> Solaris, OpenBSD ユーザーは /bin/sh の実体が ksh なので注意。
> macOS 10.15以降のユーザーは/bin/sh の実体が zsh なので注意。
> android ユーザーは /bin/sh の実体が mksh なので注意。
bashで動けば良いんでしょ?という時代は終わった。
POSIX準拠で書かないと多くの環境で動かない。 >>834
複数ファイルに対して同一の処理をする時。
例えば特定の文字コードに変換するとか。 クロスプラットフォーム必要なケースで、シェルスクリプトで作り込んだりしないよ
PerlかPythonか、Windowsも対応するならGoとか使う >>838
逆じゃね? 何かをシェルスクリプトで作ったとして
多くの環境で使うなら、多くの環境で動かんとだめでしょw >>841
例えば組み込み機器でPerlやPythonも入ってない、入れられないときはどうする?
シェルスクリプトはかろうじて使える(最初から入ってるから)
Goはバイナリがでかいから、空き容量も制限されてる組み込み機器には入れたくない
今はIoT時代ですよ(笑) >>843
シェルスクリプトってすごいんだな
そんな組み込みでも走るとは >>844
組み込みLinux用に作られたBusyBoxっていうのがあって、
一つのバイナリに様々な外部コマンド(catとかsedとかwcとか)が詰め込まれてる。
そのBusyboxにashも組み込まれてる。
ただし様々な外部コマンドが組み込まれてるといっても、POSIX完全準拠を
目指しているわけじゃなくて、容量節約のためあまり使われないオプションを実装していない。
それでもシェル(ash)はPOSIX準拠になってる。
BSDなどでもそうなんだが外部コマンドはオプションが違うことがある。
オプションの違いでLinuxで動いたものがMacで動かなかったりするが
シェルスクリプトで実装していればそういうこともない。 (Busyboxは組み込み用ではあるが、組み込みLinux用とは限らんかw) (´-`).。oO(IoT機器で文字列くっつけたりTSVファイルを混ぜたりしているのか… そりゃすることもあるだろw
IoTはモノのインターネットの略なんだから
インターネットにあるものと連携してるよ。
TSVやCSVだけじゃなくJSONやXMLやYAMLも扱いたい
(簡易なことならsedなどで対応できるが) やっぱりどこでも動くシェルスクリプトなんて幻想なんだね… (´-`).。oO(心の声に反応しないで欲しい…w >>849
POSIX準拠でシェルスクリプトで書けば可能だって言ってんだろw 今現在でも世界中で書かれているシェルスクリプトの一体何%がPOSIX準拠なのか。
ま、実質幻想だね。 (´-`).。oO(心は常に幻想を追い求める…原理主義者の業の深さよ… 具体性ゼロだな。単なる可能性想像上だけの話だな
多くは限られた環境しか使わんし、それで動けばいい、何か他で使うようなときに問題があったら考えようで十分だろな
使ってる環境(OS)にデフォで入っている汎用スクリプトもそのOSでしか動きませんというのもそんなもんだし 例えば、gitはいろんな環境で使うが、35.7%がシェルスクリプトである
https://github.com/git/git (´-`).。oO(いつからgitはPOSIXコマンドになったんだろう) 35.7%っていってるんだから、探すまでもなく他の使ってるってわかるだろw >>857
gitがPOSIXコマンドだって誰も言ってない 少なくとも git-filter-branch.sh は perl がインストールされていない環境では
動作しない…それに、シェルスクリプトの表現能力が(他の言語に比べて相
対的に)低いために全体の占める割合が高くなってしまっているという可能性
も否定できない。別段それが悪いわけではないが。 gitコマンドの話(しかも実装の話)を延々とされても困るわ shbang が全部 #!/usr/bin/env bash だな。個人的にはこの方がいいけどw (´-`).。oO(gitを使うシェルスクリプトはPOSIX準拠じゃないだろ) まさかと思ったが具体性のために git を出したのか。誰がそんなことを聞いているねん
ここにいるどんだけの人がそういう多くの人が使うのを書いているねん。今までのでもほとんど「私用」だろに gitを呼び出すシェルスクリプトの話は誰もしてない >>869
世界の話をするな。ここにいる人たちだけの話をしろ
俺たちの村の話だ。って言いたいわけ? 私用で限られた環境で動けばいいのならPOSIXにこだわる必要性はほぼゼロだな
そしてこのスレでの限られた人を除いては、あくまでも私用範囲といういたって普通の話だろう
だから、あなたがgitレベルの何を書いているのかね?そういう具体性。自分でそういうの書いていないのに? >>865
結局彼は何を言いたいのかな?わけわからんなw ワシもわけわからんw 具体例なら例の某POSIX原理主義者が書いた
ピュアシェルスクリプトの nkf 互換コマンドを出せばいいのに、って思う それが nkf を置き換えるぐらいメジャーだったら出してたのかも
所詮お遊び趣味可能性を示しただけという認識なのかも
よく知らんけどそのスクリプトがどれだけ使われているのか 例えばさ、リモートでHW情報(CPU,メモリ,ディスク...)を取得したいとするじゃん
プラットフォームも様々Linux, FreeBSD, mac...
これPOSIX準拠で書けるかって話
実装はsshでログインしてproc見てってやるじゃん
sshはPOSIXコマンドじゃないし
procはLinuxとBSD系で構成が違うから判断が必要
POSIXで担保できる可搬性には限界があるってことだ >>875
確かに処理速度が遅すぎて全然使い物にならんかったよ…
本人は「遅くてもいいのだ、POSIXシェルがあればどこでも
使えるんだから」って強弁してたけどw どうでもいいけどgitやらrbenvやらって「POSIXシェルスクリプト」で書かれてんの?
そうじゃなきゃ彼の「世界中でPOSIX準拠のシェルスクリプトが動いてる!」って主張は
まったく支援されない,いや寧ろBashに依存したシェルスクリプトがrbenvという世界的な
プログラムで採用されてることによってその説は説得力を失なってるまである。
あ,「俺は『世界中でPOSIX準拠のシェルスクリプトが動いてる』なんて言ってない」なんて
くだらねー反論を先に封じておくと,
>>852に対して>>856を出した訳だから,
当然「シェルスクリプトの一体何%がPOSIX準拠なのか」に答えてる訳だからねぇ。 >>874
> ピュアシェルスクリプトの nkf 互換コマンドを出せばいいのに、って思う
しらんけど、どうせ大部分がawk実装で、
シェルスクリプトで実装してないんだろ? >>879
> どうでもいいけどgitやらrbenvやらって「POSIXシェルスクリプト」で書かれてんの?
話ずれまくりw いろんな環境で動くことが重要って話だろ >>880
いや、POSIXシェルの機能だけを使ってる。可搬性は高いが遅い。 >>883
思いつかない人のために、gitやrbenvという具体例をだしました。 >>882
それがどこにあるのかしらんが、iconvがPOSIXなのでどうでもいいかなw
nkfなんて所詮日本語にしか対応してないし 意味わからん逃げだな
そんなに多くの人が使ってるようなの書いていたら言えるだろうに。具体的に >>886
もしかして俺が誰か特定したかったのか? なにを言っているのか意味わからん
いろんな環境で動くがほぼ絶対なんだろう?そのいろんな環境で動くなにを書いているんだよという素朴な疑問
多くはいろんな環境で動くのを想定してなんていなく、自分の使う環境でしかとしか思わないからな >>888
> そのいろんな環境で動くなにを書いているんだよ
俺の個人的な便利ツール 便利ツールは、俺が興味がある環境すべてで使う。
LinuxやBSDやmacOSや組み込み環境
Unixも興味あるがSorarisとMac以外は個人で使うのが難しいので残念 だったら、いろんな環境で動くがほぼ絶対はあんただけのことだな >>891
俺が和洋中すべての料理を食べるって言ったら、
これらの料理を食べるのは、俺だけってことになるんか? ■ このスレッドは過去ログ倉庫に格納されています