シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)もしくはPOSIX準拠の互換シェルがデフォルトです。
bash/zsh/ksh/ash/dash/yash/poshなどの専用機能に依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
FreeBSDユーザは/bin/shの正体がashなので注意。
・POSIXについてのリンクは https://en.wikipedia.org/wiki/POSIX にまとめられています
最新の仕様はこちらへ http://pubs.opengroup.org/onlinepubs/9699919799/
(左上の「Shell & Utilities」 から参照することができます。)
・v7 shに一番近くて、現役(?)のshは、OpenSolaris由来のheirloom sh。
http://src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/
http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆうな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
「そういうのはperl使いましょう」と回答するのはやめましょう。
安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
質問に対して問題が間違ってるといちゃもんをつけるのもやめましょう
シェルスクリプト総合 その27
https://mevius.5ch.net/test/read.cgi/unix/1525337663/
シェルスクリプト総合 その28
■ このスレッドは過去ログ倉庫に格納されています
2018/08/02(木) 05:22:16.82
2020/04/19(日) 22:46:59.99
>>264
> ループを完全に分けてflgを無くしスッキリ出来たらいいのですが。
まず for f in `cat $INPUT_FILE`を使うのはやめよう
シェルスクリプトでテキストファイルを読むならwhile + read を使う
そしてread は read してから read すると次の行を read する(当たり前だw)
> ループを完全に分けてflgを無くしスッキリ出来たらいいのですが。
まず for f in `cat $INPUT_FILE`を使うのはやめよう
シェルスクリプトでテキストファイルを読むならwhile + read を使う
そしてread は read してから read すると次の行を read する(当たり前だw)
266名無しさん@お腹いっぱい。
2020/04/26(日) 02:43:28.05 一応それらしいのを書いてみました。
exitがあるのと、whileループの前と中にreadがあるのがちょっと不満です。
後チェックができるように do; read; while という使い方ができればいいのですが。
declare -i i=0
while : ; do
read f <- 不要かも
while [[ !("$f" =~ \t*'_TAG("S.T.A.R.T")') ]]; do
read f
done
read f
while [[ !("$f" =~ \t*'_TAG("E.N.D")') ]]; do
i=$i+1
read f
done
echo 行数は $i
exit
done < $INPUT_FILE
exitがあるのと、whileループの前と中にreadがあるのがちょっと不満です。
後チェックができるように do; read; while という使い方ができればいいのですが。
declare -i i=0
while : ; do
read f <- 不要かも
while [[ !("$f" =~ \t*'_TAG("S.T.A.R.T")') ]]; do
read f
done
read f
while [[ !("$f" =~ \t*'_TAG("E.N.D")') ]]; do
i=$i+1
read f
done
echo 行数は $i
exit
done < $INPUT_FILE
2020/04/26(日) 07:48:46.75
そもそも done < $INPUT_FILE とか書く必要ない
script.sh < $INPUT_FILE とやればいいんだよ
その方が柔軟性が高くなる
そうすりゃスクリプトは中身だけで良くなる。endはいらない。
そして while read do にも置き換えられるやろ?
read f <- 不要かも
while [[ !("$f" =~ \t*'_TAG("S.T.A.R.T")') ]]; do
read f
done
read f
while [[ !("$f" =~ \t*'_TAG("E.N.D")') ]]; do
i=$i+1
read f
done
echo 行数は $i
script.sh < $INPUT_FILE とやればいいんだよ
その方が柔軟性が高くなる
そうすりゃスクリプトは中身だけで良くなる。endはいらない。
そして while read do にも置き換えられるやろ?
read f <- 不要かも
while [[ !("$f" =~ \t*'_TAG("S.T.A.R.T")') ]]; do
read f
done
read f
while [[ !("$f" =~ \t*'_TAG("E.N.D")') ]]; do
i=$i+1
read f
done
echo 行数は $i
2020/04/26(日) 07:49:15.89
× endはいらない。
○ exitはいらない。
○ exitはいらない。
2020/04/26(日) 13:23:56.84
後出しっぽくてすみません。
$INPUT_FILE は_TAG("S.T.A.R.T")や_TAG("E.N.D")と同じく固定名なので汎用性は不要なんです。
それにこの部分はscriptの一部で本体には引数があるため毎回script.sh 引数 < $INPUT_FILE とやるのはちょっと...
といって、このためだけに分割するのも...
$INPUT_FILE は_TAG("S.T.A.R.T")や_TAG("E.N.D")と同じく固定名なので汎用性は不要なんです。
それにこの部分はscriptの一部で本体には引数があるため毎回script.sh 引数 < $INPUT_FILE とやるのはちょっと...
といって、このためだけに分割するのも...
2020/04/26(日) 16:11:10.53
じゃあ
{
なかみ
} < "$INPUT_FILE"
とかすればいい
{
なかみ
} < "$INPUT_FILE"
とかすればいい
2020/12/09(水) 09:14:48.51
2021/03/01(月) 22:58:36.48
$ eval "<"
bash: 予期しないトークン `newline' 周辺に構文エラーがあります
これってどういうこと?
bash: 予期しないトークン `newline' 周辺に構文エラーがあります
これってどういうこと?
2021/03/02(火) 03:17:30.34
予期しないトークン が出てきたんだろ
2021/03/02(火) 09:29:15.67
そりゃ < をbashに渡すから
$ <
と同じ結果になる訳で
$ <
と同じ結果になる訳で
2021/03/02(火) 11:20:08.32
おふたりありがとう
たしかに
$ <
と同じ結果になった
でもnewlineというのはどこにも記述してないのにどうして `newline' なんだろう?と
たしかに
$ <
と同じ結果になった
でもnewlineというのはどこにも記述してないのにどうして `newline' なんだろう?と
2021/03/02(火) 11:55:19.88
英語の勉強をしましょう
277名無しさん@お腹いっぱい。
2021/03/02(火) 12:14:10.372021/03/02(火) 12:48:18.17
あー、そういうことか、なるほどわかりました
日本語の中に突然newlineが出てきて、しかもわざわざクォートされてるからてっきり予約語かと思い込んでいた
というか目に見えない予約語なんだろうけど
ありがとうございます
日本語の中に突然newlineが出てきて、しかもわざわざクォートされてるからてっきり予約語かと思い込んでいた
というか目に見えない予約語なんだろうけど
ありがとうございます
2021/03/02(火) 16:21:26.89
わかっとらんやんけ!
2021/03/14(日) 10:53:57.86
>>164
win鯖管か個人用途のみで使うなら7系はいいものだと思うけど、数百MB食うpwshがunix界隈で受け入れられるとはとても思えない
まあ新興非b系シェルは駆逐されるかもしれんが
そもそもまだMacとlinux主要ディストロにしか公式対応してないので
IT職でなく、単にツールキットを享受できればいい人ならpwshでいいと思うよ
たとえ趣味や仕事でも(だけど時代遅れな)b系シェルの技能は汎用性あるから、あえて普段から使うのも勉強になるよ
win鯖管か個人用途のみで使うなら7系はいいものだと思うけど、数百MB食うpwshがunix界隈で受け入れられるとはとても思えない
まあ新興非b系シェルは駆逐されるかもしれんが
そもそもまだMacとlinux主要ディストロにしか公式対応してないので
IT職でなく、単にツールキットを享受できればいい人ならpwshでいいと思うよ
たとえ趣味や仕事でも(だけど時代遅れな)b系シェルの技能は汎用性あるから、あえて普段から使うのも勉強になるよ
2021/03/14(日) 10:59:38.87
あと怒涛の互換性ブチ壊しバージョンアップ中だから、せっかく書いても一年で動かなくなる
まだソフトウェア開発には使えないのが現状
まだソフトウェア開発には使えないのが現状
2021/03/14(日) 17:45:37.35
シェルスクリプトの特徴は「人間がそのまま読むことが出来る1行1データのテキストを扱う」という点なんだわ
シェルスクリプトは分かりづらいからPerlやPythonを使うとか言ってるやつがいるけど
1行1データのテキストを扱うならば、シェルスクリプトが一番うまく処理できる
正確に言えば、シェルスクリプトだけじゃなくてUNIX系のCLIコマンドがそれを前提としたインターフェースになってる
CLIコマンド=シェルスクリプトのAPIなんだよ
pwshがunix界隈で受け入れられないのは、APIが全く違っていて互換性がないから
API=CLIコマンドなので、プログラマの多くはAPIコマンドを知ってる
シェルスクリプトがいつまでたってもPerlやPythonに置き換わらないのも
それらの言語はCLIコマンドというAPIを使わないから
CLIコマンドを使うならば、シェルスクリプトより簡潔に書ける言語が存在しない
シェルスクリプトは分かりづらいからPerlやPythonを使うとか言ってるやつがいるけど
1行1データのテキストを扱うならば、シェルスクリプトが一番うまく処理できる
正確に言えば、シェルスクリプトだけじゃなくてUNIX系のCLIコマンドがそれを前提としたインターフェースになってる
CLIコマンド=シェルスクリプトのAPIなんだよ
pwshがunix界隈で受け入れられないのは、APIが全く違っていて互換性がないから
API=CLIコマンドなので、プログラマの多くはAPIコマンドを知ってる
シェルスクリプトがいつまでたってもPerlやPythonに置き換わらないのも
それらの言語はCLIコマンドというAPIを使わないから
CLIコマンドを使うならば、シェルスクリプトより簡潔に書ける言語が存在しない
2021/03/31(水) 10:37:33.90
シェルなんだから外部コマンドは呼べるし、テキストも扱えるしそんなに変わらんのでは
そんなに変らんということはすなわち、わざわざunix環境で使うモチベとしては弱いと思うが
ドザーが流行りのwsl使うのには便利なんじゃね
そんなに変らんということはすなわち、わざわざunix環境で使うモチベとしては弱いと思うが
ドザーが流行りのwsl使うのには便利なんじゃね
2021/03/31(水) 10:41:33.46
昔ながらのwinコマンドは大体外部コマンドだけど、pwshはほとんど組み込みコマンドなのがなあ
slsとか分けて提供してくれればbetter grep/findとして個人的には使いたいんだが
slsとか分けて提供してくれればbetter grep/findとして個人的には使いたいんだが
285名無しさん@お腹いっぱい。
2021/03/31(水) 22:49:44.43 >>283
Windowsのコマンドはスクリプトから使うことを考慮されてない物が多い
例えば、copyコマンドは、copyすると
1 個のファイルをコピーしました。
とか人間のためのメッセージが出てくるからテキスト処理に向かない
バッチファイルは人間が操作するのと同じことただやるだけ
(出力を加工しない)なのでバッチファイルから使う分にはそれでもいいが
シェルスクリプトのように出力と入力をつないで処理することには向いていない
だからpwshはWindowsのコマンドを呼び出さない
一方pwshで使うAPIは1行1データのテキストにはなってないし
普段使ってる外部コマンドではない
どちらかと言えばPythonなどの関数に近い
Unix/Linuxの外部コマンド・・・1行1データのAPIインターフェースでCLIからも参照する
pwsh、Python、多くの言語・・・引数と戻り値のAPIインターフェースで言語内から参照しない
APIのインターフェースが大きく違っていて
Unix/Linuxの外部コマンドは改行の扱いが難しいなどの制限があるが
その制限の範囲内ではスクリプトからも人間からも使いやすくて
他の言語には置き換えることが出来ないんだよ
Windowsのコマンドはスクリプトから使うことを考慮されてない物が多い
例えば、copyコマンドは、copyすると
1 個のファイルをコピーしました。
とか人間のためのメッセージが出てくるからテキスト処理に向かない
バッチファイルは人間が操作するのと同じことただやるだけ
(出力を加工しない)なのでバッチファイルから使う分にはそれでもいいが
シェルスクリプトのように出力と入力をつないで処理することには向いていない
だからpwshはWindowsのコマンドを呼び出さない
一方pwshで使うAPIは1行1データのテキストにはなってないし
普段使ってる外部コマンドではない
どちらかと言えばPythonなどの関数に近い
Unix/Linuxの外部コマンド・・・1行1データのAPIインターフェースでCLIからも参照する
pwsh、Python、多くの言語・・・引数と戻り値のAPIインターフェースで言語内から参照しない
APIのインターフェースが大きく違っていて
Unix/Linuxの外部コマンドは改行の扱いが難しいなどの制限があるが
その制限の範囲内ではスクリプトからも人間からも使いやすくて
他の言語には置き換えることが出来ないんだよ
2021/04/01(木) 00:40:09.95
Windowsでシェルスクリプト動かそうとすると、パスの\のエスケープで気が狂いそうになるから
その辺捨てたパワーシェルの割り切りは、それはそれで理解できるけどなー
その辺捨てたパワーシェルの割り切りは、それはそれで理解できるけどなー
2021/04/01(木) 01:14:08.37
>>286
Windowsでシェルスクリプトって何を使ってるの?
パスの\のエスケープなんかしたことないよ
pwshはスクリプト言語としては悪くないと思うよ
ただPythonなんかと同じようなプログラミング用の言語ということ
Pythonにも当てはまるけどプログラミング用の言語は
シェルスクリプトとはスタイルが異なる。
シェルスクリプトは端末操作に特化した言語だから
プログラミングはしにくいが端末操作は得意
まあPowerShellでも普段からコマンドレット使って端末操作してます。
pwshでもコマンドレットをメインで使いますって人なら
シェルスクリプトと同じような感じに見えるかもしれないけど
そんな人いるのかな?
Windowsでシェルスクリプトって何を使ってるの?
パスの\のエスケープなんかしたことないよ
pwshはスクリプト言語としては悪くないと思うよ
ただPythonなんかと同じようなプログラミング用の言語ということ
Pythonにも当てはまるけどプログラミング用の言語は
シェルスクリプトとはスタイルが異なる。
シェルスクリプトは端末操作に特化した言語だから
プログラミングはしにくいが端末操作は得意
まあPowerShellでも普段からコマンドレット使って端末操作してます。
pwshでもコマンドレットをメインで使いますって人なら
シェルスクリプトと同じような感じに見えるかもしれないけど
そんな人いるのかな?
2021/04/01(木) 03:02:34.14
>>287
Windowsはダブルクォートの直前にバックスラッシュがある場合のみエスケープとして扱うということに一応なってる。
しかし実はWindowsではダブルクォートも引数の区切りも解釈するのはアプリケーションの仕事なので実は上記のように解釈される保証はない。
Windowsはダブルクォートの直前にバックスラッシュがある場合のみエスケープとして扱うということに一応なってる。
しかし実はWindowsではダブルクォートも引数の区切りも解釈するのはアプリケーションの仕事なので実は上記のように解釈される保証はない。
2021/04/01(木) 06:04:39.51
2021/04/14(水) 16:39:38.83
int main( int argc,char **argv){ printf("%s\n",argv[1]); return 0;}
みたいなプログラムを書いて
a.exe "abc xyz"
みたいに実行しても処理系によって出力が
"abc xyz"
だったり
abc xyz
だったり
"abc
だったり…そんな時代もあったね。
みたいなプログラムを書いて
a.exe "abc xyz"
みたいに実行しても処理系によって出力が
"abc xyz"
だったり
abc xyz
だったり
"abc
だったり…そんな時代もあったね。
2021/04/20(火) 16:39:52.31
SSDがいっぱいになってきたのでfindで各binを周りfileが吐いたリストをunstripped(だったか?)でgrep&stripするスクリプト書いた
半分くらいになるのなこれ…
今の所不具合は出てないからヨシ
おすすめ
半分くらいになるのなこれ…
今の所不具合は出てないからヨシ
おすすめ
2021/04/20(火) 16:48:14.77
>>287
ubuntuだけどbashからpwsh -cで便利なツールとして使うのがベスト
多少最適化されてそうなapt提供のプレコンパイル版でも60MiBあるから配布時依存に加えるのは厳しいのが悩み
私的ハックにはすごく重宝
ubuntuだけどbashからpwsh -cで便利なツールとして使うのがベスト
多少最適化されてそうなapt提供のプレコンパイル版でも60MiBあるから配布時依存に加えるのは厳しいのが悩み
私的ハックにはすごく重宝
2021/04/20(火) 16:53:51.68
2021/04/20(火) 16:55:18.39
>>291
golang製のバイナリってstripすると壊れるんじゃなかったっけ
golang製のバイナリってstripすると壊れるんじゃなかったっけ
2021/04/20(火) 17:07:12.66
2021/04/20(火) 18:04:12.33
学習コスト高そうだから何でも賢くキャストしてくれるキャスト器として使ってるわ
[xml]'<foo>...'くらいのカジュアルユース
年だからjqとか付いてけないしjsonもキャストして.付けてるタブ補完連打でアクセス
ただの型コレクションとして気兼ねなく使えばいい
[xml]'<foo>...'くらいのカジュアルユース
年だからjqとか付いてけないしjsonもキャストして.付けてるタブ補完連打でアクセス
ただの型コレクションとして気兼ねなく使えばいい
2021/04/21(水) 20:07:40.11
>>296
歳のせいにするな。お前の能力の問題だ。
歳のせいにするな。お前の能力の問題だ。
2021/04/21(水) 22:14:14.03
噂のpwsh試してみたけど、とりあえずコマンドライン作業中の電卓代わりにはpythonよりはいいな
子シェルだからパス通ってて、普通に演算子と数学関数が下拵え無しで使えるってだけだけど
64KBと打つと65536を返してくるのは遊び心かな?
まあスレ違いだねごめん
子シェルだからパス通ってて、普通に演算子と数学関数が下拵え無しで使えるってだけだけど
64KBと打つと65536を返してくるのは遊び心かな?
まあスレ違いだねごめん
2021/04/21(水) 22:37:37.09
電卓代わりでbc/dc思い出して遊ぼうと思ったら今時のlinuxにはdcはいってないのね
頭の体操にいいのに残念
頭の体操にいいのに残念
300名無しさん@お腹いっぱい。
2021/04/22(木) 09:18:28.19 普通パッケージぐらいは用意されていて入れれば入るんじゃない?
deb系なら apt-get install dc で使える
deb系なら apt-get install dc で使える
2021/04/22(木) 18:02:08.57
LLのREPL使えばええやん
2021/04/25(日) 11:29:37.47
for i in "予定1" "予定2" "予定3"
do
[ $i = "予定1" ] && echo "予定1"; sleep 3
[ $i = "予定2" ] && echo "予定2"; sleep 3
[ $i = "予定3" ] && echo "予定3"; sleep 3
done
do
[ $i = "予定1" ] && echo "予定1"; sleep 3
[ $i = "予定2" ] && echo "予定2"; sleep 3
[ $i = "予定3" ] && echo "予定3"; sleep 3
done
2021/05/01(土) 09:40:38.84
今日のIDすごいwww
304名無しさん@お腹いっぱい。
2021/05/02(日) 22:37:50.92 しらんがなー
2021/05/03(月) 22:39:37.02
シェルスクリプトはperl にとって代わるCGIの記述言語って本当すか?
306名無しさん@お腹いっぱい。
2021/05/04(火) 00:29:14.02 >>305
そもそもCGIはすでに廃れてるって知ってる?
そもそもCGIはすでに廃れてるって知ってる?
307名無しさん@お腹いっぱい。
2021/05/04(火) 00:30:10.82 今どき本格的なサーバー側アプリをCGIで作るなんてないわけで
まあ簡単なツールぐらいならやるかもしれんけどさ
まあ簡単なツールぐらいならやるかもしれんけどさ
2021/05/04(火) 01:58:13.24
>>307
知らんのだがCGI以外でどう処理してるの?ジャバスクリプト?
知らんのだがCGI以外でどう処理してるの?ジャバスクリプト?
2021/05/04(火) 07:10:50.01
>>308
WebアプリケーションフレームワークがWebサーバ機能を持っていて、フロントエンドのWebサーバからリバースプロキシして使うのが多いかな。
だからWebサーバとアプリケーションの接続インターフェイスと言う感じじゃ無いんよ。
WebアプリケーションフレームワークがWebサーバ機能を持っていて、フロントエンドのWebサーバからリバースプロキシして使うのが多いかな。
だからWebサーバとアプリケーションの接続インターフェイスと言う感じじゃ無いんよ。
2021/05/04(火) 17:00:00.58
えっ、そうなの?
perlじゃ無くCGIがオワコンで、マトモwebサービス作成にはもう使われ無いのね。
perlじゃ無くCGIがオワコンで、マトモwebサービス作成にはもう使われ無いのね。
2021/05/06(木) 02:07:50.66
perl自体がオワコンかどうかの話は別として歴史の話をすると
初期はウェブサーバー+perlスクリプト、つまりCGIでウェブシステムが作られていた
もう2000年とかその頃の話よ。とほほのなんとかとかKentなんとかとかが幅を利かせていた
当時のプロ(ホームページ制作会社)でもそういったCGIを使っていた時代
その後はPHPが登場したが、これはウェブサーバーにPHPをモジュールとして組み込む
mod_phpが利用されていた。アクセスのたびにperlスクリプトを呼び出さないから速い
同じようにmod_perlというのもあった。
この頃のプロといえば自社でサーバーを保守管理するウェブサービス会社だったかな
その後から現在はアプリ自身でウェブサーバーとして起動するようになった
RailsとかPythonとかはそれが主。もちろんphpでもperlでもこの仕組が使える
クラウドの時代のプロのシステムはほぼこれ。もちろん今もホームページ制作会社はあるけど
ウェブサービス作ってる会社ってもうこんな感じじゃないでしょ?
アプリにウェブサーバーが内蔵されてると言っても、それはアプリに最適化されていて
静的コンテンツを配信するのには適していないから
>>309のいうように前段に普通のウェブサーバー(nginxやapache)を配置して
アプリ用のURLだけリバースプロキシでWebフレームワークにわたす仕組み
シェルスクリプトは、ブラウザにモジュールとして組み込んだり
シェルスクリプト自身をウェブサーバーにすることはできないからCGIオンリーで使うしか無い
と思ったらmod_bashなんてあるのなw
まあアクセス数が少ない個人用のシステムとか、特定のサーバーからアクセスしない
死活監視用のエンドポイント程度になら使っても良いんじゃね?
初期はウェブサーバー+perlスクリプト、つまりCGIでウェブシステムが作られていた
もう2000年とかその頃の話よ。とほほのなんとかとかKentなんとかとかが幅を利かせていた
当時のプロ(ホームページ制作会社)でもそういったCGIを使っていた時代
その後はPHPが登場したが、これはウェブサーバーにPHPをモジュールとして組み込む
mod_phpが利用されていた。アクセスのたびにperlスクリプトを呼び出さないから速い
同じようにmod_perlというのもあった。
この頃のプロといえば自社でサーバーを保守管理するウェブサービス会社だったかな
その後から現在はアプリ自身でウェブサーバーとして起動するようになった
RailsとかPythonとかはそれが主。もちろんphpでもperlでもこの仕組が使える
クラウドの時代のプロのシステムはほぼこれ。もちろん今もホームページ制作会社はあるけど
ウェブサービス作ってる会社ってもうこんな感じじゃないでしょ?
アプリにウェブサーバーが内蔵されてると言っても、それはアプリに最適化されていて
静的コンテンツを配信するのには適していないから
>>309のいうように前段に普通のウェブサーバー(nginxやapache)を配置して
アプリ用のURLだけリバースプロキシでWebフレームワークにわたす仕組み
シェルスクリプトは、ブラウザにモジュールとして組み込んだり
シェルスクリプト自身をウェブサーバーにすることはできないからCGIオンリーで使うしか無い
と思ったらmod_bashなんてあるのなw
まあアクセス数が少ない個人用のシステムとか、特定のサーバーからアクセスしない
死活監視用のエンドポイント程度になら使っても良いんじゃね?
2021/05/06(木) 11:37:17.18
ネタかなんかなの?このくだり
2021/05/07(金) 04:02:34.96
いや、マジレスだろ。
2021/05/07(金) 09:52:15.00
時系列はおかしいけども、仕組みとしては大体合ってるし、いいんじゃない?
2021/05/08(土) 11:58:10.94
間違ってると言うやつほど
どこが間違っているかを言わない
どこが間違っているかを言わない
2021/05/08(土) 19:01:34.99
しかしこれは CGI が使われなくなったと言われれば違和感はある Web サーバーがリバースプロキシに変化してアプリが Web サーバーを持ったに過ぎないのだろう
CGI とは Web サーバーから実行ファイルを走らせる技術だよね違うのかな
CGI とは Web サーバーから実行ファイルを走らせる技術だよね違うのかな
2021/05/09(日) 02:29:54.79
2021/05/09(日) 08:40:11.68
もともとリバースプロキシの機能はウェブサーバーにあったのだから
どちらかと言えばウェブサーバーをリバースプロキシだけに使うように
使い方が変化してって言う方が適切だね
ちなみに開発時だとウェブサーバーはあまり使わない
ウェブサーバーとしての機能や性能は必要ないので
アプリ内臓の簡易ウェブサーバー機能で十分だから
どちらかと言えばウェブサーバーをリバースプロキシだけに使うように
使い方が変化してって言う方が適切だね
ちなみに開発時だとウェブサーバーはあまり使わない
ウェブサーバーとしての機能や性能は必要ないので
アプリ内臓の簡易ウェブサーバー機能で十分だから
2021/05/09(日) 08:52:57.10
>>316
> CGI とは Web サーバーから実行ファイルを走らせる技術だよね違うのかな
一番の違いはアプリが常駐しているかどうか
CGIはアプリが常駐して無くてアクセスのたびにコマンドを実行する
このコマンドを実行するっていうのはかなり重い処理なのでパフォーマンスが出ない
特にシェルスクリプトなんか外部のコマンドを組み合わせて処理するものだから
1アクセスでシェルスクリプト本体の実行の他に
sedコマンド+grepコマンド+awkコマンド+jqコマンド・・・みたいになるから
Perlで作るよりも確実にパフォーマンスが悪くなる。Perlよりも悪い選択
それに対してCGIじゃない仕組みはサーバーマシン起動時に1回コマンドを起動するだけ
もし誰かに、これからのCGIはシェルスクリプト!シェルスクリプトでもこれだけの速度が出る!って
郵便番号から住所を検索するデモをみせてシェルスクリプトでシステム開発させようと洗脳する組織団体にそそのかされていたら
それアクセスが多い時にパフォーマンス出ますか?他の言語とベンチマークして比較していいですか?って聞いたら良いよ
郵便番号のデータなんてたかだか十数MBしかないしSSD使ってりゃ0.01秒未満で読み込めるのは当たり前
そんな低負荷なデモを数回見せた程度でパフォーマンスの検証なんてできやしない
> CGI とは Web サーバーから実行ファイルを走らせる技術だよね違うのかな
一番の違いはアプリが常駐しているかどうか
CGIはアプリが常駐して無くてアクセスのたびにコマンドを実行する
このコマンドを実行するっていうのはかなり重い処理なのでパフォーマンスが出ない
特にシェルスクリプトなんか外部のコマンドを組み合わせて処理するものだから
1アクセスでシェルスクリプト本体の実行の他に
sedコマンド+grepコマンド+awkコマンド+jqコマンド・・・みたいになるから
Perlで作るよりも確実にパフォーマンスが悪くなる。Perlよりも悪い選択
それに対してCGIじゃない仕組みはサーバーマシン起動時に1回コマンドを起動するだけ
もし誰かに、これからのCGIはシェルスクリプト!シェルスクリプトでもこれだけの速度が出る!って
郵便番号から住所を検索するデモをみせてシェルスクリプトでシステム開発させようと洗脳する組織団体にそそのかされていたら
それアクセスが多い時にパフォーマンス出ますか?他の言語とベンチマークして比較していいですか?って聞いたら良いよ
郵便番号のデータなんてたかだか十数MBしかないしSSD使ってりゃ0.01秒未満で読み込めるのは当たり前
そんな低負荷なデモを数回見せた程度でパフォーマンスの検証なんてできやしない
2021/05/09(日) 11:14:52.20
>>319
fastcgiってcgiと呼んじゃダメなん?
fastcgiってcgiと呼んじゃダメなん?
2021/05/09(日) 11:52:38.01
>>320
FastCGIはCGIの環境変数や標準入出力の内容をカプセル化してsocketで通信するように定められているから無関係ではないんだけど、
環境変数とか標準入出力を使っているわけじゃないからやはりCGIでは無いと思うよ。
FastCGIはCGIの環境変数や標準入出力の内容をカプセル化してsocketで通信するように定められているから無関係ではないんだけど、
環境変数とか標準入出力を使っているわけじゃないからやはりCGIでは無いと思うよ。
2021/05/09(日) 14:19:11.63
そういやFastCGIなんて技術もあったな
あれも「プロセス起動が遅い」という問題を
プロセス終了をさせずにプロセスを使い回すことで
解決する技術なんだよな
シェルスクリプトでそれがやれるかっつーと無理だろうな
いやwikiによればhttps://ja.wikipedia.org/wiki/FastCGI
名前付きパイプもサポートしてるようだからから不可能じゃないのか?
でもまあシェルスクリプトから呼び出すコマンドは
どちらにしろプロセス起動になるわけで
シェルスクリプトで全部実装するならまだしも
普通のシェルスクリプトではあまり効果がないだろうな
あれも「プロセス起動が遅い」という問題を
プロセス終了をさせずにプロセスを使い回すことで
解決する技術なんだよな
シェルスクリプトでそれがやれるかっつーと無理だろうな
いやwikiによればhttps://ja.wikipedia.org/wiki/FastCGI
名前付きパイプもサポートしてるようだからから不可能じゃないのか?
でもまあシェルスクリプトから呼び出すコマンドは
どちらにしろプロセス起動になるわけで
シェルスクリプトで全部実装するならまだしも
普通のシェルスクリプトではあまり効果がないだろうな
2021/05/09(日) 14:26:02.10
英語だし読む気はないけどなんかそういう技術があるみたいだw
FastCGI shell script
https://stackoverflow.com/questions/4685045/fastcgi-shell-script
ここの Look at "Writing agents in sh: conversing through a pipe"
まあ一般的にシェルスクリプトでFastCGIは無理(無意味)やでって書かれてるようだね
FastCGI shell script
https://stackoverflow.com/questions/4685045/fastcgi-shell-script
ここの Look at "Writing agents in sh: conversing through a pipe"
まあ一般的にシェルスクリプトでFastCGIは無理(無意味)やでって書かれてるようだね
324名無しさん@お腹いっぱい。
2021/05/09(日) 14:40:26.25 んでさ>>305に聞きたいんだけど
> シェルスクリプトはperl にとって代わるCGIの記述言語って本当すか?
ってどういう流れで誰に聞いたの?
二十年ぐらい前にコンピューターにちょっと詳しいだけの高校生や大学生の
会話で出てきた話だってのならわかるけどさ
今のウェブ開発ではCGIという単語自体でてこない
> シェルスクリプトはperl にとって代わるCGIの記述言語って本当すか?
ってどういう流れで誰に聞いたの?
二十年ぐらい前にコンピューターにちょっと詳しいだけの高校生や大学生の
会話で出てきた話だってのならわかるけどさ
今のウェブ開発ではCGIという単語自体でてこない
2021/05/14(金) 08:14:28.21
>>324
年寄りと話すと、API叩くことをCGI呼び出すと表現するよ
年寄りと話すと、API叩くことをCGI呼び出すと表現するよ
2021/05/17(月) 12:58:38.74
アクセス数が少なければ今でもcgiで十分。
2021/05/17(月) 19:57:40.30
アクセス数少ないのが前提w
2021/05/17(月) 21:14:15.17
知り合いだけのサイトもありますし
2021/05/18(火) 00:26:19.32
>>328
仕事では使い物にならないって意味だよ
仕事では使い物にならないって意味だよ
2021/05/18(火) 00:27:32.81
レガシーシステムの改修でもないかぎりCGIなんて出てこないし
新規でCGIとかいい出したら、そんな会社は切り捨てた方が良い
新規でCGIとかいい出したら、そんな会社は切り捨てた方が良い
2021/05/18(火) 09:35:06.09
PHP fpm ってよく使われてるように思うけど技術的には Fast CGI なんでしょ?
2021/05/18(火) 12:12:30.96
cgiスレになって無いか?
2021/05/18(火) 14:51:57.87
0埋めした2桁数字文字をdeclare -iの変数に入れると時々エラーになるので
ぐぐったら0埋め数字は8進数扱いって、何か面倒だなぁ...
ぐぐったら0埋め数字は8進数扱いって、何か面倒だなぁ...
2021/05/18(火) 16:12:30.34
頭0は8進数ってC言語とか昔から使われてるけど
最近の言語は頭0を8進数とみなさないように変わってきてる気がするね
2桁とわかってるならdeclare -i i="${var#0}"でいけるよ
そうでない場合はdeclare -i i="10#$var"でいけるかな
bash以外だとダメかもしれんけど
最近の言語は頭0を8進数とみなさないように変わってきてる気がするね
2桁とわかってるならdeclare -i i="${var#0}"でいけるよ
そうでない場合はdeclare -i i="10#$var"でいけるかな
bash以外だとダメかもしれんけど
335名無しさん@お腹いっぱい。
2021/05/19(水) 02:39:42.52 ありがとうございます。
expr でどうにか凌ぎました。
expr でどうにか凌ぎました。
2021/05/19(水) 09:22:05.13
exprは遅いぞ
2021/05/19(水) 09:42:12.88
遅いけど、どんな環境でも
2021/05/19(水) 10:08:35.53
だからexprに一切メリットないって
2021/05/19(水) 18:39:51.53
計算するときにコンソールで expr 以外に何か良い方法ありますか
2021/05/19(水) 18:40:31.58
$((1+2)、bc、dc
なんでもあるやろ
なんでもあるやろ
2021/05/19(水) 22:49:05.88
awkで計算しろ
2021/05/20(木) 08:04:37.20
2021/05/20(木) 09:04:51.56
2021/05/20(木) 09:10:53.80
誰かPOSIX原理主義者とユニケージの関係教えてくれ
2021/05/20(木) 10:27:21.13
どちらも秘密主義だからな。俺も少し興味があるが
非公開の独自技術には興味なくて裏で糸を引いているやつらに興味がある
wikipediaを見る限りUSP研究所と金沢大学が手を組んでるっぽい
USP研究所がユニケージという開発手法で怪しげなビジネスをしていて
それにコネかなんかで金沢大学が手を貸して箔をつけてる感じ
もしくは金沢大学関係者が作ったのがUSP研究所なのかもな
POSIX原理主義者はUSP研究所もしくは金沢大学の関係者だと思われる
構成員の中の幹部クラスで多分3人ぐらいしかいない
ただ引っかかるのはユニケージとPOSIX原理主義が矛盾しているという点
POSIX原理主義はPOSIXのコマンドだけを使うと言ってるがユニケージは独自コマンドを押し付けている
ユニケージ=シェルスクリプト主義でそこから分岐したのが原理主義なのかもしれないな
非公開の独自技術には興味なくて裏で糸を引いているやつらに興味がある
wikipediaを見る限りUSP研究所と金沢大学が手を組んでるっぽい
USP研究所がユニケージという開発手法で怪しげなビジネスをしていて
それにコネかなんかで金沢大学が手を貸して箔をつけてる感じ
もしくは金沢大学関係者が作ったのがUSP研究所なのかもな
POSIX原理主義者はUSP研究所もしくは金沢大学の関係者だと思われる
構成員の中の幹部クラスで多分3人ぐらいしかいない
ただ引っかかるのはユニケージとPOSIX原理主義が矛盾しているという点
POSIX原理主義はPOSIXのコマンドだけを使うと言ってるがユニケージは独自コマンドを押し付けている
ユニケージ=シェルスクリプト主義でそこから分岐したのが原理主義なのかもしれないな
2021/05/20(木) 10:30:31.60
>>343
ネタとしてのオモロイだなw
東京ハンズで大規模対応でクラウドに移行して
それに対応できなくなって今では闇とか負債と言われてるんだっけな
https://www.hands-lab.com/tech/t5600/
ここにはBashのフレームワークってかいてあるな
BashってことはやっぱりPOSIX原理主義とも違うな
ネタとしてのオモロイだなw
東京ハンズで大規模対応でクラウドに移行して
それに対応できなくなって今では闇とか負債と言われてるんだっけな
https://www.hands-lab.com/tech/t5600/
ここにはBashのフレームワークってかいてあるな
BashってことはやっぱりPOSIX原理主義とも違うな
2021/05/20(木) 11:00:28.58
2021/05/20(木) 11:19:43.21
POSIX原理主義者「シェルスクリプトは遅くない!なぜなら郵便番号から住所を検索なんで一瞬で探せる!」
※CSVファイルは解凍した状態でたったの12MBです。
どんだけ小規模低負荷前提で吠えてるのかとw
※CSVファイルは解凍した状態でたったの12MBです。
どんだけ小規模低負荷前提で吠えてるのかとw
2021/05/20(木) 16:03:03.24
sql文を組み立てるシェルスクリプトを書きます
2021/05/21(金) 21:36:49.34
シェルスクリプトは連想配列が使えるから
原理的には高速
オーバーヘッドがない分
他の言語より早い場合が多いと思う
保守しにくいけど
原理的には高速
オーバーヘッドがない分
他の言語より早い場合が多いと思う
保守しにくいけど
2021/05/21(金) 21:43:40.33
オーバーヘッドって何のことだ?
2021/05/21(金) 22:08:05.49
ファイルサイズに依存するオーバーヘッドはメモリ上に載せる部分じゃろ?
全部載せてしまえば定数時間のはずだけど、上限とかなかったっけ
載せないで逐次処理なら固定長レコード上に添字でジャンプのデータベースには勝てない
載せても多分勝てないけど
全部載せてしまえば定数時間のはずだけど、上限とかなかったっけ
載せないで逐次処理なら固定長レコード上に添字でジャンプのデータベースには勝てない
載せても多分勝てないけど
2021/05/21(金) 22:16:12.19
英辞郎くらいなら適当に整形してgrepで引いてるな、5秒くらいかかるが…
毎回読み込まず、&で起動して配列抱えたままsleep、named pipeをポーリングてもらうか
毎回読み込まず、&で起動して配列抱えたままsleep、named pipeをポーリングてもらうか
2021/05/21(金) 22:31:20.56
前から舐めるから時間かかってるだけだな、見出し語辞書引きなら既にソートされてるので人力二分探索が楽か
イニシャルでファイルを8つくらいに分け、引数見て探すファイルを割り振るだけで十分一秒切れる
イニシャルでファイルを8つくらいに分け、引数見て探すファイルを割り振るだけで十分一秒切れる
2021/05/21(金) 23:18:21.57
2021/05/21(金) 23:19:33.97
>>354
普通にSQLiteでも使ったほうが良いのでは?w
普通にSQLiteでも使ったほうが良いのでは?w
2021/05/21(金) 23:33:05.93
2021/05/22(土) 00:00:45.90
POSIX準拠だと連想配列ないけどねw
eval使えばそれっぽいことはできるけど
eval使えばそれっぽいことはできるけど
2021/05/22(土) 00:17:17.67
2021/05/22(土) 02:03:30.66
>>356
普段はdico(d)とかdict(d)使ってるよ、この用途には特化してる分sqlite3なんかより遥かに高速で優れてる
ただ、自前の辞書に索引付けてdictのdbに変換…ってのは面倒なんだよ
英和の出来合いdbってdict.orgとかでも提供されてないしな
テキスト形式の単一辞書(~100MB)をgrep、数秒のラグなら十分許容できるだろう
取り敢えず事足りればいいんだよって思想です
普段はdico(d)とかdict(d)使ってるよ、この用途には特化してる分sqlite3なんかより遥かに高速で優れてる
ただ、自前の辞書に索引付けてdictのdbに変換…ってのは面倒なんだよ
英和の出来合いdbってdict.orgとかでも提供されてないしな
テキスト形式の単一辞書(~100MB)をgrep、数秒のラグなら十分許容できるだろう
取り敢えず事足りればいいんだよって思想です
2021/05/22(土) 02:08:46.46
>>359
デーモンなんかの実装は大体そうでしょ
mkfifoでファイルのように読み書きできるパイプ作れるでしょ?
無限whileループの中で1秒程度sleep、パイプに書き込まれてるかreadでチェック(所謂原始的なポーリング)
デーモンなんかの実装は大体そうでしょ
mkfifoでファイルのように読み書きできるパイプ作れるでしょ?
無限whileループの中で1秒程度sleep、パイプに書き込まれてるかreadでチェック(所謂原始的なポーリング)
2021/05/22(土) 02:29:18.62
追伸>>361
プロセスの関係について答えてなかった
クライエントがコマンドライン引数を単にnamed pipeへ書き込むだけのシェルスクリプトでいいです
というか必須でないです
ぶっちゃけやることはecho query >fifo
それを$eiji queryと書けると分かりやすいというだけですね
プロセスの関係について答えてなかった
クライエントがコマンドライン引数を単にnamed pipeへ書き込むだけのシェルスクリプトでいいです
というか必須でないです
ぶっちゃけやることはecho query >fifo
それを$eiji queryと書けると分かりやすいというだけですね
2021/05/22(土) 02:36:55.49
老婆心かもしれないけど、常駐シェルスクリプトなんて何ら特別なものでないよ
常駐しないシェルスクリプト=exitの記述が存在している、あるいはeofに達するもの
常駐できるシェルスクリプト=signalやらで殺さなければexit/eofに達しないモノです
常駐しないシェルスクリプト=exitの記述が存在している、あるいはeofに達するもの
常駐できるシェルスクリプト=signalやらで殺さなければexit/eofに達しないモノです
2021/05/22(土) 02:44:59.50
shを常用するやつは居るが
流石にed常用するやつは居らんな
流石にed常用するやつは居らんな
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- ついに!大谷翔平2戦連発12号でMLBトップタイ浮上 直近5戦4発と量産モード [首都圏の虎★]
- 【立川・小学校侵入】男招集の母親は「金髪ヤンキー」酒ビン片手に暴れた男2人も「ヤンキー」…保護者・児童「いじめ聞いたことない」★2 [ぐれ★]
- 【インセル】小学生の列に車で突っ込み、電車内で包丁を振り回す…世界中で増えている 「非モテの独身男」による凶悪犯罪 [煮卵★]
- 【芸能】永野芽郁 主演映画の舞台挨拶に待ち受ける“地獄の空気” 前日に文春が第三弾の可能性も [冬月記者★]
- 【独自】元ジャンポケ斉藤、480円のバームクーヘンを700円で“転売”報道…製造元が直撃に語った“意外な真相” [ひかり★]
- 【国際】パキスタン、インドへの反撃開始 核兵器管理「国家指令本部」招集 ★2 [ぐれ★]
- 【悲報】チャリモメン、完全に逝く。スマホ運転1万2000円、歩道通行6000円、傘さし5000円、信号無視6000円、イヤホン5000円 [476167917]
- 👧とっとこ🐹メグ太郎の🏡
- 大谷、奇跡的スリーランホームランwwwwwwwwwwwwww [312375913]
- 【実況】博衣こよりのえちえちクロノクロス🧪 ★5
- トランプ政権「アメリカは8月にデフォルトします😭」 [175344491]
- おまいら底辺ごっこやってるだけでホントは嫁も子どももいるんだろ [673057929]