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

■ このスレッドは過去ログ倉庫に格納されています
2021/10/05(火) 22:49:30.91ID:KsbWuyFp
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
・「POSIX原理主義」「ユニケージ」「USP研究所」はPOSIXとUnixを曲解し
間違ったシェルスクリプトを広めている宗教です。洗脳されないようにしてください。

前スレ: シェルスクリプト総合 その36
https://mevius.5ch.net/test/read.cgi/tech/1614212414/

関連スレ
・【Bash】Windows Subsystem for Linux【WSL】11
https://mao.5ch.net/test/read.cgi/linux/1627507889/
・Bashでプログラミング [転載禁止](c)2ch.net
https://mao.5ch.net/test/read.cgi/linux/1443885102/
・シェルスクリプト総合 その28
https://mevius.5ch.net/test/read.cgi/unix/1533154936/
・zsh その7
https://mevius.5ch.net/test/read.cgi/unix/1337844883/
・過去UNIXで使われていた ksh というシェルについて
https://mevius.5ch.net/test/read.cgi/unix/1582358403/
・【POSIX】UNIXプログラミング【BSD】 [転載禁止](c)2ch.net
https://mevius.5ch.net/test/read.cgi/unix/1443103705/
・おまえら! shell は何を使っているんですか?
https://mevius.5ch.net/test/read.cgi/unix/1012330865/
2021/12/31(金) 21:32:31.66ID:tL7Nlh3I
>>490
わからないの?コンパイラの仕組みとか勉強したほうが良いよ。
2021/12/31(金) 21:34:32.21ID:tL7Nlh3I
>>491
> コピーした分だけ余計メモリに使うから
何をコピーするんだよw
まさか起動中はメモリを解放できないとか思ってるのか?
2021/12/31(金) 22:02:04.77ID:FGQbYFO9
>>492
おまえが常識を知るべき。w
2022/01/01(土) 01:34:30.30ID:X6UBQb83
>>494
自分でわからないって言っただろ
わからないなら、自分で勉強するか
わからない所を具体的に聞け
ちゃんと教えてやるぞw
2022/01/01(土) 01:48:54.59ID:X6UBQb83
まあ俺は優しいから教えてやろうw

{ echo '#!/bin/sh'; printf '#%100s\n' {1..1000000}; echo sleep 30; echo end; } > scr.sh

これで100MBぐらいのシェルスクリプトができる
これを実行しても3MBぐらいしかメモリは食わない
内部形式は小さいからだ

これを全部メモリに蓄えておくと100MB以上消費する
最初にパースして内部形式にする方式は
後ろにバイナリとかがついている時ににエラーになるから使えない
497デフォルトの名無しさん
垢版 |
2022/01/01(土) 02:25:58.45ID:4YArnW91
ヤバいww マジもんのアホの子だったwww
2022/01/01(土) 02:34:27.52ID:C+d3qbg4
{ echo '#!/bin/sh'; echo '{'; printf 'printf %s\n' {1..1000000}; echo sleep 30; echo '}'; } > scr.sh

「内部形式は小さいからだ」wwwww
499デフォルトの名無しさん
垢版 |
2022/01/01(土) 02:37:31.29ID:MVIeZ8kP
echo "あけおめ $(TZ=Asia/Tokyo date +%Y)"
2022/01/01(土) 03:08:50.88ID:IS6zNVE1
今回のケースって世代バックアップとかやってたとしても
それを掴んでたバックアップスクリプト自体が上書きされて暴走して余計なファイルまで全消ししたわけだよね
>実行中のスクリプトが存在している状態でスクリプトの上書きによりリリースしてしまった
問題はここだけだと思うんだけど
酷く杜撰な運用に見える
*nix使いってこの程度のITリテラシーしかないんだね
気持ち悪い
2022/01/01(土) 04:56:33.89ID:eqRzM57+
>>500
本気でやったら、金も時間もかなりかかりそうやからなあ。
やらかしでしかないんでいいわけのしようもないんやろけど、そこはあんまり重視してなかったんやろ。
2022/01/01(土) 09:21:39.56ID:xOGFhMUK
>>500
マジでこれな
特殊な事例かと思ったがこのスレ見る限り似たようなレベルのやつが多数
2022/01/01(土) 09:27:14.46ID:xOGFhMUK
>>501
実行中なら中断するか終了を待ってから新しいのをリリースすればいいだけだろ
日次バッチを中断したり終了を待つのに金も時間もかなりかかるのかい?

