シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その31
https://mevius.5ch.net/test/read.cgi/tech/1565446670/
探検
シェルスクリプト総合 その32
■ このスレッドは過去ログ倉庫に格納されています
2019/10/25(金) 00:08:45.53ID:6btPTvif
153デフォルトの名無しさん
2019/12/11(水) 00:00:55.23ID:5YQOA1oq154デフォルトの名無しさん
2019/12/11(水) 00:03:27.10ID:5YQOA1oq >>152
スペックは低くはないと思うけどさ、もう古いし
中古だと2〜3万円台で搭載パソコンを買えちゃうよ
https://used.dospara.co.jp/sale/search.php?view=1&kw=Core%20i7%203770&page=1
スペックは低くはないと思うけどさ、もう古いし
中古だと2〜3万円台で搭載パソコンを買えちゃうよ
https://used.dospara.co.jp/sale/search.php?view=1&kw=Core%20i7%203770&page=1
155デフォルトの名無しさん
2019/12/11(水) 00:11:26.60ID:ivhCTlPt156デフォルトの名無しさん
2019/12/11(水) 00:15:38.57ID:rj8eSq0k バックグラウンドで色々動きっぱなし(usage 60%ぐらい)のWindows PC(Ryzen 5 2600, 3.66GHz)で
Cygwin
real 0m23.706s
user 0m23.375s
sys 0m0.093s
WSL
real 0m3.987s
user 0m3.891s
sys 0m0.016s
だった。えっ、私のCygwin遅すぎ・・・
Cygwin
real 0m23.706s
user 0m23.375s
sys 0m0.093s
WSL
real 0m3.987s
user 0m3.891s
sys 0m0.016s
だった。えっ、私のCygwin遅すぎ・・・
157デフォルトの名無しさん
2019/12/11(水) 00:21:29.42ID:5YQOA1oq158デフォルトの名無しさん
2019/12/11(水) 00:26:41.57ID:H3x5MOt+ >>153
$ printf "%d-%d¥n" $(shuf -r -i 0-999 -n 1000000) $(shuf -r -i 0-999 -n 1000000) > input.txt
$ time awk -F "-" '{ print (($1-$2) > 0) ? "+"$0 : " "$0 }' < input.txt > output.txt
1行目は0-999でランダムな引き算を100万件生成してファイル出力
2行目の処理は50秒かかったのと同じマシンで1.7~1.8秒で終わる
計算結果をキャッシュするからか10種類くらいの引き算の使い回しだと
100万件でも0.17秒くらいになる
$ printf "%d-%d¥n" $(shuf -r -i 0-999 -n 1000000) $(shuf -r -i 0-999 -n 1000000) > input.txt
$ time awk -F "-" '{ print (($1-$2) > 0) ? "+"$0 : " "$0 }' < input.txt > output.txt
1行目は0-999でランダムな引き算を100万件生成してファイル出力
2行目の処理は50秒かかったのと同じマシンで1.7~1.8秒で終わる
計算結果をキャッシュするからか10種類くらいの引き算の使い回しだと
100万件でも0.17秒くらいになる
159デフォルトの名無しさん
2019/12/11(水) 00:40:07.88ID:5YQOA1oq >>158
円文字化けしてんぞ
$ time awk -F "-" '{ print (($1-$2) > 0) ? "+"$0 : " "$0 }' < input.txt > output.txt
real 0m0.373s
user 0m0.300s
sys 0m0.005s
$ time sh -c 'while read var; do [ $(($var)) -gt 0 ] && echo "+$var" || echo " $var"; done' < input.txt > output2.txt
real 0m8.247s
user 0m4.337s
sys 0m3.904s
まあ速いんだろうけどさ。想定の範囲内かな。
円文字化けしてんぞ
$ time awk -F "-" '{ print (($1-$2) > 0) ? "+"$0 : " "$0 }' < input.txt > output.txt
real 0m0.373s
user 0m0.300s
sys 0m0.005s
$ time sh -c 'while read var; do [ $(($var)) -gt 0 ] && echo "+$var" || echo " $var"; done' < input.txt > output2.txt
real 0m8.247s
user 0m4.337s
sys 0m3.904s
まあ速いんだろうけどさ。想定の範囲内かな。
160デフォルトの名無しさん
2019/12/11(水) 00:40:26.36ID:H3x5MOt+ ランダムな引き算生成するawkバージョン
$ awk 'BEGIN{srand(); for (i=0; i<1000000; ++i) {print int(rand()*1000)"-"int(rand()*1000)}}' > input.txt
$ awk 'BEGIN{srand(); for (i=0; i<1000000; ++i) {print int(rand()*1000)"-"int(rand()*1000)}}' > input.txt
161デフォルトの名無しさん
2019/12/11(水) 00:46:42.05ID:5YQOA1oq お、こっちの方がわずかに速かった。スクリプトで計算させるよりも読み込み時に分割させたほうが良いんだろうな。
setを使って分割した場合は、setの呼び出しでコストがかかると思うけど
$ time sh -c 'IFS=-; while read i j; do [ $i -gt $j ] && echo "+$i-$j" || echo " $i-$j" ; done' < input.txt > output2.txt
real 0m7.866s
user 0m4.114s
sys 0m3.744s
setを使って分割した場合は、setの呼び出しでコストがかかると思うけど
$ time sh -c 'IFS=-; while read i j; do [ $i -gt $j ] && echo "+$i-$j" || echo " $i-$j" ; done' < input.txt > output2.txt
real 0m7.866s
user 0m4.114s
sys 0m3.744s
162デフォルトの名無しさん
2019/12/11(水) 00:53:02.45ID:mRJcWm57 $ time sh -c 'var=1-2; i=0; while [ $i -lt 1000000 ]; do [ $(($var)) -lt 0 ]; i=$((i+1)); done'
real 0m2.268s
user 0m2.264s
sys 0m0.004s
$ time { var=1-2; echo "i=0;while(i<=1000000){${var}<=0;i++;}" | bc > /dev/null; }
real 0m1.540s
user 0m1.175s
sys 0m0.366s
real 0m2.268s
user 0m2.264s
sys 0m0.004s
$ time { var=1-2; echo "i=0;while(i<=1000000){${var}<=0;i++;}" | bc > /dev/null; }
real 0m1.540s
user 0m1.175s
sys 0m0.366s
163デフォルトの名無しさん
2019/12/11(水) 00:54:49.86ID:5YQOA1oq > 対象の文字列は標準出力ではなくて変数に格納されています。
お前らこの条件忘れてるだろw
お前らこの条件忘れてるだろw
164デフォルトの名無しさん
2019/12/11(水) 01:39:58.92ID:5YQOA1oq うーん、よく考えるとこれ実際の要件を想定して
「それぞれのコマンドを使って処理をした結果を元に続きの処理をする」となると
差があまりなくなってしまうかもしれん
$ time sh -c 'while read var; do echo $(($var)); done' < input.txt | while read i; do [ $i -lt 0 ]; done
real 0m7.678s
user 0m9.059s
sys 0m4.427s
$ time awk -F "-" '{ print $1-$2 }' < input.txt | while read i; do [ $i -lt 0 ]; done
real 0m7.629s
user 0m6.358s
sys 0m1.580s
$ time bc < input.txt | while read i; do [ $i -lt 0 ]; done
real 0m7.649s
user 0m6.869s
sys 0m2.006s
「それぞれのコマンドを使って処理をした結果を元に続きの処理をする」となると
差があまりなくなってしまうかもしれん
$ time sh -c 'while read var; do echo $(($var)); done' < input.txt | while read i; do [ $i -lt 0 ]; done
real 0m7.678s
user 0m9.059s
sys 0m4.427s
$ time awk -F "-" '{ print $1-$2 }' < input.txt | while read i; do [ $i -lt 0 ]; done
real 0m7.629s
user 0m6.358s
sys 0m1.580s
$ time bc < input.txt | while read i; do [ $i -lt 0 ]; done
real 0m7.649s
user 0m6.869s
sys 0m2.006s
165デフォルトの名無しさん
2019/12/11(水) 01:44:25.40ID:5YQOA1oq $ time sh -c 'while read var; do [ $(($var)) -gt 0 ] && echo + || echo; done' < input.txt | while read i; do [ "$i" ]; done
real 0m7.596s
user 0m9.484s
sys 0m5.123s
$ time awk -F "-" '{ print (($1-$2) > 0) ? "+" : "" }' < input.txt | while read i; do [ "$i" ]; done
real 0m5.418s
user 0m4.670s
sys 0m1.012s
real 0m7.596s
user 0m9.484s
sys 0m5.123s
$ time awk -F "-" '{ print (($1-$2) > 0) ? "+" : "" }' < input.txt | while read i; do [ "$i" ]; done
real 0m5.418s
user 0m4.670s
sys 0m1.012s
166デフォルトの名無しさん
2019/12/11(水) 01:47:25.15ID:5YQOA1oq 結果をファイルに吐き出すだけなら良いんだけどね、
その結果をシェルスクリプトを使って処理する場合の話
その結果をシェルスクリプトを使って処理する場合の話
167デフォルトの名無しさん
2019/12/11(水) 03:39:07.57ID:MgOCMEvC >>151
今年出た i5 9500
プロセッサー・ベース動作周波数 3.00 GHz
ターボ・ブースト利用時の最大周波数 4.40 GHz
あんまり変わらない気がする
シェルスクリプトなんかスレッド使わないだろうし
今年出た i5 9500
プロセッサー・ベース動作周波数 3.00 GHz
ターボ・ブースト利用時の最大周波数 4.40 GHz
あんまり変わらない気がする
シェルスクリプトなんかスレッド使わないだろうし
168デフォルトの名無しさん
2019/12/11(水) 07:28:04.35ID:hRzITiR9169デフォルトの名無しさん
2019/12/11(水) 08:22:26.35ID:6UY8oXji >>145
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04
によると
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap01.html#tag_17_01_02_01
の一覧の内,sizeof()函数,++及び--単項演算子,Selection・Interation・Jumpは実装しなくてよい
とあるから>はPOSIXの範疇だと思います。
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04
によると
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap01.html#tag_17_01_02_01
の一覧の内,sizeof()函数,++及び--単項演算子,Selection・Interation・Jumpは実装しなくてよい
とあるから>はPOSIXの範疇だと思います。
170デフォルトの名無しさん
2019/12/11(水) 12:44:26.62ID:MgOCMEvC >>168
そりゃプロセスだろ
そりゃプロセスだろ
171デフォルトの名無しさん
2019/12/11(水) 13:32:50.85ID:hRzITiR9 >>170
今はCPUの話だからハイパースレッディングのスレッドだろう
今はCPUの話だからハイパースレッディングのスレッドだろう
172デフォルトの名無しさん
2019/12/11(水) 13:55:32.35ID:hRzITiR9173デフォルトの名無しさん
2019/12/11(水) 15:18:53.13ID:++mq81bA174デフォルトの名無しさん
2019/12/11(水) 15:22:46.18ID:++mq81bA プロセスが別のコアで動くとかか??
スレッドをハイパースレッディングのスレッドを指すなんて初めてみた
スレッドをハイパースレッディングのスレッドを指すなんて初めてみた
175デフォルトの名無しさん
2019/12/11(水) 15:28:13.91ID:hRzITiR9176デフォルトの名無しさん
2019/12/11(水) 15:29:58.09ID:hRzITiR9 >>174
普通にCPUの所に4コア8スレッドって書いてあるからさ
https://kakaku.com/pc/cpu/itemlist.aspx?pdf_se=22&pdf_Spec306=4
普通にCPUの所に4コア8スレッドって書いてあるからさ
https://kakaku.com/pc/cpu/itemlist.aspx?pdf_se=22&pdf_Spec306=4
177デフォルトの名無しさん
2019/12/11(水) 15:39:31.82ID:++mq81bA そこまで出されるとマジでスレッドという意味で使ってたんだな
OSも知らないスレッドだろう、OSから見てもただのコアだろう
OSも知らないスレッドだろう、OSから見てもただのコアだろう
178デフォルトの名無しさん
2019/12/11(水) 15:46:36.17ID:hRzITiR9179デフォルトの名無しさん
2019/12/11(水) 15:55:15.40ID:++mq81bA 一行目なんて書かなきゃならないのね
>>167もそんなスレッドのことを言ってないだろうに。なんでかなw
プロセスじゃなくスレッドならプロセス起動する無駄時間がないとかそういう意味でのだろうし、そもそもスレッドはそういうために
元々のネタがプロセス起動にどれだけ食われてるのかという話だな、するなら
>>167もそんなスレッドのことを言ってないだろうに。なんでかなw
プロセスじゃなくスレッドならプロセス起動する無駄時間がないとかそういう意味でのだろうし、そもそもスレッドはそういうために
元々のネタがプロセス起動にどれだけ食われてるのかという話だな、するなら
180デフォルトの名無しさん
2019/12/11(水) 16:11:12.77ID:6UY8oXji >>172
なるほど。確かに準拠してませんでした,すいません。
なるほど。確かに準拠してませんでした,すいません。
181デフォルトの名無しさん
2019/12/11(水) 20:23:56.94ID:MgOCMEvC182デフォルトの名無しさん
2019/12/12(木) 01:47:04.79ID:4Chv4WTd183デフォルトの名無しさん
2019/12/12(木) 02:33:13.07ID:NtLqNRlV184デフォルトの名無しさん
2019/12/12(木) 02:40:24.09ID:n05Ewb3K CPUのスペック比較とシェルスクリプトでスレッド使わないという話とどう関係あるの?
新しいCPUはOSスレッドを効率的に実行できる機能でもあるの?
新しいCPUはOSスレッドを効率的に実行できる機能でもあるの?
185デフォルトの名無しさん
2019/12/12(木) 03:38:37.48ID:g+q4RhTJ そうだよな。CPUの話をしていたのに
なんでスレッド使うかどうかの話をしたのかだよな
> 今年出た i5 9500
> プロセッサー・ベース動作周波数 3.00 GHz
> ターボ・ブースト利用時の最大周波数 4.40 GHz
> あんまり変わらない気がする
>
> シェルスクリプトなんかスレッド使わないだろうし
なんでスレッド使うかどうかの話をしたのかだよな
> 今年出た i5 9500
> プロセッサー・ベース動作周波数 3.00 GHz
> ターボ・ブースト利用時の最大周波数 4.40 GHz
> あんまり変わらない気がする
>
> シェルスクリプトなんかスレッド使わないだろうし
186デフォルトの名無しさん
2019/12/12(木) 03:41:30.87ID:g+q4RhTJ スレッド使わなくてもコア使うから関係あるだろって言えばよかったのか?
i5 9500の名前を出したのは、コア6スレッド6だからだろ?
i5 9500の名前を出したのは、コア6スレッド6だからだろ?
187デフォルトの名無しさん
2019/12/12(木) 08:10:01.85ID:NtLqNRlV >>184
最新のCPUにしたところで周波数がちょっと早くなった程度で差が無いって話
新しいCPUは同時実行スレッド数が増えてるとか言う奴がいるけどシェルスクリプトには関係ないだろ?
「どう関係あるの? 」とか言われても「関係ない」って最初から書いてんのに読めない訳?
最新のCPUにしたところで周波数がちょっと早くなった程度で差が無いって話
新しいCPUは同時実行スレッド数が増えてるとか言う奴がいるけどシェルスクリプトには関係ないだろ?
「どう関係あるの? 」とか言われても「関係ない」って最初から書いてんのに読めない訳?
188デフォルトの名無しさん
2019/12/12(木) 08:11:55.05ID:NtLqNRlV189デフォルトの名無しさん
2019/12/12(木) 09:49:29.49ID:AVYkL4QT 本気でシェルスクリプトとコアが関係ないと思ってるのか?
パイプ使ったら複数コア使うことになるんだが
例えばcat ファイル名 | grep なんとか ってやると
catのファイル表示と、grepが並列で動く
あとバックグラウンド実行もあるよね
自分が並列で動くものを書いてないからって、
シェルスクリプトと並列が関係ないわけじゃないだろ
自分が書かないって話をするならC言語だってコアは関係ない
パイプ使ったら複数コア使うことになるんだが
例えばcat ファイル名 | grep なんとか ってやると
catのファイル表示と、grepが並列で動く
あとバックグラウンド実行もあるよね
自分が並列で動くものを書いてないからって、
シェルスクリプトと並列が関係ないわけじゃないだろ
自分が書かないって話をするならC言語だってコアは関係ない
190デフォルトの名無しさん
2019/12/12(木) 09:52:07.59ID:AVYkL4QT あと、xargsとかGNU parallelとか
191デフォルトの名無しさん
2019/12/12(木) 10:19:43.03ID:mtFqZIGW それはプロセスレベルの並列化のお話。スレッドの話はどこいった?
192デフォルトの名無しさん
2019/12/12(木) 10:24:13.74ID:AVYkL4QT シェルスクリプトで外部コマンドを使わない場合の話でもしてるのか?
シェルスクリプトでパイプを使わないならコアは関係ない!
そんな事ありえないけど関係ないんだ!
みたいな話したってしょうがないだろ
それにパイプ使うのは foo | bar | baz みたいなシェル関数でも使えるし
シェル関数の中身はそれぞれこんな感じな
while read line
do
省略
done < ファイル名
外部コマンド一切なし
シェルスクリプトでパイプを使わないならコアは関係ない!
そんな事ありえないけど関係ないんだ!
みたいな話したってしょうがないだろ
それにパイプ使うのは foo | bar | baz みたいなシェル関数でも使えるし
シェル関数の中身はそれぞれこんな感じな
while read line
do
省略
done < ファイル名
外部コマンド一切なし
193デフォルトの名無しさん
2019/12/12(木) 10:24:48.46ID:AVYkL4QT >>191
今はCPUコアの話
今はCPUコアの話
194デフォルトの名無しさん
2019/12/12(木) 12:23:33.66ID:NxSFhA/k >コア6スレッド6だからだろ
それを言うならスレッド12だろ。ハイパースレッディングでスペック表すときの論理コア数をスレッドと言っているにすぎないだろうに
いつものやつが絡んでるだけだろうな、すぐに話を逸らすことからも
それを言うならスレッド12だろ。ハイパースレッディングでスペック表すときの論理コア数をスレッドと言っているにすぎないだろうに
いつものやつが絡んでるだけだろうな、すぐに話を逸らすことからも
195デフォルトの名無しさん
2019/12/12(木) 12:43:03.31ID:NxSFhA/k196デフォルトの名無しさん
2019/12/12(木) 12:57:42.86ID:NxSFhA/k >>195,183
>まあ、シェル自体はスレッドを使ってることもあるだろう、いまどき
いや、いまどきも1シェルプロセスは1スレッドしかなのか。仮にスレッド使う場合があったとしてもどういう場合というのはわからんな
確認せずにいまどきならと書いた、すまん
>まあ、シェル自体はスレッドを使ってることもあるだろう、いまどき
いや、いまどきも1シェルプロセスは1スレッドしかなのか。仮にスレッド使う場合があったとしてもどういう場合というのはわからんな
確認せずにいまどきならと書いた、すまん
197デフォルトの名無しさん
2019/12/12(木) 16:08:19.94ID:AVYkL4QT198デフォルトの名無しさん
2019/12/12(木) 16:10:23.64ID:AVYkL4QT199デフォルトの名無しさん
2019/12/12(木) 16:11:47.38ID:AVYkL4QT200デフォルトの名無しさん
2019/12/12(木) 16:24:20.77ID:AVYkL4QT ちなみに>>164-165とかはパイプを使ってるのでコア数は意味がある
例えばこれだとshプロセスが2つ起動して、それぞれCPUコアを使っている
time sh -c 'while read var; do echo $(($var)); done < input.txt | while read i; do [ $i -lt 0 ]; done'
例えばこれだとshプロセスが2つ起動して、それぞれCPUコアを使っている
time sh -c 'while read var; do echo $(($var)); done < input.txt | while read i; do [ $i -lt 0 ]; done'
201デフォルトの名無しさん
2019/12/12(木) 16:41:19.05ID:1H8k0UmA 自己文書化(?)されたシェルスクリプトの例
http://www.tip.net.au/wiki/index.php/Self_documenting_bash_script_options
もうちょっと洗練して、例えばhelp関数から実行するときはgettoptsコマンドを
ヘルプ出力用に書換えたものにするなんてこともできそう。
http://www.tip.net.au/wiki/index.php/Self_documenting_bash_script_options
もうちょっと洗練して、例えばhelp関数から実行するときはgettoptsコマンドを
ヘルプ出力用に書換えたものにするなんてこともできそう。
202デフォルトの名無しさん
2019/12/12(木) 16:43:22.79ID:AVYkL4QT203デフォルトの名無しさん
2019/12/12(木) 16:49:53.62ID:mtFqZIGW $ seq 1 inf | tail
を実行して別のターミナルで
$ top -1
を実行してみる。f キーを押して fields management 画面に進んで
"Last Used Cpu" を選んで表示させる様にするとプロセスがどの
CPUコアで実行されているか表示される
を実行して別のターミナルで
$ top -1
を実行してみる。f キーを押して fields management 画面に進んで
"Last Used Cpu" を選んで表示させる様にするとプロセスがどの
CPUコアで実行されているか表示される
204デフォルトの名無しさん
2019/12/12(木) 17:08:05.32ID:1H8k0UmA205デフォルトの名無しさん
2019/12/12(木) 17:46:32.53ID:3GyD1b3F206デフォルトの名無しさん
2019/12/12(木) 17:46:52.23ID:AVYkL4QT >>204
ああ、ヘルプの自動生成か。悩むところだよね。
簡単なのなら確かにそのリンク先みたいにできるだろうけど
時々例外的なコードはいるしさ、
とういうかリンク先、なんであんなよくわからんコードなんだ?
もっと簡潔にかけそうなんだが
txmp.txt? zenity?ん??GUI表示するため?
ああ、ヘルプの自動生成か。悩むところだよね。
簡単なのなら確かにそのリンク先みたいにできるだろうけど
時々例外的なコードはいるしさ、
とういうかリンク先、なんであんなよくわからんコードなんだ?
もっと簡潔にかけそうなんだが
txmp.txt? zenity?ん??GUI表示するため?
207デフォルトの名無しさん
2019/12/12(木) 17:48:26.91ID:AVYkL4QT208デフォルトの名無しさん
2019/12/12(木) 17:53:26.87ID:AVYkL4QT 試しに書いてみようかと思ってコピペしようとしたら画像やしw
209デフォルトの名無しさん
2019/12/12(木) 18:02:50.61ID:CkUjiG2X >>207
今回のハイパースレッディングでのスレッドを言い出し絡みまくりからは、ないな
今回のハイパースレッディングでのスレッドを言い出し絡みまくりからは、ないな
210デフォルトの名無しさん
2019/12/12(木) 18:16:03.44ID:n05Ewb3K211デフォルトの名無しさん
2019/12/12(木) 18:21:26.57ID:CkUjiG2X >>210
ん?オプティマイズが仮にあったとしても並列はしないだろう、あの文では
並列にになるように書いた「別の」スクリプトとは別の話だけど?
「え?」じゃなくどうスレッドの効果があるように思うの?みんなはスッキリするかもwだが俺はもやもやもやもやするぞw
ん?オプティマイズが仮にあったとしても並列はしないだろう、あの文では
並列にになるように書いた「別の」スクリプトとは別の話だけど?
「え?」じゃなくどうスレッドの効果があるように思うの?みんなはスッキリするかもwだが俺はもやもやもやもやするぞw
212デフォルトの名無しさん
2019/12/12(木) 18:22:28.30ID:AVYkL4QT >>201
やっつけ仕事w もっと正規表現頑張れば短くできそうだけど、やる気なしw
#!/bin/sh
print_opts() {
sed -nE '/\s+###START/,/\s+###END/ p' < "$1" | while read line; do
case $line in
"###"*) ;;
[0-9a-zA-Z]*)
echo -n "-${line%%)*}"
case $line in *"#"*) echo -n "${line#*#}"; esac
echo
;;
"#"*) echo " ${line#*#}" ;;
esac
done
}
while getopts "h456" optionName; do
case $optionName in
###START
h) print_opts "$0" ;;
4) ;; # negate
5) ;; # colorspace COLOR
# COLOR: RED ro GREEN or BLUE
6) ;; # sepia-tone
###END
esac
done
やっつけ仕事w もっと正規表現頑張れば短くできそうだけど、やる気なしw
#!/bin/sh
print_opts() {
sed -nE '/\s+###START/,/\s+###END/ p' < "$1" | while read line; do
case $line in
"###"*) ;;
[0-9a-zA-Z]*)
echo -n "-${line%%)*}"
case $line in *"#"*) echo -n "${line#*#}"; esac
echo
;;
"#"*) echo " ${line#*#}" ;;
esac
done
}
while getopts "h456" optionName; do
case $optionName in
###START
h) print_opts "$0" ;;
4) ;; # negate
5) ;; # colorspace COLOR
# COLOR: RED ro GREEN or BLUE
6) ;; # sepia-tone
###END
esac
done
213デフォルトの名無しさん
2019/12/12(木) 18:26:08.31ID:AVYkL4QT >>211
今シェルスクリプトの話をしてるんですよ?
という言い方をしておいて、特定のシェルスクリプトコードの話になるわけないし
例えばC言語で使うのは1コアだけだろうがと言われても「は?」としか思わん。
言ったあとで「特定のC言語のコードのことだよ」って弁解してもねw
最初からシェルスクリプトで並列処理できないと思ってたのバレバレだから
今シェルスクリプトの話をしてるんですよ?
という言い方をしておいて、特定のシェルスクリプトコードの話になるわけないし
例えばC言語で使うのは1コアだけだろうがと言われても「は?」としか思わん。
言ったあとで「特定のC言語のコードのことだよ」って弁解してもねw
最初からシェルスクリプトで並列処理できないと思ってたのバレバレだから
214デフォルトの名無しさん
2019/12/12(木) 18:33:38.18ID:CkUjiG2X215デフォルトの名無しさん
2019/12/12(木) 18:38:11.60ID:CkUjiG2X216デフォルトの名無しさん
2019/12/12(木) 18:57:21.35ID:CkUjiG2X CPU使い尽くす>>167改変版(やっつけ)
numparallels=8
time zsh -c 'var=1-2; sub () { i=0; while [ $i -lt '$((1000000 / $numparallels))' ]; do [ $(($var)) -lt 0 ]; : $((++i)); done; cat; echo "$1:$i" }; echo'"$(printf " | sub %d" $(seq $numparallels))"
まあ、やってることは何もないので分割並列しても何も問題ないが(そもそもスクリプトの目的としては問題ある)、仮にオプティマイズなんぞがあってもこんなことはしない(だろう)
現在のシェルはsubがプロセスだがスレッドを使っていたりしても、しないだろう
「え?」って何か他にスレッドの効果を出すやり方あるかなあ??スレッドを使ったとして
numparallels=8
time zsh -c 'var=1-2; sub () { i=0; while [ $i -lt '$((1000000 / $numparallels))' ]; do [ $(($var)) -lt 0 ]; : $((++i)); done; cat; echo "$1:$i" }; echo'"$(printf " | sub %d" $(seq $numparallels))"
まあ、やってることは何もないので分割並列しても何も問題ないが(そもそもスクリプトの目的としては問題ある)、仮にオプティマイズなんぞがあってもこんなことはしない(だろう)
現在のシェルはsubがプロセスだがスレッドを使っていたりしても、しないだろう
「え?」って何か他にスレッドの効果を出すやり方あるかなあ??スレッドを使ったとして
217デフォルトの名無しさん
2019/12/12(木) 19:01:40.02ID:AVYkL4QT218デフォルトの名無しさん
2019/12/12(木) 19:04:56.67ID:AVYkL4QT219デフォルトの名無しさん
2019/12/12(木) 19:06:01.30ID:CkUjiG2X220デフォルトの名無しさん
2019/12/12(木) 19:23:11.97ID:AVYkL4QT 語彙がおかしくなってる(笑)
221デフォルトの名無しさん
2019/12/12(木) 19:24:18.99ID:CkUjiG2X こういうやつwww
222デフォルトの名無しさん
2019/12/12(木) 22:51:40.18ID:1H8k0UmA223デフォルトの名無しさん
2019/12/13(金) 02:20:43.65ID:ysGzQi5M >>222
書いていて思ったけど、リンク先のやつ
s=$s" -negate" のsの使い方がわからんのよね
その後どう処理するか
それを入れるともっと複雑になるはずだが
それが書いてないからシンプルに見えちゃう
シェルスクリプトに限らないけど、オプション解析ライブラリはヘルプを
自動で作ろうとするけどそのヘルプを詳しく書こうとするととたんに見づらくなる気がする。
横にに長くなるんだよね。
逆の発想でPythonではヘルプを解析してオプション解析コードを生成するdocoptというものがある。
これのシェルスクリプト版でdocoptsというのもあるけど内部でgoバイナリを呼び出してて
シェルスクリプトネイティブじゃないのでちょっとダサい実装だったはず
https://github.com/docopt/docopts
こっちのほうが良い気がしてるがやっぱりヘルプにこだわりだすと、うーんって感じなので
結局、catで出力する方法で落ち着いてる。↓これね
cat<<HERE
Usage: ・・・
-a, --aaa aaaaaa
HERE
書いていて思ったけど、リンク先のやつ
s=$s" -negate" のsの使い方がわからんのよね
その後どう処理するか
それを入れるともっと複雑になるはずだが
それが書いてないからシンプルに見えちゃう
シェルスクリプトに限らないけど、オプション解析ライブラリはヘルプを
自動で作ろうとするけどそのヘルプを詳しく書こうとするととたんに見づらくなる気がする。
横にに長くなるんだよね。
逆の発想でPythonではヘルプを解析してオプション解析コードを生成するdocoptというものがある。
これのシェルスクリプト版でdocoptsというのもあるけど内部でgoバイナリを呼び出してて
シェルスクリプトネイティブじゃないのでちょっとダサい実装だったはず
https://github.com/docopt/docopts
こっちのほうが良い気がしてるがやっぱりヘルプにこだわりだすと、うーんって感じなので
結局、catで出力する方法で落ち着いてる。↓これね
cat<<HERE
Usage: ・・・
-a, --aaa aaaaaa
HERE
224デフォルトの名無しさん
2019/12/13(金) 02:37:48.49ID:r2S5lo/C HERE よりその文章全体の要約がUSAGEなので
END_USAGE とかにしたほうがちょっと読みやすい
END_USAGE とかにしたほうがちょっと読みやすい
225デフォルトの名無しさん
2019/12/13(金) 03:28:44.87ID:ysGzQi5M END_USAGEからはじまるで?
226デフォルトの名無しさん
2019/12/13(金) 12:27:46.56ID:aQIhFndX 素人がここで訊くのはアレだがコマンドのオプションってなんでああもガバガバなの
lsは-hvlみたいにまとめられるしどこにでも指定できるじゃない
shortとlongで仕様を決めたらしいがfindからして従ってないし
ddはそもそも出自が違うらしいから異質でも納得だけども
lsは-hvlみたいにまとめられるしどこにでも指定できるじゃない
shortとlongで仕様を決めたらしいがfindからして従ってないし
ddはそもそも出自が違うらしいから異質でも納得だけども
227デフォルトの名無しさん
2019/12/13(金) 16:35:44.26ID:oSsH2Kni >>222
偉そうな言い方になるけど,もしあのスクリプトの
[ ${_helpcnt:-0} -ge 1 ] && \
{ optdoc 'オプションtの解説'; continue; }
という部分が
helpdoc 'オプションtの解説'
みたいに一コマンドで完結していれば使いたくなったかも。
ところが関数の中でcontinueを使うと効果なくなるのよね……w
偉そうな言い方になるけど,もしあのスクリプトの
[ ${_helpcnt:-0} -ge 1 ] && \
{ optdoc 'オプションtの解説'; continue; }
という部分が
helpdoc 'オプションtの解説'
みたいに一コマンドで完結していれば使いたくなったかも。
ところが関数の中でcontinueを使うと効果なくなるのよね……w
228デフォルトの名無しさん
2019/12/13(金) 18:58:27.09ID:ysGzQi5M 個人的にはgetoptsはロングオプションが使えないから
それだけで候補にはならんなぁ
かと言ってgetoptはロングオプション使えるけど、
数を増やすと一行がどんどん長くなってしまうw
それだけで候補にはならんなぁ
かと言ってgetoptはロングオプション使えるけど、
数を増やすと一行がどんどん長くなってしまうw
229デフォルトの名無しさん
2019/12/13(金) 19:44:00.66ID:oSsH2Kni 寧ろgetoptはPOSIXに準拠しなくなってしまうから嫌だな。
コマンドの主要な部分でどうしても非POSIXコマンドに頼らざる得ないとかならともかく
オプション解析っていう割と副次的な部分の機能を高めるが為にわざわざ標準から逸脱したくない。
(あんまり拘るとキリないけどw)
コマンドの主要な部分でどうしても非POSIXコマンドに頼らざる得ないとかならともかく
オプション解析っていう割と副次的な部分の機能を高めるが為にわざわざ標準から逸脱したくない。
(あんまり拘るとキリないけどw)
230デフォルトの名無しさん
2019/12/13(金) 19:51:43.71ID:ysGzQi5M あ、getoptが良いって言ってるわけじゃないよw
getoptはロングオプションが使えるってのは
一見良いように思えるけど、引数が長くなるから
getoptsが一文字なのは、あえてそうなってるかもなってこと
getoptはロングオプションが使えるってのは
一見良いように思えるけど、引数が長くなるから
getoptsが一文字なのは、あえてそうなってるかもなってこと
231デフォルトの名無しさん
2019/12/13(金) 19:55:08.60ID:ysGzQi5M あとgetoptsもgetoptもだけどさ
使うことでオプション解析って楽になってる?
使わないで独自解析してるのも見かけるけどそれと大差ないように感じる
何が嬉しくてgetoptsもgetoptを使うんだろう?
使うことでオプション解析って楽になってる?
使わないで独自解析してるのも見かけるけどそれと大差ないように感じる
何が嬉しくてgetoptsもgetoptを使うんだろう?
232デフォルトの名無しさん
2019/12/13(金) 21:32:49.16ID:oSsH2Kni そりゃ多少なりとも手間が省けるからじゃない?
たしかに結局whileやらcase文やら多用してるから大差ないように思えるけど
-abc←こういう一つのハイフンの後に複数のオプションが指定されている場合を考慮したり
オプション引数があるときはshiftする個数変えたり……
みたいなことは少なくとも俺のような頭の弱い人間には保守・管理しにくい。
経験上,getoptsが使われている場合は,
自前でオプション解析してる場合よりも常套的な構文が使われてる(もうほぼほぼwhileとcaseの入れ子)
から,gettoptsによるオプション解析の部分は読み飛ばしてもOKっていうのは気分が楽w
たしかに結局whileやらcase文やら多用してるから大差ないように思えるけど
-abc←こういう一つのハイフンの後に複数のオプションが指定されている場合を考慮したり
オプション引数があるときはshiftする個数変えたり……
みたいなことは少なくとも俺のような頭の弱い人間には保守・管理しにくい。
経験上,getoptsが使われている場合は,
自前でオプション解析してる場合よりも常套的な構文が使われてる(もうほぼほぼwhileとcaseの入れ子)
から,gettoptsによるオプション解析の部分は読み飛ばしてもOKっていうのは気分が楽w
233デフォルトの名無しさん
2019/12/14(土) 11:52:21.09ID:gTK06/8e POSIX man(開発段階)の仕様書に
各企業が「よりよいヘルプ体系」(“better help system”)を付け加えることに意欲的である
っていう文章があるんだけど
このよりよいヘルプ体系について具体的に論じてるページとか知りませんか。
各企業が「よりよいヘルプ体系」(“better help system”)を付け加えることに意欲的である
っていう文章があるんだけど
このよりよいヘルプ体系について具体的に論じてるページとか知りませんか。
234デフォルトの名無しさん
2019/12/14(土) 12:02:40.53ID:q2HhYeOb ドキュメントはもうウェブサイトで用意したほうが良いよ
235デフォルトの名無しさん
2019/12/14(土) 20:55:20.00ID:gTK06/8e236デフォルトの名無しさん
2019/12/14(土) 21:20:20.57ID:6YH7rFov オフラインダウンロード機能でもあればいいだけじゃん
manの表現力は低いわけだし、いまどき画像表示できるマシンを
誰だって持ってるのに、テキストベースに拘る必要はない
開発者とかろくにメンテしないし、多言語化なんてまず無理
wikipediaのマニュアル特化型みたいにして一元管理
MDNが特定のブラウザの特定バージョンでの実装まで書いてあるのと同じように
バージョン違いもLinux版とかBSD版の違いも全部網羅したほうが良いよ。
古いバージョンのドキュメントは、新しい機能のことまで書いてないしね。
ドキュメントは分離して最新のものを常に更新していったほうが良い
manの表現力は低いわけだし、いまどき画像表示できるマシンを
誰だって持ってるのに、テキストベースに拘る必要はない
開発者とかろくにメンテしないし、多言語化なんてまず無理
wikipediaのマニュアル特化型みたいにして一元管理
MDNが特定のブラウザの特定バージョンでの実装まで書いてあるのと同じように
バージョン違いもLinux版とかBSD版の違いも全部網羅したほうが良いよ。
古いバージョンのドキュメントは、新しい機能のことまで書いてないしね。
ドキュメントは分離して最新のものを常に更新していったほうが良い
237デフォルトの名無しさん
2019/12/14(土) 23:05:33.87ID:gTK06/8e まあ「いつのバージョンについていつ書かれたものか」みたいなのは簡単に確認できるようになるといいね。
RDFとか利用するとWebとの相性も良さそう。
RDFとか利用するとWebとの相性も良さそう。
238デフォルトの名無しさん
2019/12/15(日) 02:19:32.16ID:a0yEED8b >>237
バージョン間で違いが大きすぎるのは別として、
ドキュメント一つで全バージョンを網羅すべきだと思う
このオプションはバージョンいくつ以上から使用可能ですとか
ドキュメントにおいて存在すべきなのは最新のドキュメント一つのみ
バージョンや特定の実装に依存しない。
シェルでもdash用とかbash用とか別々に作るのは無駄だよ。
この機能はbash専用ですとか書いてあれば、一つ見るだけでよくなるし注意点もわかる
別々に作られてたら、あれこれdashで使えるんだっけ?とかなるし
バージョン間で違いが大きすぎるのは別として、
ドキュメント一つで全バージョンを網羅すべきだと思う
このオプションはバージョンいくつ以上から使用可能ですとか
ドキュメントにおいて存在すべきなのは最新のドキュメント一つのみ
バージョンや特定の実装に依存しない。
シェルでもdash用とかbash用とか別々に作るのは無駄だよ。
この機能はbash専用ですとか書いてあれば、一つ見るだけでよくなるし注意点もわかる
別々に作られてたら、あれこれdashで使えるんだっけ?とかなるし
239デフォルトの名無しさん
2019/12/15(日) 03:19:52.38ID:woT0VW+T240デフォルトの名無しさん
2019/12/15(日) 04:20:02.09ID:3SLEzfiL241デフォルトの名無しさん
2019/12/15(日) 04:35:07.70ID:a0yEED8b >>240
wikipedia方式で良いんじゃね?
wikipedia方式で良いんじゃね?
242デフォルトの名無しさん
2019/12/15(日) 10:01:39.28ID:E44EqLgR Wikipedia方式ってのがよく分からんけど
かなり自由に編集できて,既定で最新版が表示されるけど変更履歴が辿れるっていう方式ならいいね。
↑これはwiki全般に言えることだから寧ろコマンドwikiって言ったほうが適切か。
で,Wikipediaの方針をもっと厳しくして
様式を完全に統一したり典拠や変更コメントを必須にしたりしたら
自由に編集できる利点はそのまましっかりした文書になりそう。
という訳で誰かそういうwiki作ってw
かなり自由に編集できて,既定で最新版が表示されるけど変更履歴が辿れるっていう方式ならいいね。
↑これはwiki全般に言えることだから寧ろコマンドwikiって言ったほうが適切か。
で,Wikipediaの方針をもっと厳しくして
様式を完全に統一したり典拠や変更コメントを必須にしたりしたら
自由に編集できる利点はそのまましっかりした文書になりそう。
という訳で誰かそういうwiki作ってw
243デフォルトの名無しさん
2019/12/15(日) 11:36:59.02ID:pTp+dpJs 必要性を感じた者がやるんだよ! 頑張れ!
244デフォルトの名無しさん
2019/12/16(月) 00:44:09.03ID:5wUpgmce 日本語manだけ更新日が1990年代
英語manだけなぜかBSD版
--helpと言ってることが違う
これ食らってから正直manには期待していない
infoの日本語化って無理なのか?あっちも使いにくいが
英語manだけなぜかBSD版
--helpと言ってることが違う
これ食らってから正直manには期待していない
infoの日本語化って無理なのか?あっちも使いにくいが
245デフォルトの名無しさん
2019/12/16(月) 07:48:45.99ID:4GuGuHT1 逆になぜinfoは信頼できると思ったのか
246デフォルトの名無しさん
2019/12/17(火) 13:48:36.21ID:BxEORdhA infoを使用すると完全なマニュアルを読むことができるはずだ。ってmanにあるくせにそれ言うのか
247デフォルトの名無しさん
2019/12/17(火) 22:02:31.85ID:kdkfgKcy >>244
なければ作るとよい
なければ作るとよい
248デフォルトの名無しさん
2019/12/18(水) 18:56:56.67ID:Cw3S1jU2 manはそんなに難しい英語ではない
マニュアルとしてはとてもよく書けている
これを英語で読めないんだと、そもそもマニュアルを
読み取るのが難しい国語レベルかと
マニュアルとしてはとてもよく書けている
これを英語で読めないんだと、そもそもマニュアルを
読み取るのが難しい国語レベルかと
249デフォルトの名無しさん
2019/12/18(水) 19:39:48.69ID:uFDqtnkl 日本語の問題とman自身の問題は別の話でしょう?
英語圏の人がmanを使ったときの問題は
テキストベースだから使いづらい。
HTMLではないから使いづらい。
画像がないから分かりづらい。
そういった点でしょう?
日本語の問題はワークフローの問題だよ。
まず世の中英語と日本語だけじゃない無数に言語がある。
アプリの新バージョンを作ったときに翻訳してからじゃないとリリースできない
ってのは無いと思うし、翻訳だけしたらバージョンアップというのもおかしな話
(例えば--helpの内容とか)
アプリとそのマニュアルは本来別でリリースすべきなんだろう
英語圏の人がmanを使ったときの問題は
テキストベースだから使いづらい。
HTMLではないから使いづらい。
画像がないから分かりづらい。
そういった点でしょう?
日本語の問題はワークフローの問題だよ。
まず世の中英語と日本語だけじゃない無数に言語がある。
アプリの新バージョンを作ったときに翻訳してからじゃないとリリースできない
ってのは無いと思うし、翻訳だけしたらバージョンアップというのもおかしな話
(例えば--helpの内容とか)
アプリとそのマニュアルは本来別でリリースすべきなんだろう
250デフォルトの名無しさん
2019/12/19(木) 10:03:23.50ID:y7Q/2NKF マニュアルとプログラム本体が一緒くたにされてる今でもマニュアルの内容が古いとか
書いてることと実際の動作が違うとか問題が多発してるのに
分けようなんて言いだしたらもはや二者の乖離が酷すぎて、だれもマニュアルなんて読もうとしなくなる
……っは!もしやそれが狙いか?w
書いてることと実際の動作が違うとか問題が多発してるのに
分けようなんて言いだしたらもはや二者の乖離が酷すぎて、だれもマニュアルなんて読もうとしなくなる
……っは!もしやそれが狙いか?w
251デフォルトの名無しさん
2019/12/19(木) 11:24:35.20ID:belDjs1+ まぁ指摘される度にお前がやれだの英語で読めだの言うけどそれ諦めてるよね
逃げ口上というか捨て台詞というか負け惜しみというか
逃げ口上というか捨て台詞というか負け惜しみというか
252デフォルトの名無しさん
2019/12/19(木) 16:35:50.82ID:jArWapvD OSS
言い出しっぺがやるというだけだろ
指摘ってなにが目的なんだか。俺がか?
言い出しっぺがやるというだけだろ
指摘ってなにが目的なんだか。俺がか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国「日本で中国人への犯罪が多発」 日本側の否定に「先週も5人逮捕」と反論 [夜のけいちゃん★]
- 円安で増加の風俗目的の中国人インバウンド 客に処罰規定なし、悲しき売春観光大国の現状 [蚤の市★]
- 【文春】元TOKIO・国分太一(51)「女性スタッフ2名への“わいせつ事案”」日テレ事情聴取の全貌が分かった! ★6 [Ailuropoda melanoleuca★]
- 【サッカー】UEFA-CL第5節 アーセナル×バイエルン、PSG×トッテナム、リバプール×PSV、オリンピアコス×レアル [久太郎★]
- 首相、台湾有事答弁で釈明に終始 政治とカネには「そんなことより」 [蚤の市★]
- 【金沢地裁】「風俗嬢に着せようと」南砺の高校で女子バレー部のユニホームを窃盗した男が説明 検察側、拘禁刑4年を求刑 [nita★]
- 【ヤバい】 政府「所得税を上げる。 5兆4000億円の税収になる」 予算案を発表😨😱😭 [485983549]
- お前らチー牛ってなんで憎くて嫌いな奴を殺害しないの?ビビって出来ないならいい加減その性格直そうよ
- 【高市 朝8時】 肥満の全裸 、 公園に発生 [485983549]
- 【高市悲報】中国「ふにゃふにゃ言いながら、時が自然に解決するのを期待する—そんなジャップ流は決して通用しない」 [115996789]
- 百田尚樹「日本は税金が高すぎる。私はそれほど大金持ちではないが、毎年収入の55%を納税している。江戸時代の農民以下の扱いだ」 [309323212]
- 【悲報】撮り鉄が線路脇で撮影→運転手が降りて退去を促すもゴネて動かず電車が遅延→どっちが悪いか意見が真っ二つに [802034645]
