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

■ このスレッドは過去ログ倉庫に格納されています
2020/11/24(火) 21:37:20.06ID:mbTiTj6s
シェルスクリプトに関する総合スレッドです。

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

前スレ: シェルスクリプト総合 その34
https://mevius.5ch.net/test/read.cgi/tech/1597990675/
2020/12/04(金) 18:46:53.85ID:9vuroJRJ
>>160
$ TZ=GMT-9 date;TZ=GMT-8:59 date
Fri Dec 4 18:39:52 GMT 2020
Fri Dec 4 18:38:52 GMT 2020
使えそうではあるね。Linux/BSD共に

だがしかし、Linuxでは最大は24時間(24時間59分?)のよう。実際の時差(日本では9時間が入るからそれがプラマイ。使えねぇ。まあLinuxならdateはGNU dateに決まってる(?)だろうから無理してPOSIXに拘ることもないか
ちなみに、BSDは168(何やこの中途半端なと思ったら7日1週間だった)
2020/12/04(金) 18:47:46.31ID:NVkYzPbW
でもまあどちらにしろdateを2回呼んでるからタイミング次第ではバグになるよね
2020/12/04(金) 18:49:06.33ID:NVkYzPbW
> まあLinuxならdateはGNU dateに決まってる(?)だろうから

Alpine LinuxだとBusyBox
2020/12/04(金) 18:50:44.54ID:9vuroJRJ
>>165
>POSIXのそこらのC関数も当てはまる話だってのに、〜
>概念の例としてわかりやすい形になってるのが、〜
って言ってるのに。読めなさすぎだろう。方々で似たような実装なのは、特定言語特有の話ではなくコンピュータサイエンスwとしてのだからだろうにな
シェルスクリプトしか知りません興味ありませんすぎだろう
2020/12/04(金) 18:55:02.87ID:9vuroJRJ
>>168
そんなのあるのね。ちょいググったところではGNUの機能削除版?
でも、-d があるらしいから絶対的に(?)必要な機能はあるんじゃないのかな?
2020/12/04(金) 20:20:16.74ID:9vuroJRJ
>>170,169
機能削除してるくせにオレオレもなのか...?? GNUソースベースというより新規なのかな?

BusyBox環境を試す気は全くないので何とくなくこんなんなんだろうという仮定で、
SEC2DATE="$(date --help 2>&1 | awk '
/-f fmt/{ print "date -j -f %s "; m=1; exit 0; } # BSD
/-D FMT/{ print "date -D %s -d "; m=1; exit 0; } # BusyBox case1
/-D FMT/{ print "date -d 1970.01.01-00:00:"; m=1; exit 0; } # BusyBox case2
END{ if(!m) print "date -d @"; }')" # default to GNU
な感じで吸収してみた(判断材料とかはお好きに。OSの種類で決め打ちとかな)

case1 なら BSDに合わせろw いや、どれもどこかに合わせろw
いや、その役割はPOSIXか。必要最低限のこれらだけを入れてくれればCalendar(しつこいw)として「使える」のに(システムタイムにこだわるならBSDのが素直かなw)

secs=$(date +%s)
[ $($SEC2DATE$secs +%H) -ge 10 ] && secs=$((secs + 86400))
$SEC2DATE$secs +'%Y-%m-%d 10:00:00'
実際はこれだけをしたいだけなのにな。どれかに統一されてたらもっと素直な表記で書けるのに

date回数に煩いんだったら
read secs hh < <(date +'%s %H')
[ $hh -ge 10 ] && secs=$((secs + 86400))
$SEC2DATE$secs +'%Y-%m-%d 10:00:00'
とかにでもとかとか。ある意味もっと素直かなw
2020/12/04(金) 20:48:41.94ID:C8tBrA1L
> case1 なら BSDに合わせろw いや、どれもどこかに合わせろw

まあ、それだな。
macOSもあるのでLinuxだけに準拠すればいいという時代じゃない
あとawkとかやめてくれまじで
2020/12/04(金) 20:51:59.59ID:9vuroJRJ
>>172
> awkとかやめてくれまじで
別に同じようなことできる他のを使えばいいだろう。そっちが素直に書けると思うなら、そういうように読み替えて
失礼ながら、マジでは以後も無視します。別に拘ってるわけでもないしね(使うことに/使わないことにどっちも)
2020/12/04(金) 20:53:34.79ID:C8tBrA1L
> 別に同じようなことできる他の
ってなに?まさかPerlとは言わないよね?w
2020/12/04(金) 20:56:17.67ID:9vuroJRJ
>>174
は??w
使うなと言ってるあなたのお好きなのにだよ。なんで俺に聞くw
2020/12/04(金) 21:51:54.12ID:rhOsBffZ
(意訳) クッソー、マウント取れねぇじゃねぇか
2020/12/04(金) 22:06:43.73ID:ECFKf8K5
>>158
dateを二回呼ばない理由って,
もしかして動作速度のせいって思ってる?
2020/12/04(金) 22:08:20.50ID:ECFKf8K5
>>171
同じクソ長いコードなら,
POSIX準拠のクソ長いコードの方がいくらかマシだなw
179デフォルトの名無しさん
垢版 |
2020/12/04(金) 22:08:45.95ID:DO1guVvJ
へえ
2020/12/04(金) 22:11:28.39ID:UZX5oUlx
>>177
両方だろ。タイミング次第ではバグる。遅い。

> POSIX準拠のクソ長いコードの方がいくらかマシだなw
POSIX準拠のクソ長いコードってこのスレででてたっけ?
2020/12/04(金) 22:16:33.20ID:A/IGOY0L
そう取るのも病気だな
2020/12/04(金) 22:20:28.57ID:UZX5oUlx
反論は無しと、φ(..)メモメモ
2020/12/04(金) 22:24:14.25ID:aYzT9jgU
>>182
あいつを模写ってるのだろうが、馬鹿みたいだからやめなさいw
あいつと同じ馬鹿みたいな無理筋なマウント取りたいだけに見えるからw
2020/12/04(金) 22:26:47.45ID:UZX5oUlx
ほらやっぱり反論は無しと、φ(..)メモメモ
2020/12/04(金) 22:29:34.69ID:aYzT9jgU
>>184
お前はあいつなのか?
俺は>>180のレスに反してはないぞ、よくわからん追いきれてない部分があるけどな
だからやめなさいと言ってるだろw
2020/12/04(金) 22:36:07.76ID:UZX5oUlx
反対しないならレスしないでよ
POSIX準拠のクソ長いコードがでるのをまってるの
2020/12/04(金) 22:40:10.63ID:aYzT9jgU
えーっw
そういうこというとなおさらあいつみたいな自己中自分だけの世界で生きてるやつに...w
まあ、なんらかの恥ずかしさからそう言っちゃったと受け取っておくよw

大人しく俺も待つよww
2020/12/04(金) 23:47:12.43ID:IqAXsol3
自分もPOSIX準拠の長いコード、とやらを見てみたい
2020/12/05(土) 00:07:35.66ID:Q5wPn3Se
「POSIX準拠のクソ長いコード」って
>>158
この人が言ってた「コードもクソ長いし」を念頭に置いてるんじゃ
2020/12/05(土) 00:10:29.29ID:Q5wPn3Se
自分はポジックス信者ではないけど,
「BSDの場合はこうする,GNUの場合はこうする」っていうふうに
ダラダラ場合分けして長くなったコードより,
「POSIXに準拠する」ことを目的として長大になったコードの方が
どちらかというと良いと思うな。

GNU環境用とBSD環境用にコードを分けるのが一番賢いやりかただと思っているが。
2020/12/05(土) 01:06:34.20ID:8Ma0zJVZ
ダラダラ場合分けして長くなったコードってどこにあるの?
一つの変数に場合によって一つの値を設定してるのが一箇所あるだけのコードのこと?
2020/12/05(土) 01:24:03.81ID:Tpji0Itw
> 「POSIXに準拠する」ことを目的として長大になったコードの方

これもどれのことかわからん
2020/12/05(土) 01:36:28.83ID:Tpji0Itw
まさかPOSIX準拠のクソ長いコードって>>156のコードのことなのか?
あれはシェルスクリプトの部分はごく僅かでほぼ9割がawkスクリプト
しかもオプション解析とか無駄なことをやってるからクソ長くなってるだけ
いやアルゴリズムもなんかムダに長い気がするな
あれみていってるなら、POSIX準拠とはクソ長いは全く関係ない
2020/12/05(土) 08:05:02.70ID:L0bYd0ih
>>193
それは違う。(別に>>156を積極的に養護するつもりもないがw)
POSIXののdateには秒->日付、日付->秒、どちらの機能もないから自作するしかない。
awkを呼ぶにしてもPOSIXのだと時刻系関数がないから自作。
POSIXerはつらいということw
2020/12/05(土) 08:32:55.94ID:Tpji0Itw
POSIXerじゃなくてもLinuxとBSD(macOS)などに
対応しようと思ったら辛いけどな
2020/12/05(土) 11:58:33.40ID:En2ZUb0e
dateコマンド使うにしてもcoreutilsダウンロードして使うだけだから何も辛くない

自分はPOSIX云々より便利に使えるほうがいいから
cronパーサーみたいの使って`next_time ‘0 0 10 * * Fri’`みたいなコマンド作る
2020/12/05(土) 12:30:36.45ID:Q5wPn3Se
まあ「辛くない」って言える内は幸せよ……
経験を積んでくると,POSIXに準拠しようがしていまいが,
複数のシステムで期待どおりの動作をさせることが
どれだけ大変かが身に沁みて分かってくるから。
2020/12/05(土) 12:43:57.73ID:Q5wPn3Se
>>193
まさかもなにもそうじゃない?
知らないのかもしれないけど,POSIXって単にシェルの
挙動だけを決めてるんじゃなくて,
AWKとかC言語とか他のプログラミング言語の仕様も決めてるのよ。

ちなみにAWKのPOSIX仕様は↓ここで読める。
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html

だから>>156のコードは「POSIX準拠のクソ長いコード」と言ってしまって良い。
2020/12/05(土) 13:34:14.56ID:++4jxPOM
いやこのスレ、シェルスクリプトのスレだから

C言語で書いてもPOSIX準拠だね
だけどこのスレでC言語で答えるのは間違いでしょ
2020/12/05(土) 13:36:57.86ID:En2ZUb0e
>>197
>複数のシステムで期待どおりの動作をさせることが
>どれだけ大変かが身に沁みて分かってくるから。

がんばってw
2020/12/05(土) 17:21:06.89ID:WoNSxYte
>>199
>だけどこのスレでC言語で答えるのは間違いでしょ

ということはcoreutilsを別途入れるのは反則? w
2020/12/05(土) 20:10:29.89ID:++4jxPOM
>>201
お前はコマンドを「作る」と「使う」の違いもわからんのか?
2020/12/06(日) 00:28:21.63ID:rU5Tjp1X
なんかグダグダやってるけどシェルスクリプトで
UNIXタイムの変換ってぐぐったら普通にでてくるやん
2020/12/06(日) 00:35:27.33ID:I5tPmPco
POSIX準拠じゃないからダメです
2020/12/06(日) 00:40:12.93ID:rU5Tjp1X
いやPOSIX準拠であるって
2020/12/06(日) 00:44:22.83ID:I5tPmPco
口先だけなら何とでも言えます
2020/12/06(日) 00:46:36.00ID:rU5Tjp1X
ググってみた?
何の単語でググったか書いてみてくれる?
2020/12/06(日) 01:09:11.46ID:I5tPmPco
ほらな、自分で出せないもんを人に調べさせようとする
新興宗教といっしょ
そんなもんはない
2020/12/06(日) 01:11:49.17ID:rU5Tjp1X
検索して見つけたページを出せなんて言ってないよ
ただあんたが検索した「単語」だけを書けばいい
見つからなくても実際に検索してなくてもOKだよ
2020/12/06(日) 01:14:01.83ID:rU5Tjp1X
ちなみになんでこんな事を聞いてるかというと
検索して見つけられないなんてことが
有るんだろうか?って疑問になったから
2020/12/06(日) 01:55:10.54ID:I5tPmPco
お前も見つけられてないじゃん
何が普通に出てくるだ嘘吐き
2020/12/06(日) 02:04:12.25ID:rU5Tjp1X
ちなみに俺が検索した単語は「シェルスクリプト UNIXタイム」
もう一度聞くけど、お前は何の単語で調べた?
2020/12/06(日) 02:08:46.21ID:NqcvkCcY
>>202
草生やしたコメントにマジレスするなら、あえて「わからん」と言うね。

極論すればシェルスクリプトのお題は常にC言語で解くことが可能で、
そのコードをコンパイルしたコマンドを使うことは可能。coreutilsもその一種だろ。

だったら明確な指針でも書いてくださいw
2020/12/06(日) 02:17:28.74ID:NqcvkCcY
>>203
ただの後出しジャンケン乙w
例えばUNIXタイム以外でどうにかするとかいうなら今からコメントする価値はあるが。
2020/12/06(日) 02:23:24.16ID:rU5Tjp1X
チューリング完全かどうかでいいんじゃないの?
チューリング完全なもので実装=他言語で実装
ここはシェルスクリプトのスレなので対象外
2020/12/06(日) 02:26:06.11ID:rU5Tjp1X
>>214
後出しジャンケンはそのとおりだけど
ジャンケンで俺が勝ったということでいいの?w
2020/12/06(日) 10:58:49.79ID:+d6RCg1G
>>211
お〜い,なんの単語で調べたか答えてくれよ〜
2020/12/06(日) 11:04:27.70ID:+d6RCg1G
>>215
なるほど。
そうするとPOSIX sedは計算完備ではないので
このスレで詳しく議論できるな。
よかったよかった
2020/12/06(日) 11:24:08.76ID:43odFZj2
>>281
sedもチューリング完全らしいよ
https://catonmat.net/proof-that-sed-is-turing-complete
2020/12/06(日) 12:42:10.98ID:+d6RCg1G
>>219
それPOSIX sedで動きますか? 試してみましたか?
2020/12/06(日) 12:46:27.12ID:+d6RCg1G
ちなみに*GNU* sedの--posixオプション付けて動かして
「動いているように見える」からPOSIX sedに準拠してる!っていうのは
当然だめだからね。分かってると思うけど。
2020/12/06(日) 12:53:07.47ID:43odFZj2
>>220
自分で試せよ
GNU sedでも--posixつければGNU拡張は全部無効になるんだから
2020/12/06(日) 12:53:27.33ID:43odFZj2
> 当然だめだからね。
なぜ?
2020/12/06(日) 12:54:15.15ID:43odFZj2
つーか試してみて動いちゃったから
焦って後出しで--posixの話加えただろw
2020/12/06(日) 12:57:09.16ID:43odFZj2
倉庫番のやつ、99ステージあるけどどうやってるんだろうと思ったら
普通にソースコードに初期配置が文字列で書かれてるんだなw
2020/12/06(日) 12:58:22.00ID:43odFZj2
あ、99ステージ分って意味ね
2020/12/06(日) 17:06:58.34ID:+d6RCg1G
見苦しいのう…
2020/12/06(日) 18:06:23.94ID:1bhylYC8
ポジバカはスルーで!
2020/12/06(日) 19:32:19.33ID:43odFZj2
>>227
POSIX sedで試しましたか?
2020/12/06(日) 22:45:34.65ID:+d6RCg1G
>>229
鸚鵡返ししかできないのですか?
(どうも図星らしい)
2020/12/06(日) 23:00:58.44ID:43odFZj2
だから試せばPOSIX sedで動くのがわかるだろ
2020/12/07(月) 01:05:35.09ID:m+PLJN/4
ポジに執着して何かいいことありますか?
2020/12/07(月) 01:10:20.04ID:owPfoMMb
ネガより色再現性が高いんです
2020/12/07(月) 01:35:18.15ID:KzEPqVfm
>>232
POSIX準拠にすればどこでも動く
むしろPOSIX準拠にしないなら
別の言語でいいだろ
2020/12/07(月) 01:43:28.16ID:ZAwFxdvq
出たよw
2020/12/07(月) 02:12:05.18ID:zwD8QGuc
しかし、ポジ準拠を謳いつつ、バグでもあったらどうすんだ?
処理系の問題だと言い張って、相手にしないつもりなの?

どこでも動くとか無責任なことは言うまい。
必要なのは動作確認。
2020/12/07(月) 08:49:22.82ID:KzEPqVfm
> しかし、ポジ準拠を謳いつつ、バグでもあったらどうすんだ?
動作確認すればいいだけ
2020/12/07(月) 14:06:32.50ID:/1DmOEYs
>>236
POSIX sedで動作確認しましたか?
2020/12/07(月) 14:32:40.29ID:zwD8QGuc
>>238
なんでオレが?w
必要なヤツがやれ!
2020/12/07(月) 17:48:32.54ID:l3Pgl7mQ
>>216
あー言い方がよくなかった。
すでに解決した問題のごく一部を後からかいつまんで、何か自分が有益な情報を
与えたかのようなふりをすること、だ。こういうのを何と言ったっけな。
コバンザメとか、そういうのにも近い。
2020/12/07(月) 19:02:40.12ID:hZsbXMrW
> すでに解決した問題

いいえ、POSIX準拠のシェルスクリプトでの
UNIXタイムの変換の話は出ていませんでした。
2020/12/07(月) 19:05:58.05ID:hZsbXMrW
有益な情報を与えたというか、単にググりましょうと言っただけですね。
下手の考え休むに似たり。ググればすぐ見つかるのに無駄な時間を過ごしてるなと言う話です。
2020/12/07(月) 23:44:28.22ID:/1DmOEYs
>>241
出てます。>>143
2020/12/08(火) 00:37:56.66ID:/pT3aml4
>>243
まとめるとね

POSIXのdateには+%sがないし、今日の日付は取得できるけど任意の日付は取得できない
+%jを使った計算は出てるけど月日形式じゃなくて、その年の初めからの日数(例 12月08日の場合は343日)からの
変換だから、一般的な年月日形式からの変換はできない。またUNIXタイムから年月日への変換は全くでてない。

という話の流れぐらいわかってください
2020/12/08(火) 13:13:44.13ID:eUC1uxpz
こいつらいっつも喧嘩してるな(´・ω・`)
2020/12/08(火) 17:56:01.38ID:TAcWm+rA
>>244
> またUNIXタイムから年月日への変換は全くでてない。
残念、 それも出てます。
>>156
2020/12/08(火) 19:11:00.60ID:NLDQQmQ4
脊髄反射を競うスレだからね
2020/12/08(火) 19:20:40.05ID:ZFT993pL
>>246
それはawkスクリプトかつクソコードということで決着はついたはずだが?

193デフォルトの名無しさん2020/12/05(土) 01:36:28.83ID:Tpji0Itw
まさかPOSIX準拠のクソ長いコードって>>156のコードのことなのか?
あれはシェルスクリプトの部分はごく僅かでほぼ9割がawkスクリプト
しかもオプション解析とか無駄なことをやってるからクソ長くなってるだけ
いやアルゴリズムもなんかムダに長い気がするな
あれみていってるなら、POSIX準拠とはクソ長いは全く関係ない

215デフォルトの名無しさん2020/12/06(日) 02:23:24.16ID:rU5Tjp1X>>218
チューリング完全かどうかでいいんじゃないの?
チューリング完全なもので実装=他言語で実装
ここはシェルスクリプトのスレなので対象外
2020/12/08(火) 19:34:42.29ID:TAcWm+rA
なるほど,ではAWKやsedを使わずに,
「POSIX準拠のシェルスクリプトでのUNIXタイムの変換」
を示してください。
2020/12/08(火) 19:43:49.41ID:ZFT993pL
「POSIX準拠のシェルスクリプトでのUNIXタイムの変換」
を検索してください。
2020/12/08(火) 19:45:03.55ID:ZFT993pL
検索キーワードを自分で書くとか
わかっててわざとやってるんだろうか?w
2020/12/08(火) 20:44:10.87ID:hItfS6FC
ポジがどうのはよくわからんがsuperじゃないedもダメなの?今man引いたらだとgnu-ed(ed)が出てきてポジ云々書いてない
シェルスクリプト用途のgrep/sedの7割くらいは違和感なく置き換えられると思うが
2020/12/08(火) 21:53:32.63ID:ZFT993pL
>>252
POSIX準拠だと移植性が上がるのでベター
コマンド呼び出しは遅いのでシェルスクリプトで実装したほうが圧倒的に速い
この2つの話が混ざってる
2020/12/08(火) 22:20:03.23ID:TAcWm+rA
>>250
検索したところ
>>156
で言及されているコードが見付かりました。
2020/12/08(火) 22:28:27.56ID:TAcWm+rA
ていうか「AWKやsedを使っていないPOSIX準拠のシェルスクリプトでのUNIXタイムの変換」
は普通に気になるわ。
はたしてそれがシェルショッカー作のPOSIX AWK製 通常時間・UNIX時間相互変換スクリプト
より早いのかどうかも含めてね。

あ,なんかこういう書き方をすると発狂する奴が出てきそうなんで念の為言っておくが,
別に俺はPOSIX最高!なんていう主義じゃないよ。
ただ単に,「POSIXに従った通常時間・UNIX時間相互変換シェルスクリプト」として
>>156 を挙げたら,
「それはAWKで書かれてるからシェルスクリプトじゃない(←まあ理解はできる),
俺は >>203 から始まる一連のスレで言及されている

203デフォルトの名無しさん2020/12/06(日) 00:28:21.63ID:rU5Tjp1X>>214
なんかグダグダやってるけどシェルスクリプトで
UNIXタイムの変換ってぐぐったら普通にでてくるやん

204デフォルトの名無しさん2020/12/06(日) 00:35:27.33ID:I5tPmPco
POSIX準拠じゃないからダメです

205デフォルトの名無しさん2020/12/06(日) 00:40:12.93ID:rU5Tjp1X
いやPOSIX準拠であるって

「ググッたら普通に出てきて」「AWKやsedで実装されてなくて」「POSIXに準拠した」
「UNIX時間を変換するシェルスクリプト」が知りたいのよ。
>>248 でも言及があるな。

それともこれは嘘?
2020/12/08(火) 22:30:51.38ID:TAcWm+rA
まあこんだけグダグダやってもそのコードが挙げられない,ってことは,
多分最初に言及してたのは >>156 のコードで,
それを脊髄反射で否定してしまったから出そうにも出せなくなってしまってる,ってとこだろう。

↑これに反論したけりゃ実物のコードを出せ。そしたらそれで済む話だ。
俺は気にしないが,君が体裁を気にするような人物なら,コードを出してくれたら
「すいませんでした」と言ってもいいぞ。
2020/12/08(火) 22:47:32.95ID:3Lge4PBr
date コマンド1回で、POSIXで、awkやsedなしで、早い処理で ....

意味不明になってきてるけども。
まあそうやって遊びたい人は自分でやれば。ってそういう奴に限って自分ではできない
2020/12/08(火) 23:12:57.26ID:TAcWm+rA
>>257
いやいやそれを俺に言うのは違うでしょ。
俺は >>156 でいいじゃん,と言っている。

ところが >>203 やら >>250 で,
「AWKやsedを使わない」
「POSIX準拠の」
という条件が出てきている訳だ。
それは純粋に知りたいでしょ。
俺の知っているPOSIXに準拠しつつ
UNIX時間変換を行えるのはAWKでのやりかた。
2020/12/09(水) 00:29:09.55ID:vZ4bQifg
あれ,全然出てこないな。
くっだらねえ反論はあれだけ反射的なのにw
2020/12/09(水) 00:32:59.35ID:jODQKuwy
口先POSIXおじさんw
2020/12/09(水) 00:45:24.40ID:XzWvmoKM
単純な時間計算の質問をネタにマウンティング合戦を1週間も続けられるってすごいよね

シェルスクリプトにこだわる人はさすが生産的!!
2020/12/09(水) 00:58:47.06ID:eCHhpLek
>>258
ググったらすぐ出てきたよ?
キーワードはこのスレに書いてある
2020/12/09(水) 01:21:27.68ID:S42PKcAA
志村けんは生きてるよ?
ググったら詳細出てくる
2020/12/09(水) 01:25:58.77ID:eCHhpLek
そうにかして言い返そうと頑張ったんだろうなとは思う(笑)
2020/12/09(水) 01:26:14.19ID:eCHhpLek
どうにかして
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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