X



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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
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/
0513デフォルトの名無しさん
垢版 |
2022/01/01(土) 20:11:57.76ID:VJKo4de7
>>475
俺、ティム・クックと0円でランチを一緒にしたことあるぞ。
例の宇宙船にほど近いレストランのカウンター席でメシを食ってたら隣に誰か座ってきた。
その人は電話をしまくってて、落ち着かねー奴だなーと思って顔をよく見たら... !!!
0514デフォルトの名無しさん
垢版 |
2022/01/01(土) 21:57:57.81ID:eqRzM57+
>>509
> OSはLinuxやで
それはカーネルやろ。

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

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


やっぱアホの子はお前の方?w
0516デフォルトの名無しさん
垢版 |
2022/01/01(土) 23:26:19.57ID:2clFsvDI
>>514
off-the-shelf softwareの日本語訳だよ

そこら辺の電気屋さんとかで買えるという意味の市販とは確かに違うが
市販ソフトって言葉は文脈によってもう少し広い意味になるよ
勉強になった?
0521デフォルトの名無しさん
垢版 |
2022/01/02(日) 10:42:41.52ID:8JZTRTCW
>>508
処理をどので分割すべきか理解してない典型例
cronのような原始的なのしか使ったことないでしょ
*nix系あるある
0522デフォルトの名無しさん
垢版 |
2022/01/02(日) 12:46:42.90ID:krHLUjqu
>>519
それで動作保証まですんのはなかなかのチャレンジャーやと思うが。w
そんなことより、どこで売ってんの?
0524デフォルトの名無しさん
垢版 |
2022/01/02(日) 12:53:06.50ID:o9R7ffl7
>>472
LinuxでPerlで実験してみたが同じ問題は出なかったぞ。
$0 のファイルにプログラムを追加書き込みしてもその部分は実行されない。
シェルで同様に$0に追加書き込みしたらその部分は実行された。
0526デフォルトの名無しさん
垢版 |
2022/01/02(日) 14:56:13.51ID:o9R7ffl7
だよなあ。eval や動的にソース読んで実行する個所以外は問題ないよなあ。
0528デフォルトの名無しさん
垢版 |
2022/01/02(日) 16:05:33.33ID:rJLs0hO4
>>522
だからLinux用アプリを探せよ
それともお前、オーダーメイドはどこで市販されてるの?って聞いてるのか?
0530デフォルトの名無しさん
垢版 |
2022/01/02(日) 17:21:21.53ID:TQn3/Mee
inodeを同じにして実験してみろ。
0531デフォルトの名無しさん
垢版 |
2022/01/02(日) 18:18:29.48ID:krHLUjqu
>>528
>>506

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

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

Perlで唯一可能性があるとしたら、BEGINブロックか?
0534デフォルトの名無しさん
垢版 |
2022/01/02(日) 18:46:21.78ID:TQn3/Mee
通販か、楽天か。
0537デフォルトの名無しさん
垢版 |
2022/01/02(日) 21:51:30.45ID:TQn3/Mee
GPGPU対応ソフトウェアはMacが一番多いそうだけどね。
意外だよね。
0540デフォルトの名無しさん
垢版 |
2022/01/03(月) 00:01:22.65ID:3eYYTX8d
ノード数で値段が変わるソフトはスパコンを念頭に置いてるんだな。
0541デフォルトの名無しさん
垢版 |
2022/01/03(月) 02:53:21.64ID:NkK7sfLH
>>532
ファイルやソケットや標準入力から読んで作った文字列を eval に渡すなんてのがあったらダメかも知れないが、
これはもうプログラムの作りが悪いと言えるな。SQLインジェクションと同じだし。

require でソース読むやつは事前にチェックされてないのではないかな?
use でのモジュール読み込みはコンパイルされるが。
0546デフォルトの名無しさん
垢版 |
2022/01/03(月) 04:04:54.39ID:cOflznJy
正直、何となくまずいとは感じる程度のものだったけど解像度が上がって良かったと思ってる
単純なファイル操作だけど対象が巨大で時間がかかるってのは中々お目にかからない
0549デフォルトの名無しさん
垢版 |
2022/01/03(月) 12:52:48.32ID:AKaSmxyk
>>541
> require でソース読むやつは事前にチェックされてないのではないかな?

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

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

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

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

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

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

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

とでもすれば多くの更新事故は防げると思う
0575デフォルトの名無しさん
垢版 |
2022/01/05(水) 06:55:29.27ID:gXRPzTKb
{ } を使ってるってことは、最後の}まで読まないと実行しないんだから問題なし
{ } の中でsoruce使っていれば } を読み込んだあとでsourceが実行される
soruceで読み込むファイルでも同じように { } を使えば全部読み込まれた後に実行されるから問題なし
0580デフォルトの名無しさん
垢版 |
2022/01/05(水) 11:30:55.99ID:rp3p3Ei2
低脳は自分が低脳だと気付かないから始末が悪い
テストして確認しましたと言ってもその内容も方法も間違ってる
基本的に日本語が通じない
0582デフォルトの名無しさん
垢版 |
2022/01/05(水) 13:12:18.88ID:ga42ykuy
こんな不確かな情報に頼ってまでやることじゃないと思うのだが
普通にスクリプト側に更新機能でも追加した方が確実だし
0585デフォルトの名無しさん
垢版 |
2022/01/05(水) 21:24:39.70ID:gXRPzTKb
{}が安全だとわからないアホは
}を読まないと文法が確定しないからって
理屈がわからないんだろうな
0593デフォルトの名無しさん
垢版 |
2022/01/10(月) 00:22:34.19ID:MINWORCd
スレ立てるまでもない質問はここで 158匹目
https://mevius.5ch.net/test/read.cgi/tech/1635193843/538

