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

■ このスレッドは過去ログ倉庫に格納されています
2020/08/21(金) 15:17:55.64ID:mArnj/tT
シェルスクリプトに関する総合スレッドです。

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

シェルスクリプト総合 その33
https://mevius.5ch.net/test/read.cgi/tech/1584893550/
2020/11/02(月) 19:51:53.50ID:pNDhR5km
POSIX準拠で書いていれば
シバンを変えるだけで動くんだよね
2020/11/02(月) 19:52:55.74ID:aDX4tDqS
いつもの話が通じないモードか
2020/11/02(月) 19:53:36.45ID:pNDhR5km
反論しろや
POSIX準拠で書いていれば
シバンを変えるだけで動くのは事実だろうが
2020/11/02(月) 19:57:02.06ID:aDX4tDqS
イミフだからだぞ
>シバンを変えるだけ
ってなんのこっちゃ
2020/11/02(月) 19:59:27.33ID:pNDhR5km
なんだこいつwww

770 名前:デフォルトの名無しさん[sage] 投稿日:2020/11/02(月) 19:51:03.74 ID:aDX4tDqS [4/6]
好き好きなんだから環境も好きにすんだよ、融通の利かない臨機応変出ないお前にはわからんだろうけど
問題があったら動かないし、シバンを変えるだけでもあるしな



774 名前:デフォルトの名無しさん[sage] 投稿日:2020/11/02(月) 19:57:02.06 ID:aDX4tDqS [6/6]
イミフだからだぞ
>シバンを変えるだけ
ってなんのこっちゃ
2020/11/02(月) 20:03:40.47ID:aDX4tDqS
bashが無ければインストールする、パスが違っていればシバンを適切に書き換えるだけ
後者なんて、それこそシェルスクリプト(というほどでもない)でのお仕事で簡単なこと
好きで使ってるならそんなの気にしないぐらいの

>>775
なに言ってるの?w なおさらナンノコッチャ
まだ「シバンを変えなくても」だったらわかるが、ますますわからんw
まさか「シバンで /bin/bash とか書いていてもPOSIX準拠してたらどう変えても動く」とか言いたいわけ?まさかなあwww
2020/11/02(月) 20:06:59.14ID:pNDhR5km
シバンを変えるだけといいながら、
bashをインストールしなければいけないと前言撤回w
誰もがbashをインストールできるわけではない
2020/11/02(月) 20:09:07.31ID:aDX4tDqS
いつものパターン
自分の何かがマズいと別の口実へとw
2020/11/02(月) 20:31:01.29ID:UfGVYnOo
シェルスクリプト使ってると精神が破壊されでもするのか
2020/11/02(月) 20:32:40.76ID:aDX4tDqS
ん?俺もお前も??w
2020/11/02(月) 21:59:15.95ID:Qlwbnxz+
echoの挙動すら統一できてないのに何がPOSIXだよ
2020/11/02(月) 22:39:16.63ID:ew0mgVfp
>>767
8割じゃねえか。w

個人的には、ほかに-o pipefailとかlocal -rとかも使うから、ほかのシェルは想定外。
いちいちほかを心配するのは無駄。2回目。
2020/11/02(月) 22:40:32.90ID:ew0mgVfp
>>779
POSIX原理主義者がやろ。
2020/11/03(火) 00:54:03.57ID:JyRXzZ9S
>>782
> -o pipefailとかlocal -rとかも使うから、
それを言ったのは1回目ですねw
2020/11/03(火) 01:06:01.23ID:eTFEu/to
>>784
そこは主文やないから。w
2020/11/03(火) 01:21:28.30ID:JyRXzZ9S
> 756 自分:デフォルトの名無しさん[sage] 投稿日:2020/11/02(月) 18:35:32.48 ID:pNDhR5km [7/17]
> なんでbash使うんですか?bashじゃないとダメなことでもやってるんですか?