他にも例えば権限管理をまともにしてれば防げたよね?
2022/01/01(土) 10:19:02.42ID:EsvsX5UV
>>500
バックアップ容量が多いと、書き込み先の書き込み速度以上のスピードはでないから、
複数世代バックアップするにも、ずっーとバックアップというかコピーというかの処理をし続けることになる。
月次フルバックアップ処理中に、次の増分バックアップ処理が始まるのはテープの場合はよくある。

今回は復元不能と言っていることから過去のバックアップも消えてそうでD2Dっぽいけど、
そういう設計なら基本的にスクリプトは止められないから、
止まったときに更新するんじゃなく、
別のスクリプトをリリースして、古いスクリプトを退役させるような方式を選ぶと思う。

毎日すぐに処理が終わるようなスクリプトしか目にしてないエンジニアが、
そんな設計とは知らず、そのまま更新しちゃったとかそんな理由なんじゃないかなあ?
2022/01/01(土) 11:10:41.01ID:eqRzM57+
>>503
そんなのなら本気やないな。w
テラバイトレベルのバックアップをしっかり実装すんのはなかなかやと思うが。
「日次」でいけるかどうかもあやしいやろ。

クリティカルなシステムでもなし、ただ甘く見てた、てところやろうとは思うが。
2022/01/01(土) 11:53:24.53ID:vr0aJE4l
>>505
長時間かかる処理は普通suspend/resumeできるようにするよね?
自作しなくても市販のソフト買ってもいいし

日次で終わるかどうかは障害とは関係ないが
ミラーリングなのに日次で終わらないようなら作りが悪いよ

それにバックアップスクリプトに削除を混ぜるのがそもそも間違い
ジョブの単位や依存関係の管理が杜撰
2022/01/01(土) 12:42:08.01ID:eqRzM57+
スパコンの市販ソフトって、どこで売ってんの?w
2022/01/01(土) 15:00:36.73ID:w7Saqf4k
>>506
世代バックアップするなら旧世代のバックアップを削除すべきだろうし、
スクリプトで作った一時ファイルは、そのスクリプトで消すべきだと思う。

やはりスクリプトの更新方法の不備かと。
2022/01/01(土) 15:06:02.27ID:9R1m0X3m
>>507
OSはLinuxやで
Cray用のソフトも普通に売ってるで
知らんだけやろww
2022/01/01(土) 15:08:39.26ID:9R1m0X3m
>>508
世代バックアップちゃうで
今回の障害を受けて世代バックアップ検討しますて書いとるやろ
2022/01/01(土) 15:51:26.55ID:s/zRpYH/
今までしてなかったのか…
512デフォルトの名無しさん
垢版 |
2022/01/01(土) 16:05:12.10ID:5XWhCSq7
>>472
動的な部分以外で?
2022/01/01(土) 20:11:57.76ID:VJKo4de7
>>475
俺、ティム・クックと0円でランチを一緒にしたことあるぞ。
例の宇宙船にほど近いレストランのカウンター席でメシを食ってたら隣に誰か座ってきた。
その人は電話をしまくってて、落ち着かねー奴だなーと思って顔をよく見たら... !!!
2022/01/01(土) 21:57:57.81ID:eqRzM57+
>>509
> OSはLinuxやで
それはカーネルやろ。

