X



シェルスクリプト総合 その30
■ このスレッドは過去ログ倉庫に格納されています
0792デフォルトの名無しさん
垢版 |
2019/08/10(土) 05:19:53.11ID:YdwKfvKq
>>789
無駄だろう、最初から偉ぶりたいのが目的なんだから
他人と同等になっただけでも負けとかなんとか思ってるのだろう
0793デフォルトの名無しさん
垢版 |
2019/08/10(土) 06:27:36.08ID:lTTXvTcQ
>>790
うーん。
まあそうなのかもしれないが
poshを「無意識に」使ってしまう環境なんてあるのだろうか?
例えば#!/bin/shが/usr/bin/bashにリンクされてる環境であれば,
BashのPOSIX互換モード特有のバグには注意しなくてはいけないし,
/bin/shの実体が/usr/bin/bashになってる環境は多いので,
多くの利用者が「今 自分が使っている/bin/shが実はBashだ」と意識することなく
POSIX shで正しく動く筈のシェルスクリプトを走らせることがあると想定できる。
でもposhが既定で/bin/shにリンクされてたりする環境があるとは思えない…。
0796デフォルトの名無しさん
垢版 |
2019/08/10(土) 09:50:56.01ID:L+B8OP2P
>>793
何が言いたいのかわからん。

set -uで動かないシェル(例 posh)があると言い出した(>>763)のはあんただろ?

なんで俺が書いたコードがset -uで動かないと言い出した本人が
set -uで動かないシェルを使う環境なんてあるとは思えないって言ってるんだよw
0801デフォルトの名無しさん
垢版 |
2019/08/10(土) 10:20:30.35ID:x0rFB4wI
オリジナルの引数を置換するのはプログラマーの本能が止めろと言っているw
普通は置換したもの別の変数に入れて使うよな
0802デフォルトの名無しさん
垢版 |
2019/08/10(土) 10:31:58.19ID:L+B8OP2P
>>801
そのルールを守りつつ、IFS=,でjoinするというテクニックを使って(必須です。カンマ区切りをするときに使用します)
引数 a b c (例です。引数の内容、個数は変わることがあります)から
xaz,xbz,xcz (例です。引数の前後にxとzをつけてカンマ区切りにするという意味です)
という出力を得るコードを書くところまでやるのが君の仕事。
それができれば一人前だ!
0803デフォルトの名無しさん
垢版 |
2019/08/10(土) 10:37:28.54ID:L+B8OP2P
「POSIX準拠で」をつけ忘れたなw
そこまで文脈読めてないやつじゃないだろうが
0805デフォルトの名無しさん
垢版 |
2019/08/10(土) 10:47:01.43ID:L+B8OP2P
>>804


俺はシェルスクリプトではやらないが、
他の言語で引数を置換するのはやめろというのはわかるから
その理屈は間違いじゃないとして、じゃあそれをシェルスクリプトでやるには
どうすればいいだろうか?という新たな出題に変えただけだけど?

いや、できるでしょ?これ。
0806デフォルトの名無しさん
垢版 |
2019/08/10(土) 10:48:10.57ID:L+B8OP2P
もちろんトリッキーなコードになるだろうけど
(こういうのこそトリッキーというべきだろう)
0810デフォルトの名無しさん
垢版 |
2019/08/10(土) 10:51:49.42ID:L+B8OP2P
それから >>751 に関しては
引数をIFS=,でjoinするならばどうすればいいだろうか?という
出題のルールを守ってないよねってことで>>694に反してる。
0812デフォルトの名無しさん
垢版 |
2019/08/10(土) 10:54:58.72ID:L+B8OP2P
>>809
「置換したものを別の変数に入れて」使わなければだめ
「出力したものを別の変数に入れる」のは自分で作ったルールに違反してるw
0814デフォルトの名無しさん
垢版 |
2019/08/10(土) 11:22:44.90ID:L+B8OP2P
「やりたいこと」は>>694に書いてあるとおり
「IFS=,でjoinするために引数を置き換える」がやりたいこと(解答はすでに出してる)

んで、新しい問題の「やりたいこと」は>>802に書いてあるとおり
0815デフォルトの名無しさん
垢版 |
2019/08/10(土) 11:44:27.56ID:x0rFB4wI
手段が目的化する典型的な例だな
そんな縛りプレイに付き合う気になれんな

で、後からコード出して
こんなのも分からんのか?大したことねえな
ってやりたいんだろ?