注文ですね
2020/11/03(火) 05:06:25.45ID:ZHMzrFjb
>>755
ホントこいつは読めねえなw
2020/11/03(火) 05:07:52.60ID:ZHMzrFjb
>>787
× >>755
>>785
しつれ
2020/11/03(火) 10:58:07.03ID:mwHgWWA5
コマンドラインから実行したら自動的に色が有効になるのって
あれどういう仕組で実現してるんですか?
2020/11/03(火) 12:44:55.98ID:eTFEu/to
isatty()が真なら、エスケープシーケンスで色設定する。
2020/11/03(火) 18:29:40.60ID:j7Eu4w5F
C言語の類推で考えれば,POSIXに従うというのも分かる話だと思うんだがなぁ。
「原理主義」とかはちょっとやりすぎ(Webサービスとかはさすがに……)と思うけど,
例えばMicrosoft製のclとかでしか動かないプログラムは別に悪い訳ではないけど,
C99やC11に従ってGCCでもpccでも動くようなプログラムの方がいいよね,
というそれだけの話。
2020/11/03(火) 20:56:04.24ID:Vb+pPlne
エスケープシーケンスって仕組みダサいよな
パイプ通したときはどうとか面倒だし混乱するだけ
2020/11/03(火) 21:06:50.17ID:xZyzqOA2
そこで新たにエスケープの代わりにHTMLを流すことを提案しますとか
unicodeを拡張してすべての文字に色を付けられるようにします
とか言うの?
2020/11/03(火) 21:15:36.20ID:eTFEu/to
>>791
かなり異なるものに「類推」とか言ってもダメ。
それに、C/C++だって、環境やターゲットが違えば、#if/#endifはあたりまえに使う。
2020/11/03(火) 21:16:35.47ID:eTFEu/to
>>793
そこで、PowerShellのオブジェクトパイプだ!!!
2020/11/03(火) 21:19:50.78ID:xZyzqOA2
https://qastack.jp/superuser/1259900/how-to-colorize-the-powershell-prompt

カラーエスケープシーケンス
さて、Windowsの10 をサポートANSIエスケープコードのconhostでは、と24ビットカラーは 1703年以降でサポートされています。

ANSIエスケープコードのいずれかを使用するには、リテラルESC文字が必要です。
これは、033進、またはbashで小数点以下27である、あなたは使います"\033"か"\e"。
PowerShellには直接同等のシーケンスはありませんが、代わりに式を埋め込むことができます。"$([char]27)"
2020/11/03(火) 21:21:56.76ID:xZyzqOA2
C言語にとってのPOSIXは、ほとんどすべてのことができるのに対して
シェルスクリプトにとってのPOSIXは必要最小限のことしかできない

ここ、大きな違いな
2020/11/03(火) 21:33:57.64ID:j7Eu4w5F
>>796
そのクソ翻訳サイトを今すぐ
uBlacklistへ放り込め
2020/11/05(木) 08:37:54.68ID:aaXXoIST
最近使う機会のあったTinyCoreLinuxはashで >>2 のリストからしたらPOSIXみたいだけど
コマンドが無かったりして/proc依存しまくりで何の意味もなかったわありがとう!
2020/11/05(木) 14:20:57.02ID:NJa4xvXv
・TinyCoreLinuxに入っているashはPOSIXシェル
・TinyCoreLinuxにPOSIXコマンドがない・/procに依存している
この二つは何の関係もないんですが……

皮肉を言うのはいいけど,ちゃんと勉強してからにしような!
2020/11/05(木) 16:46:58.38ID:qZMsdltc
>>800
理想主義者にとっては関係がなくとも、現実に実装を行う開発者にとっては関係がある。
シェルだけがPOSIX準拠であっても意味がない。
2020/11/05(木) 17:55:36.75ID:5VWi+ROf
>>801
開発者にとってはシェルがPOSIX準拠であれば
安心して使えるんだが?