> Cray用のソフトも普通に売ってるで
どこの店でどんなふうに?
いわゆる「市販」とちゃうやろ。
2022/01/01(土) 22:33:56.61ID:OowWZOH4
>>498
それ内部形式じゃないぞ?
100MBのシェルスクリプトのソースコードを生成してるだけ
100MBのシェルスクリプトを実行してもわずかのメモリしか消費しない

内部形式は小さいからだ!


やっぱアホの子はお前の方?w
2022/01/01(土) 23:26:19.57ID:2clFsvDI
>>514
off-the-shelf softwareの日本語訳だよ

そこら辺の電気屋さんとかで買えるという意味の市販とは確かに違うが
市販ソフトって言葉は文脈によってもう少し広い意味になるよ
勉強になった?
2022/01/02(日) 00:17:01.00ID:krHLUjqu
>>516
勝手に文脈をつくんなや。
で、どこで売ってんの?
2022/01/02(日) 02:41:50.85ID:rJLs0hO4
>>517
Linux用でいいのでは?

https://support.hpe.com/hpesc/public/docDisplay?docId=a00109703ja_jp&;docLocale=ja_JP

オペレーティングシステム
HPE Cray Linux Environment

HPE Cray Programming Environment
Intel Parallel Studio XE (およびIntel MPI)
PGI Professional Edition
GNUコンパイラコレクション
Rogue Wave SoftwareのTotalView
AMD AOCC
Vampir
GNUコンパイラ
2022/01/02(日) 02:43:01.97ID:rJLs0hO4
https://www.hpe.com/jp/ja/product-catalog/detail/pip.hpe-cray-operating-system.1012842044.html

HPE Cray OSは、ハイパフォーマンスコンピューティング向けに機能強化された
SUSER Linux Enterprise Server (SLES) をベースとしています。


ふむ。SUSEのパッケージ全部動きそうだけど?
2022/01/02(日) 03:09:01.94ID:zid9yl1I
>>515
計測してから出直してww
2022/01/02(日) 10:42:41.52ID:8JZTRTCW
>>508
処理をどので分割すべきか理解してない典型例
cronのような原始的なのしか使ったことないでしょ
*nix系あるある
2022/01/02(日) 12:46:42.90ID:krHLUjqu
>>519
それで動作保証まですんのはなかなかのチャレンジャーやと思うが。w
そんなことより、どこで売ってんの?
2022/01/02(日) 12:49:12.64ID:krHLUjqu
>>521
石北会計?w

UNIX系あるあるなのは認める。
だが、それでいい。
524デフォルトの名無しさん
垢版 |
2022/01/02(日) 12:53:06.50ID:o9R7ffl7
>>472
LinuxでPerlで実験してみたが同じ問題は出なかったぞ。
$0 のファイルにプログラムを追加書き込みしてもその部分は実行されない。
シェルで同様に$0に追加書き込みしたらその部分は実行された。
2022/01/02(日) 14:36:43.42ID:RXuS28pT
>>524
嘘つきに騙されんなよ
PerlもPHPもRubyもPythonもJavaScriptも問題ない
シェル特有
526デフォルトの名無しさん
垢版 |
2022/01/02(日) 14:56:13.51ID:o9R7ffl7
だよなあ。eval や動的にソース読んで実行する個所以外は問題ないよなあ。
2022/01/02(日) 16:04:09.36ID:rJLs0hO4
>>520
計測した結果を書いてるだろw
見たくないものは見えないってか
2022/01/02(日) 16:05:33.33ID:rJLs0hO4
>>522
だからLinux用アプリを探せよ
それともお前、オーダーメイドはどこで市販されてるの?って聞いてるのか?
2022/01/02(日) 17:18:56.44ID:uxcqsBQo
>>527
嘘つくなよ
ファイルサイズすら計測してないじゃん
内部形式プッw
530デフォルトの名無しさん
垢版 |
2022/01/02(日) 17:21:21.53ID:TQn3/Mee
inodeを同じにして実験してみろ。
2022/01/02(日) 18:18:29.48ID:krHLUjqu
>>528
>>506