それはな、
その問題がつまらないから誰もやらないんだよw
0816デフォルトの名無しさん
垢版 |
2019/08/10(土) 12:08:44.58ID:Du6eKhDT
>>798
「コードがset -uで動かない」という発言と
「poshを「無意識に」使ってしまう環境なんてあるのだろうか?」という発言は
ほぼ矛盾しないと思うんだけど。

set -uで"$@"が空のとき失敗するシェルはposhだけじゃない。
>>788で示したリンク先を見てくれ。
なぜかあなたはposhに拘ってるけど(最近になっても解決してないからか?)。

poshに限った話じゃないのに,なぜかposhに限定して話を進めてるから困るわ。
0818デフォルトの名無しさん
垢版 |
2019/08/10(土) 12:22:13.64ID:L+B8OP2P
>>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年近く前のシェルで動かないからって何?
そんなシェルのことまで考えろって言いたかったの?
0820デフォルトの名無しさん
垢版 |
2019/08/10(土) 12:31:02.29ID:x0rFB4wI
>>819
問題がつまらないって言ってるだけだ
なんで俺が問題出さなきゃならんのよ
お題スレでも行けや
0821デフォルトの名無しさん
垢版 |
2019/08/10(土) 12:37:04.59ID:L+B8OP2P
な?日本語の読解力に問題があるやろ?

俺は>>815にレスをしていて、その>>815
> で、後からコード出して
と書いてあるように、"出す"のは"コード"という話をしてるのに
"問題"を出す話だと勘違いしてくる。

もうね。日本語のレベルでおかしいから、会話にならんのよ。
0823デフォルトの名無しさん
垢版 |
2019/08/10(土) 12:43:50.43ID:L+B8OP2P
足りないなら足りない部分を指摘するべき。
自分で勘違いしておいて、後から足りなかったんだっていうなよw
0827デフォルトの名無しさん
垢版 |
2019/08/10(土) 13:04:34.25ID:C/8mgJdF
プロのグラマーなら半球睡眠はコモンスキル
0829デフォルトの名無しさん
垢版 |
2019/08/10(土) 13:37:08.94ID:lTTXvTcQ
>>818
うん。
だって>>685でbash 2.xの話をしてるということは
少なくともBashがそのバージョンであった時代くらいまでは考えるべきなんでしょ?
0830デフォルトの名無しさん
垢版 |
2019/08/10(土) 13:40:51.55ID:4go3Z6Df
OSXのデフォルトシェルがBash3だったはずと思ったら、最新のOSXだとZshになってるんだな
ま、LTSの古いOSとか、BSD系だとBash4じゃないのも結構あってまだ動いてると思う
0831デフォルトの名無しさん
垢版 |
2019/08/10(土) 14:00:29.15ID:8bQWJq+q
実務だとプログラミングって才能とかよりどれだけ知識を蓄えてるかの方が重要だよね?
このスレに居る猛者はどうやって強くなったんすか
0832デフォルトの名無しさん
垢版 |
2019/08/10(土) 14:31:51.55ID:/e4xqllv
才能のないのはまず脱落する。
体力のないのもすぐ脱落する。
あとは下積みあるのみ。
0834デフォルトの名無しさん
垢版 |
2019/08/10(土) 14:42:35.88ID:PeAU5cUa
シェルスクリプトって5行以内で使うルールで使ってるけど
引数をたくさん使いたいっていう有用なケースってある?
0837デフォルトの名無しさん
垢版 |
2019/08/10(土) 16:22:27.62ID:L+B8OP2P
>>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準拠で書かないと多くの環境で動かない。
0840デフォルトの名無しさん
垢版 |
2019/08/10(土) 17:01:40.37ID:tdOS9ehT
>>834
複数ファイルに対して同一の処理をする時。
例えば特定の文字コードに変換するとか。
0841デフォルトの名無しさん
垢版 |
2019/08/10(土) 17:04:52.26ID:4go3Z6Df
クロスプラットフォーム必要なケースで、シェルスクリプトで作り込んだりしないよ
PerlかPythonか、Windowsも対応するならGoとか使う
0842デフォルトの名無しさん
垢版 |
2019/08/10(土) 17:10:57.28ID:L+B8OP2P
>>838
逆じゃね? 何かをシェルスクリプトで作ったとして
多くの環境で使うなら、多くの環境で動かんとだめでしょw
0843デフォルトの名無しさん
垢版 |
2019/08/10(土) 17:14:02.55ID:L+B8OP2P
>>841
例えば組み込み機器でPerlやPythonも入ってない、入れられないときはどうする?
シェルスクリプトはかろうじて使える(最初から入ってるから)
Goはバイナリがでかいから、空き容量も制限されてる組み込み機器には入れたくない
今はIoT時代ですよ(笑)
0845デフォルトの名無しさん
垢版 |
2019/08/10(土) 17:35:44.47ID:L+B8OP2P
>>844
組み込みLinux用に作られたBusyBoxっていうのがあって、
一つのバイナリに様々な外部コマンド(catとかsedとかwcとか)が詰め込まれてる。
そのBusyboxにashも組み込まれてる。

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

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

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