POSIX準拠してませんってシェルを使う気になるか?
開発者死んだらどうしようって思うだろ?
2020/11/05(木) 18:16:46.91ID:NJa4xvXv
>>801
それ本気で言ってる?
2020/11/05(木) 18:57:50.01ID:qZMsdltc
>>802
安心の根拠にできるのはPOSIXだけではない。
メジャーさとかアクティブさとかのほうが。
2020/11/05(木) 19:06:50.80ID:xxBKaUpW
全部だろ、アホ
2020/11/05(木) 19:48:26.44ID:qZMsdltc
POSIXはなくてもええわ、カス
2020/11/05(木) 19:56:20.59ID:xxBKaUpW
おまえんなかではそうなんだろうなw
2020/11/05(木) 20:52:05.33ID:qZMsdltc
んなもん、あたりまえやw
そして、数少ない原理主義者以外にとってもな!
2020/11/05(木) 22:54:42.95ID:5bWXoO+B
POSIXよりもうちょっと実用的な標準作られないの?
2020/11/06(金) 10:03:54.52ID:a8jj0K4f
ここの住人って本気で
POSIXを越える規格を作って
それを世界が受け入れてくれる!
って思ってそうよねw
2020/11/06(金) 10:15:50.10ID:UqYVvhfA
いや、POSIXを発展させようと思ってるだけだが。
POSIXに影響を与えれば、POSIX自体が成長する。
POSIXを超えるのではなく、POSIX自体がPOSIXを超える。
だからそれはPOSIXのままだと言える
2020/11/06(金) 10:45:16.28ID:vuRZSDYg
POSIXを越えられるのは、POSIXだけだ!
熱いな
2020/11/06(金) 10:47:09.27ID:UqYVvhfA
当たり前じゃん。アレだけおもちゃと馬鹿にされた
JavaScriptを超える言語はJavaScriptだけだった
2020/11/06(金) 11:50:47.48ID:pxoM2z0f
>>810
いや、そんな規格にはそれほど意味がない、と思うやろ。
目安程度にしかならんというか。
淘汰圧にはならんというか。

WebブラウザやC++コンパイラみたいに、非準拠なら非難轟々、とはなってないからな。
2020/11/06(金) 12:01:23.28ID:UqYVvhfA
非準拠なら単に使われないってだけだな

WebブラウザやC++コンパイラが非難轟々なのは
準拠してますって宣言した上で、非準拠なことするからだよ

最初から準拠していませんって言っていれば
同じように使われないってだけ
2020/11/06(金) 22:41:33.89ID:a8jj0K4f
これ >>815

原理主義者が鬱陶しいのは同意するけど
だからといってPOSIXを無視していれば
損するのは自分よ。

たとえ「世界中の人間に使ってほしい」とか
そういう意図がなくても,POSIXに準じてたほうが
維持管理・保守の面だけでもどれだけの労力を減らせるか。
2020/11/07(土) 00:32:05.33ID:FicFgdCX
検証不能だけどな。

まあ、ひょっこり出てきたものがかっさらう可能性もあるからなんとも。
2020/11/09(月) 13:44:59.81ID:b7PWfh7Z
昔々、TinyCoreLinuxの日本語訳をバイナリでしか公開しなかったライセンス違反のおじさんがいたな
2020/11/10(火) 07:28:20.01ID:2U042Zc8
POSIX に自信ある人おるっぽいから質問なんだけど!
date コマンドの POSIX 仕様書を見てみると、出力フォーマットに %F とか %z がないんだけど、これって使うとまずい?
%T は載ってるんだけどなぁ

strftime のほうには全部載ってるんだけど
2020/11/10(火) 12:00:26.68ID:9k3Gk+Qe
「POSIXに準拠する」なら,マズい。
「俺はPOSIXなんか知らねえ! 俺の手元ではdateコマンドに%zを使えるから
使うんだ!」っていう考え方なら,全然使っても構わない。

ちなみに私は前者。
2020/11/10(火) 12:04:37.65ID:9k3Gk+Qe
ちなみに%zみたいな数値型の時差なら,POSIXに準拠しつつ出力できる。

