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

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

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

シェルスクリプト総合 その33
https://mevius.5ch.net/test/read.cgi/tech/1584893550/
2020/11/02(月) 13:11:03.65ID:FhHZncje
POSIX準拠してるかを調べたいならdashを使ったほうが何倍もマシ
2020/11/02(月) 13:26:39.74ID:n2BNqgKx
>>738
dashね。thx
2020/11/02(月) 13:28:36.85ID:ew0mgVfp
>>736
ないない。
最後の式の評価結果を返しとくのがだいたい自然で合理的なだけ。
2020/11/02(月) 13:28:58.41ID:lTcfprDV
dash dash dash
2020/11/02(月) 16:38:46.09ID:FhHZncje
シェルスクリプトも最後のコマンドの評価結果をそのまま返す
2020/11/02(月) 16:39:37.65ID:FhHZncje
>>739
dashはDebian・Ubuntu系の/bin/shだよ
クラウドで一番よく使われてるディストリ
2020/11/02(月) 16:42:40.40ID:UfGVYnOo
いまどきのシェルスクリプトはほとんど/bin/bashでしょ
2020/11/02(月) 16:56:54.34ID:pNDhR5km
シバンに使われるのは/bin/shだろ?
そしてそれがDebian・Ubuntuだとdashになる
なぜ今どきはbashだと思ったのか?
2020/11/02(月) 17:08:07.37ID:UfGVYnOo
初めはそうだったんだけどな
ディストリによっては/bin/shが/bin/bashなのでそれと気づかずbash拡張を使う奴が出てきて、debianやbsd等の/bin/shが/bin/bashじゃない環境じゃ動かなくなってきて
「bash拡張使ったスクリプトはshebangもちゃんと/bin/bashにしよう」ってなってきた
2020/11/02(月) 17:14:14.89ID:pNDhR5km
その結果bashが入ってないAlpine Linuxで動かないという問題が発生するわけで
さっさとPOSIX準拠に変更したほうがいい。bash依存は甘え。

っていうか俺勉強したくないんだーと言って必要もないのに/bin/bashにして
動かなくて後悔してるやつが増えてきてる。自業自得だが。
2020/11/02(月) 17:15:01.41ID:pNDhR5km
シェルスクリプトはPOSIX準拠にしておけ
bash特有の機能を使いたくなったら別の言語を使うべきだ
2020/11/02(月) 17:17:28.98ID:ZpVsHyOp
macのデフォルトシェルはzsh
2020/11/02(月) 17:21:10.82ID:pNDhR5km
macの/bin/shはbash
2020/11/02(月) 17:23:00.46ID:ZpVsHyOp
macの/bin/shはzsh
2020/11/02(月) 17:23:45.79ID:pNDhR5km
>>751
すぐバレる嘘を付くな
2020/11/02(月) 17:24:32.82ID:pNDhR5km
そもそも>>2に書いてある

・デフォルトシェルのシバンはBourneシェル時代からの伝統で#!/bin/shを使用します。ただしその実体はOSによって様々です
  Debian系 … dash   CentOS系 … bash   Alpine … ash(busybox)  Android … mksh
  FreeBSD … ash   Solaris,OpenBSD … ksh
  macOS … bash(Single UNIX Specification準拠のために一部動作が異なる)
・ログインシェルは/bin/shでない場合があります。例 macOS … zsh
754デフォルトの名無しさん
垢版 |
2020/11/02(月) 17:30:22.78ID:Xv3pPvZM
tcsh : 思い出してください
2020/11/02(月) 17:49:15.11ID:ew0mgVfp
>>748
大きなお世話だな。w
BashがいいところはBashがいい。

どのUnixでも動かないといけないようなスクリプトは、シェル以外にも心配事は多いし、いちいち気にせずとも。
2020/11/02(月) 18:35:32.48ID:pNDhR5km
なんでbash使うんですか?bashじゃないとダメなことでもやってるんですか?
2020/11/02(月) 18:52:50.96ID:j60yzXh/
自分のためのスクリプトなので書きやすいように書くだけ
2020/11/02(月) 18:54:08.71ID:pNDhR5km
だからbashのどういうところが書きやすいの?
759デフォルトの名無しさん
垢版 |
2020/11/02(月) 18:56:50.41ID:wsJGkNeE
>>741
wish and dash
2020/11/02(月) 19:19:37.82ID:6dMpVrf4
< <( )
2020/11/02(月) 19:30:22.69ID:pNDhR5km
cmd |
2020/11/02(月) 19:35:41.93ID:aDX4tDqS
代替になり得てないだろう
いつものPOSIXなやつか
2020/11/02(月) 19:40:13.91ID:pNDhR5km
それがなりえてるんだなぁ
2020/11/02(月) 19:42:01.99ID:aDX4tDqS
お前にとってはな
全てお前にとってはだろうw
2020/11/02(月) 19:43:07.75ID:ew0mgVfp
>>756
Bashがふつうに使えるし、適度に高機能だから。
わざわざあえて別のシェルで動作確認するのは面倒であり無駄。
2020/11/02(月) 19:44:07.24ID:pNDhR5km
>>765
なんて言ってると、シェルがdashで
動かないーとか言ってるやつが多すぎるんだがw
bashを使うにしろ、必要最小限にしてればいいだろ
POSIX準拠の命令も、bashの命令なんだから
2020/11/02(月) 19:45:33.32ID:pNDhR5km
だいたいbashスクリプトじゃなきゃダメなんだみたいに
言ってるやつのスクリプトはfunctionをなくして
[[ ]] を [ ] に置き換えるだけで8割はそのままPOSIX準拠にできるんだがw
2020/11/02(月) 19:47:44.55ID:aDX4tDqS
>>765
そもそも前提が違う
シバンに /bin/sh と書いてるならPOSIXで書くべきってだけだな
特定のシェルが好みでその機能を使って、シバンもそれにしてるなら好き好きにでしかないわな

なぜか、
>シバンに使われるのは/bin/shだろ?
とだけになり、シェルの派生は使うなそれなら他の言語をとか言い出すいつもの。自分がPOSIXに拘ってるのだけだろうがただうざいだけw
2020/11/02(月) 19:48:29.55ID:pNDhR5km
/bin/shはどこでも入ってるが、
/bin/bashはAlpine Linuxなど入ってない環境がある
2020/11/02(月) 19:51:03.74ID:aDX4tDqS
好き好きなんだから環境も好きにすんだよ、融通の利かない臨機応変出ないお前にはわからんだろうけど
問題があったら動かないし、シバンを変えるだけでもあるしな
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+
うっかり=意図せずにだろ
他の言語では環境変数を書き換えるという明確な意思がなければ変わらないだろう
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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