TSVやCSVだけじゃなくJSONやXMLやYAMLも扱いたい
(簡易なことならsedなどで対応できるが)
0849デフォルトの名無しさん
垢版 |
2019/08/10(土) 17:56:06.44ID:C/8mgJdF
やっぱりどこでも動くシェルスクリプトなんて幻想なんだね…
0852デフォルトの名無しさん
垢版 |
2019/08/10(土) 18:30:59.43ID:SA5rOGgq
今現在でも世界中で書かれているシェルスクリプトの一体何%がPOSIX準拠なのか。
ま、実質幻想だね。
0855デフォルトの名無しさん
垢版 |
2019/08/10(土) 19:05:33.96ID:blTYOOvx
具体性ゼロだな。単なる可能性想像上だけの話だな
多くは限られた環境しか使わんし、それで動けばいい、何か他で使うようなときに問題があったら考えようで十分だろな
使ってる環境(OS)にデフォで入っている汎用スクリプトもそのOSでしか動きませんというのもそんなもんだし
0861デフォルトの名無しさん
垢版 |
2019/08/10(土) 19:34:35.69ID:6d2gRK68
少なくとも git-filter-branch.sh は perl がインストールされていない環境では
動作しない…それに、シェルスクリプトの表現能力が(他の言語に比べて相
対的に)低いために全体の占める割合が高くなってしまっているという可能性
も否定できない。別段それが悪いわけではないが。
0869デフォルトの名無しさん
垢版 |
2019/08/10(土) 20:03:00.81ID:N6maMe0S
まさかと思ったが具体性のために git を出したのか。誰がそんなことを聞いているねん
ここにいるどんだけの人がそういう多くの人が使うのを書いているねん。今までのでもほとんど「私用」だろに
0871デフォルトの名無しさん
垢版 |
2019/08/10(土) 20:04:38.53ID:L+B8OP2P
>>869
世界の話をするな。ここにいる人たちだけの話をしろ
俺たちの村の話だ。って言いたいわけ?
0872デフォルトの名無しさん
垢版 |
2019/08/10(土) 20:07:18.63ID:N6maMe0S
私用で限られた環境で動けばいいのならPOSIXにこだわる必要性はほぼゼロだな
そしてこのスレでの限られた人を除いては、あくまでも私用範囲といういたって普通の話だろう

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

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

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

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

話ずれまくりw いろんな環境で動くことが重要って話だろ
0885デフォルトの名無しさん
垢版 |
2019/08/10(土) 21:35:17.53ID:L+B8OP2P
>>882
それがどこにあるのかしらんが、iconvがPOSIXなのでどうでもいいかなw
nkfなんて所詮日本語にしか対応してないし
0886デフォルトの名無しさん
垢版 |
2019/08/10(土) 21:35:31.35ID:eyby+BxV
意味わからん逃げだな
そんなに多くの人が使ってるようなの書いていたら言えるだろうに。具体的に
0888デフォルトの名無しさん
垢版 |
2019/08/10(土) 21:41:52.82ID:eyby+BxV
なにを言っているのか意味わからん
いろんな環境で動くがほぼ絶対なんだろう?そのいろんな環境で動くなにを書いているんだよという素朴な疑問
多くはいろんな環境で動くのを想定してなんていなく、自分の使う環境でしかとしか思わないからな
0890デフォルトの名無しさん
垢版 |
2019/08/10(土) 21:52:52.92ID:L+B8OP2P
便利ツールは、俺が興味がある環境すべてで使う。
LinuxやBSDやmacOSや組み込み環境
Unixも興味あるがSorarisとMac以外は個人で使うのが難しいので残念
■ このスレッドは過去ログ倉庫に格納されています

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