https://git.io/JkTnV
822デフォルトの名無しさん
垢版 |
2020/11/10(火) 12:11:36.00ID:08CevRpc
正直言うと z 使うと保守が面倒臭くなる
手離れ悪い
2020/11/10(火) 13:09:49.18ID:2U042Zc8
>>821
なるほど、と思ったけど %z を得るための労力がでかすぎるな...
POSIXLY_CORRECT 知らなかった!勉強になる
POSIXLY_CORRECT=200809 date '%z' したら +900 が取れちゃったけど... (´・ω・`)

>>822
ISO 8601 が便利でなぁ、これに合わせたいんだよね
2020/11/10(火) 13:24:27.74ID:wuzfZjuS
来年サマータイム導入します(キリっ
2020/11/10(火) 13:51:26.00ID:9k3Gk+Qe
>>823
POSIXLY_CORRECTはあくまで引数の処理規則とかにしか影響しない
…筈。

はっきりした典拠がある訳じゃないが。
2020/11/10(火) 14:08:32.86ID:2U042Zc8
>>825
なるほど... ありがとうございました!
2020/11/11(水) 06:40:35.05ID:AeLDZcCA
>>659
グルーランゲッジだな
パイプ間の1つ1つのプログラムは言語が別別でもよい
2020/11/11(水) 08:59:35.27ID:KkaNKXcC
>>827
膠っていう考え方ね。
2020/11/11(水) 16:14:40.51ID:o7ye760s
合成の誤膠って奴かな?
830デフォルトの名無しさん
垢版 |
2020/11/11(水) 17:25:57.68ID:2Y4tzM/7
シェルスクリプトで済むんなら使った方が良い。
2020/11/11(水) 17:29:00.12ID:uSbtgdeR
結局シェルスクリプトが一番適切だって思うから、みんなシェルスクリプトを使うわけで
そのあとシェルスクリプト使って後悔するなら、シェルスクリプト力(技術力)をつけたほうが良いってことだよ
他の言語に乗り換えるってのは、適切じゃない言語を使うってこと。単に慣れてるだけ。
832デフォルトの名無しさん
垢版 |
2020/11/11(水) 17:41:19.52ID:EWytaMfd
>>831
アホがおるw
2020/11/11(水) 18:13:47.22ID:KDi/CYCF
>>831
論理があべこべだな
認知に相当の歪みがあると推察されるので、その事実を自覚するのは難しいだろうけど...
2020/11/11(水) 18:15:50.79ID:uSbtgdeR
ほら、反論なしと(笑)
2020/11/11(水) 19:29:10.44ID:KFC8J5w+
真面目に反論する気にもならないアホな論てあるんやで
自覚ないとおわかりになられんでしょうけど
2020/11/11(水) 20:20:09.72ID:1NS/Ttdd
シェルスクリプトの欠点の一つとして
シェル変数を気軽に上書きできるという点がある
うっかりシステムに関係する変数を書き換えると
大騒ぎになるかも
2020/11/11(水) 20:37:56.82ID:auS5YaT3
システムに関係するシェル変数ってなに?
他の言語じゃその変数を書き換えることは無理なの?
2020/11/11(水) 20:46:46.52ID:KFC8J5w+
うっかり=意図せずにだろ
他の言語では環境変数を書き換えるという明確な意思がなければ変わらないだろう
2020/11/11(水) 21:13:01.49ID:auS5YaT3
え?システムに関係するシェル変数って環境変数のことだったの?
環境変数を書き換えても、他のプロセスには影響ないんだけど?
それでシステムに影響がある環境変数の名前はなに?
2020/11/11(水) 21:13:24.60ID:VcjQlt7C
>>836
readonlyというのがあるじゃん
2020/11/11(水) 21:14:32.87ID:KFC8J5w+
自分が読めないだけだろ
そしてそのしつこさは...w
2020/11/11(水) 21:17:25.54ID:KFC8J5w+
>>840
localというのもあるなw
2020/11/11(水) 21:20:32.92ID:auS5YaT3
シェル変数といったり環境変数といったり
めちゃくちゃだよなw
2020/11/11(水) 22:41:53.94ID:s9R9EURF
path=...
があるだけで、以降の処理はだいたい残念なことになってまう、みたいなシェルはあったような。

でも、しゃあない。
そういう事故は飲むしかない。
イヤでもあきらめろ。
2020/11/12(木) 00:04:37.86ID:BEseEgkn
シェルスクリプトが環境変数の書き換えに弱いというのはまだ分かるんだが,
それを「シェルスクリプト特有の」欠点みたいに呼ぶのはよく分からん。

・環境変数を「意図せず」書き換えてしまうこと
・環境変数を「悪意を持って」書き換えられること
こういう事態に弱いのは別にシェルスクリプトに限ったことじゃないでしょう。

具体例を出さなきゃ納得できない人もいそうなんで一つだけ挙げますね。
$LD_LIBRARY_PATH。
2020/11/12(木) 01:27:16.52ID:V4Sk/AjY
環境変数を意図せず書き換えてしまうとは、環境変数を触るつもりが全くないのにってことでしょ
シェルスクリプトに限らずって、他にそういうのなんかあったっけ
847デフォルトの名無しさん
垢版 |
2020/11/12(木) 04:20:19.45ID:kQyOkhX7
環境変数ってUnixやLinuxに限らず
Windowsにだってめちゃくちゃ使われてるぞ
2020/11/12(木) 04:34:19.99ID:1ZLHCloS
環境変数PATH、有名なので間違えて書き換えたりしない
LD_LIBRARY_PATH、名前がかぶることはまずない

なぁ、実害あるん?
2020/11/12(木) 05:19:49.92ID:DEOHcohA
シェルスクリプトは変数と環境変数のアクセスする違いがないってことだろうに
あくまでもローカル変数と使うつもりだったのにうっかりという
システムでの環境変数って言ってもそんな有名どころのではなくてもオレオレでというのはあるだろうに
視野が広いのか狭いのかなんなのか、ズレテルな
850デフォルトの名無しさん
垢版 |
2020/11/12(木) 08:59:00.57ID:NniWGdD3
プログラムのテストでシェルスクリプト使うだろ。
使わないのはテストしないからか
2020/11/12(木) 10:16:41.65ID:1ZLHCloS
>>849
変数には小文字を使いましょうってだけだなw
システムに関する環境変数なんてわずかしかないのに
その程度で苦労してんのか?
2020/11/12(木) 12:18:32.48ID:1kfP87l6
>>851
「苦労」の話を誰かしたか?
シェルは、あやしいところがあるよなあ、と言い合ってるだけなのに。
2020/11/12(木) 12:21:54.36ID:1kfP87l6
>>845
> ・環境変数を「意図せず」書き換えてしまうこと
シェル以外にある?
思い当たるのはmakefileくらいか。

だいたいは、環境変数はかなり特別扱いされてるよなあ。
2020/11/12(木) 13:43:18.74ID:OA6SFmf/
環境変数を「意図せず」書き換えてしまうことはあるが
その結果、問題が発生することはないって話だよ

だって環境変数を書き換えたとしても、最悪でも
自分とその子孫のプロセスにか影響がないから
システムを壊したりすることがない
2020/11/12(木) 13:48:31.03ID:1kfP87l6
>>854
> システムを壊したりすることがない
誰がそんな話を?
2020/11/12(木) 14:09:44.21ID:OA6SFmf/
>>836でかいてあるだろ

> うっかりシステムに関係する変数を書き換えると
> 大騒ぎになるかも

システムに関する変数を書き換えても、自分のプロセスとそれ以下にしか
影響がないから大騒ぎになんかならん

それにシステムに関する変数といっても数えられる程度しかない
857デフォルトの名無しさん
垢版 |
2020/11/12(木) 14:57:57.53ID:kygpD0ad
プログラムってシェルから起動するんじゃないの?
858デフォルトの名無しさん
垢版 |
2020/11/12(木) 15:13:27.21ID:f5BAQJxF
fork元がshellならそうだね
2020/11/12(木) 15:30:36.85ID:1kfP87l6
>>856
大物の起動スクリプトとかでやらかすと、騒ぎにはなりうる。
init系とか.*rcとかcronとかでも。
初見ではわけがわからんかったりするしな。

まあ、個人的には、そういうものだと思ってるが。
おかげでラクなところもあるし、しゃあない。
2020/11/12(木) 16:55:55.29ID:s02jb8N+
WindowsだとADと連携させたりして、レジストリのアクセス制御が容易とか、そういう話?
2020/11/12(木) 17:49:14.13ID:OA6SFmf/
>>859
> 大物の起動スクリプトとかでやらかすと、
だから何をやらかすんだよw

環境変数PATHを書き換えてしまったんだ
って「だけ」の話をしてるんか?

何をやらかしたのかを言わずに、
ずっとやらかししまうって言ってるだけじゃんか
2020/11/13(金) 02:11:25.86ID:Rmv9apnz
↑ こいつの知見の無さが半端ない。なのになぜか偉そう。頭悪そう
2020/11/13(金) 02:52:22.83ID:F3tZoo3K
わからないから質問してるのに
それにたいしてわからんのかと言われても
最初から、わからんと言ってるんだがとしか言えない

それで、何をやらかすんだ?
2020/11/13(金) 11:56:10.07ID:4qY0TlDt
具体的なケースはわりとどうでもいいから。
パスでもプロキシでも、環境変数はちょくちょく影響がある。

それが想像つかんのなら、もうからまんでええんちゃう?
2020/11/13(金) 12:58:09.35ID:es502k4w
複数のシェルスクリプトをカスケードで読む場合
変数の管理がめんどくさくなるかな
sourceしたりして他のシェルスクリプトと非同期で
動かすとさらに複雑になる
2020/11/13(金) 13:19:38.00ID:A88QmKc9
>>864
逃げるなよw
具体的なケースが重要

PATH変数とHTTP_PROXY変数だっていいたのだろうが "それだけ" だろう?
しかもシステム設定を変えるわけじゃない。
何度も言うが自分と子プロセスにしか影響がない。
意図せず変更してしまう可能性がどれだけあるのかと
あと環境変数じゃないなら小文字使えや
2020/11/13(金) 13:23:59.15ID:A88QmKc9
>>865
また知ってる単語を使ってみましたみたいな文章だなw
カスケードで読むってなんだよ。誰がそんな用語使ってるんだ?

シェルスクリプトが別なら変数は共有されない
非同期で動かすというなら、それぞれ別のサブシェルになるから
これも変数は共有されない

sourceしたりというなら、グローバル変数のことだろうが
それなら、シェルスクリプトはグローバル変数しかないから
大規模に向かないって言えばいいだけのことだろ?

グローバル変数しかなくてもプリフィックス(を名前空間として考える)を
変数名につければいいだけだがな。それはPOSIXにこだわらないなら
localとかtypesetでローカル変数作れるし
2020/11/13(金) 14:48:01.16ID:4qY0TlDt
>>866
影響のでかたについては説明済み。
http_proxy系環境変数は一般的に小文字。

逃げてるというならそれでいい。
めんどくさいアホの相手はもうおしまい。
2020/11/13(金) 15:20:10.18ID:S1mNTw0c
結局,「自分が思う(無根拠な)あやうさ」
を放言した結果,鉞が四方八方から飛んできて収集付かなくなった感じかね。

元の発言
> シェルスクリプトの欠点の一つとして
> シェル変数を気軽に上書きできるという点がある
> うっかりシステムに関係する変数を書き換えると
> 大騒ぎになるかも
からしてまあシェルスクリプト分かってんのかってツッコみたくなる点が幾つもあるし。
もう散々上で叩いたからこれ以上は責めるのを止すが。
2020/11/13(金) 18:14:52.09ID:4qY0TlDt
それは双方同等。
「自分が思う(無根拠な)大丈夫さ」だから。

ま、一回事故らんと身に染みないことではある。
2020/11/13(金) 18:21:34.11ID:A88QmKc9
>>868
だから影響の出方は
"僅かな"有名な環境変数を書き換えると
自分と子プロセス"だけ"に影響があるって話でしょ?
ずーっとそういってる

大した影響がないと
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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