ちなみに、ワイかてLinux用ソフトウェアを「購入」したことはあるが、「市販」やなかった。
試用版を借りてから代理店経由やったかな。

「市販」ていうからには、コンシューマ用アプリとしてどっかで売ってるんやろうから、どこでやと聞いとるんや。
2022/01/02(日) 18:23:43.20ID:krHLUjqu
>>526
evalも、ふつうは問題ないな。
ブロックなら解析済みやし、文字列でも内部でリテラル化済みやし。

Perlで唯一可能性があるとしたら、BEGINブロックか?
2022/01/02(日) 18:38:07.35ID:9WH/m7VC
市販とは、必ずしも店頭売りとは限らんぞ?
534デフォルトの名無しさん
垢版 |
2022/01/02(日) 18:46:21.78ID:TQn3/Mee
通販か、楽天か。
2022/01/02(日) 20:57:18.99ID:krHLUjqu
>>533
それでもええから、どこや?
2022/01/02(日) 21:30:44.40ID:pRhI5t2q
>>531
サチコ、それ代理店経由で市販ソフトを購入した言うんやで・・・
537デフォルトの名無しさん
垢版 |
2022/01/02(日) 21:51:30.45ID:TQn3/Mee
GPGPU対応ソフトウェアはMacが一番多いそうだけどね。
意外だよね。
538デフォルトの名無しさん
垢版 |
2022/01/02(日) 23:40:10.01ID:TQn3/Mee
https://www.j-focus.or.jp/focus/application.html
市販ソフトは普通にあるみたいだよ。
2022/01/02(日) 23:57:26.17ID:GoZUBNyV
>>529
ファイルサイズはlsでわかるし
メモリサイズはpsでわかる
やり直し
540デフォルトの名無しさん
垢版 |
2022/01/03(月) 00:01:22.65ID:3eYYTX8d
ノード数で値段が変わるソフトはスパコンを念頭に置いてるんだな。
541デフォルトの名無しさん
垢版 |
2022/01/03(月) 02:53:21.64ID:NkK7sfLH
>>532
ファイルやソケットや標準入力から読んで作った文字列を eval に渡すなんてのがあったらダメかも知れないが、
これはもうプログラムの作りが悪いと言えるな。SQLインジェクションと同じだし。

require でソース読むやつは事前にチェックされてないのではないかな?
use でのモジュール読み込みはコンパイルされるが。
2022/01/03(月) 03:07:40.68ID:bmMFL9ij
パール爺さんウザイ
2022/01/03(月) 03:10:09.55ID:NkK7sfLH
すまんのう。
2022/01/03(月) 03:20:04.46ID:AIc8F3zq
フルーツパーラー
2022/01/03(月) 04:04:45.94ID:mfU61qLK
パーラーリラパラリラ
2022/01/03(月) 04:04:54.39ID:cOflznJy
正直、何となくまずいとは感じる程度のものだったけど解像度が上がって良かったと思ってる
単純なファイル操作だけど対象が巨大で時間がかかるってのは中々お目にかからない
2022/01/03(月) 09:44:56.65ID:8bAzmZsa
>>539
もしかして>>496>>498の違いがわからないの?
2022/01/03(月) 10:01:01.93ID:mfU61qLK
わかるなら説明しろ。そうやって回答から逃げる手だってバレバレだ。
2022/01/03(月) 12:52:48.32ID:AKaSmxyk
>>541
> require でソース読むやつは事前にチェックされてないのではないかな?

だからなに?
自分で書いてるやん。w

> これはもうプログラムの作りが悪いと言えるな。SQLインジェクションと同じだし。