ここに、YouTube で有名な、雑食系エンジニア・KENTA のサロンの、
Ruby on Rails 初心者用コースの内容を書いておいた

基本的に、Rails以外のフレームワークは、シェアが少ないのでおすすめしない。
学習環境も揃わないので、無理

Railsでは、Railsチュートリアル・Railsガイド・
黒田努の3冊の本・パーフェクト Ruby on Rails・Ruby on Rails 6 エンジニア養成読本とか、
Rubyでは、改訂2版 パーフェクトRuby・改訂2版 Ruby逆引きハンドブックなどの教科書が揃っている

これほど、良い教科書が揃っているフレームワークはない!

Laravel のシェアは少しあるけど、KENTAがPHP は一生やる必要がないと言ったので、
PHP自体がオワコンになってしまったw

日本のウェブ開発の将来は、ほぼKENTAが決めている。
Scala を滅ぼしたのも、KENTA
0600デフォルトの名無しさん
垢版 |
2022/02/03(木) 14:44:47.61ID:PlIeOUah
質問スレなかったのでここで質問させてください。
フォルダ以下の全てのファイル内の特定の文字列からn行ずれた文字列を置換したいんですが、どういうコマンドを打ったら良いでしょうか?

具体的にやりたいこととしては、Unityのprefabファイルやsceneファイル(テキストファイル)に張り付いている特定のコンポーネントの名前を一括で置換したいです。
ファイルの構造は↓こんな感じになっていて、guidがc5b2e3eb25e32904fa18c5ae09b782d9の行の1行下のm_nameを書き換えたいんですが、コマンドがうまく動きません
https://github.com/Unity-Technologies/FPSSample/blob/master/Assets/Prefabs/Cameras/ServerCameraSpot.prefab#L51

作りかけのコマンド
git grep -n c5b2e3eb25e32904fa18c5ae09b782d9-- '*.prefab' | cut -f 1,2 -d ":" | awk -F ":" '{print $1 ":"($2 + 1)}' | sed -n $2p

適当にsedでm_nameを置換指定してしまうと、guidがc5b2e3eb25e32904fa18c5ae09b782d9以外のものまで置換してしまうので、
最初のgit grepでファイル名と行番号他を取得し、次のcutでファイル名と行番号だけにして、awkで行番号+1して、ファイル名と+1した行番号を元に、
ファイル名と行番号を指定したsed -eをしたいんですがprintしたものがうまく最後のsedに渡ってきません
0601デフォルトの名無しさん
垢版 |
2022/02/03(木) 16:11:17.44ID:709dXRKt
>>600
Sedでも特定行の次行の処理とかできるで?

これはダメやろうが、こんな感じでがんばったらいけるんちゃうの。
sed -q '/guid/{p;n;s/m_name:/.../p;b}p'
0602デフォルトの名無しさん
垢版 |
2022/02/03(木) 16:30:52.62ID:vAyV6XNb
処理時間気にしないなら

|while IFS=: name line etc; do sed -e "$((line+1)) s///" $name; done

とかで良くない?
0605デフォルトの名無しさん
垢版 |
2022/02/04(金) 00:19:45.01ID:ZnGIs6if
>>600
perl 使ってこんな風にするとか。

perl -pe 'if($f){s/m_Name:/置換したい文字列/}$f=/guid: c5b2e3eb25e32904fa18c5ae09b782d9/' 読むファイル >書くファイル

少なくとも一つ前の行の状態を今読んだ行の処理をする時に分かっていないとできない。
読む方法を行単位にしないのであればその限りではないが。
0607デフォルトの名無しさん
垢版 |
2022/02/04(金) 00:45:37.37ID:ZnGIs6if
もう一つ awk, sed, xargs の組み合わせでやるやつを考えたが書き込もうとするとエラーになって書けない。
要約を書くと

grep で行番号付きで出力 | awk でコロン区切りで読んで $1 をカンマ区切りで連結した文字列を作った後でその後ろに "s/m_Name:/xxxxx/" の文字列を付けて出力 | xargs で入力はsedスクリプトになるようにしてsedが読むファイルは最初にgrepで指定したファイルと同じにする。
0610デフォルトの名無しさん
垢版 |
2022/02/04(金) 01:03:24.21ID:r4soLYsS
そんなこといったら
pythonだってシェル使ってワンライナーやろうと思えばできるじゃん
0612デフォルトの名無しさん
垢版 |
2022/02/04(金) 01:25:44.27ID:53s+UEIz
>>600
なにをどう変えたいのか知らん(読むの面倒)けどこうすればいいだけ
自分でパズル(ワンライナー)問題を作ろうとするな

cat prefab | awk '
/guid: c5b2e3eb25e32904fa18c5ae09b782d9/ {
print
getline
print $0 "new"
next
}
{ print }
'
■ このスレッドは過去ログ倉庫に格納されています

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