ただし、実行時でなくロード時に読みきることは変わらないので、結局、シェルスクリプトほどのリスクはない。
2022/01/03(月) 16:05:02.85ID:Tvis+k5K
>メモリサイズはpsでわかる
そんな装備で大丈夫か?
2022/01/03(月) 19:01:29.66ID:mfU61qLK
シェルスクリプトのリスクは高い
なぜなら普通やるだろ?
起動中にプログラム書き換え
な?
2022/01/03(月) 23:36:43.52ID:Izj8gspx
やんないよw
頭おかしいやろ
2022/01/03(月) 23:42:21.51ID:Sz4S1PaG
結局シェルスクリプトが原因じゃなく
シェルスクリプト使いの低スキルが原因だった
2022/01/04(火) 00:46:56.04ID:GepGyN7D
自己書き換えシェルスクリプトは、昔に見た記憶があるな。
動作がちゃんとわかってれば、有用な機能として使えるんだろ。
2022/01/04(火) 04:39:07.32ID:mpSUdZEa
例えばWindowsのログオンスクリプトとかに使われるバッチファイルもアトミックな更新が必要になるね
そういう場合はログインする可能性のない夜間とかを狙って更新したりする
スパコンのアホは、よりによってバックアップ中にバックアップのスクリプトを更新しようとした
上の例で言えば一番ログインが試行される始業時間帯とかを狙ってわざわざ更新するようなもの
どれだけ愚かな行為か想像できよう
2022/01/04(火) 05:34:07.92ID:A3JfSOSv
OSやファイルシステムによっては出来ないかも知れないが、プログラム動作中に新バージョンへの入れ替えを
行っても動作しているプロセスはそのまま動かし続けて影響させず、次回起動時から新しい方が動く方式にして
おけば良かった。例えば Linux や UNIX 系 OS ならシンボリックリンクの指す先を変えることでこれは可能だ。
Windowsではどうやるか知らないがシンボリックリンクはあるようなので多分出来るんじゃないだろうか。
2022/01/04(火) 06:04:36.10ID:mpSUdZEa
>>556
Windowsだとリンクを一旦削除してから張り直す事になるから無理だろうね
リンク先が一旦消えるから、掴んでたバッチファイルは読み込みが途切れるか、
そもそも誰かが掴んでる状態ではリンクの削除に失敗するかどっちか
2022/01/04(火) 09:11:02.07ID:KoJ0HNB1
OSとしてはプログラムを実行中に入れ替え可能だとしても
アプリがそのように作られてない可能性はなくならない
2022/01/04(火) 11:24:49.85ID:K01QBlyF
実行中に上書き更新しないのは当たり前

undefinedになった場合でも全データを削除しないように作るのも当たり前

どちらも当たり前だと思ってないやつが多数いるのがシェルスクリプト特有の問題
2022/01/04(火) 11:53:26.50ID:+L/8HzOo
「全スクリプトを{ ...; exit; }で囲え」なんていうキチ・・・エッジな人もいる
2022/01/04(火) 14:35:05.73ID:5xHtBJHw
コマンドプロンプトとかいうゴミみたいなシェルは実行中にメモ帳から普通に上書き保存できるしbashみたいな更新問題がある

構文解析が闇鍋状態だからまともに(...&exit)でガードする気も起きん
2022/01/04(火) 14:40:41.27ID:5xHtBJHw
全スクリプトを{ ...;exit;}というとヤバいように見えるけど

... #オプション解析とか
main(){ ...;}
{ main "$@"; exit;}

とでもすれば多くの更新事故は防げると思う
2022/01/04(火) 14:56:49.79ID:/LDsiUgA
>>562
関数を使わない主義に属してるので
そのコードは主義に違反している
2022/01/04(火) 14:57:43.78ID:/LDsiUgA
>>561
> 構文解析が闇鍋状態だから
それはシェルスクリプトを勉強しろっていいたいねw
2022/01/04(火) 14:58:27.64ID:/LDsiUgA
あ、コマンドプロンプトの話か。そっちはしらん
2022/01/04(火) 15:13:42.85ID:MrAZHCc6
>>562
全然防げないよ
無駄なことに時間費やさずに実行中に上書きするのをやめろ
2022/01/04(火) 15:22:08.88ID:/LDsiUgA
防げないことにしたいやつも多いんだよなぁw
2022/01/04(火) 16:48:36.33ID:96ZsKrQo
>>562
mainの中で他のスクリプト呼ぶ場合はどうするの?
先に読み込んでおける?
2022/01/04(火) 17:17:13.38ID:cDPvJZXV
{}でくくった時の読み込み方は実装依存じゃなく仕様で保証されてる?
ここを読んだけどよく分からなかったや
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_02_03
2022/01/04(火) 21:09:09.26ID:64zZ84Fs
>>568
無理
2022/01/04(火) 22:51:36.65ID:GepGyN7D
>>568
sourceすりゃできんじゃないの?
2022/01/04(火) 23:40:25.31ID:AW7Xm3ow
>>571
やってみたら?
2022/01/05(水) 02:14:02.36ID:gXRPzTKb
{} の中にsource入れとけばいいだろ
他のスクリプト言語と一緒
2022/01/05(水) 02:56:20.38ID:5qnDyK1z
いいわけないじゃん
2022/01/05(水) 06:55:29.27ID:gXRPzTKb
{ } を使ってるってことは、最後の}まで読まないと実行しないんだから問題なし
{ } の中でsoruce使っていれば } を読み込んだあとでsourceが実行される
soruceで読み込むファイルでも同じように { } を使えば全部読み込まれた後に実行されるから問題なし
2022/01/05(水) 09:53:24.37ID:eMhfA/OR
こいつダメだ
2022/01/05(水) 10:18:42.52ID:xkk1B14s
低脳に絡み続ける君も同じだよ
2022/01/05(水) 10:59:12.75ID:gXRPzTKb
低能だから{}の意味もわからない
2022/01/05(水) 11:07:48.80ID:d+7VpUpG
こういう低脳がゴロゴロ居るからやらかす奴が後を絶たない
2022/01/05(水) 11:30:55.99ID:rp3p3Ei2
低脳は自分が低脳だと気付かないから始末が悪い
テストして確認しましたと言ってもその内容も方法も間違ってる
基本的に日本語が通じない
2022/01/05(水) 12:38:42.04ID:yzDYKn2O
高い堅牢性が必要な処理にシェルスクリプトは向かない
2022/01/05(水) 13:12:18.88ID:ga42ykuy
こんな不確かな情報に頼ってまでやることじゃないと思うのだが
普通にスクリプト側に更新機能でも追加した方が確実だし
2022/01/05(水) 13:18:00.85ID:ceAZRPz/
低脳が携わらなければ何も問題無くなる
2022/01/05(水) 14:45:39.80ID:3uURdH+S
メモリ使用量を計測させれば
低脳の足切りが出来るぞ
2022/01/05(水) 21:24:39.70ID:gXRPzTKb
{}が安全だとわからないアホは
}を読まないと文法が確定しないからって
理屈がわからないんだろうな
2022/01/05(水) 21:25:07.58ID:gXRPzTKb
>>584
メモリ使用量はすでに計測済み
sleepを間に入れて、その間にpsを実行するだけでわかるよ
2022/01/05(水) 21:25:43.70ID:gXRPzTKb
>>582
アホやな
安全対策の一つに決まってるやろ
2022/01/05(水) 23:00:14.61ID:w3EWhbnX
ホンモノのガイジなんだね。。
2022/01/06(木) 10:05:53.46ID:oxm3scqT
>>586
はい、足切り〜〜ww
これ使えるな
2022/01/06(木) 15:32:38.44ID:mkXv+CyB
>>586の方法は重大な欠陥が2つある
スパコンのデータ削除したやつと同レベル
2022/01/07(金) 00:05:11.34ID:5/GZEBm/
>>589
必死すぎじゃね?それで議論に勝ったつもりでいるんだろうけどさ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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