[過去ログ] シェルスクリプト総合 その32 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
101: 2019/11/30(土)00:53 ID:KUL76oc2(1) AAS
オプションに -e robots=off -U mozilla でも付けてみたら上手く行くかも
102: 2019/11/30(土)00:54 ID:czFcPKLy(1) AAS
碌に調べずの返答でアレなんだが多分訪問先のサイトがファイル一覧
を返すのを禁止してる(apache httpd だと Indexes オプションが有効
になってない)からだと思う
103: 2019/11/30(土)13:20 ID:f33nsdyy(1) AAS
リファラの偽装が必要かも。知らんけど
104: 2019/11/30(土)16:49 ID:mvBIEviw(1) AAS
googleはbashがデフォルト
105
(1): 2019/12/01(日)11:47 ID:0pH8jk7+(1) AAS
bash/zsh依存しまくりで
外部リンク:wandbox.org

そんなのが仮に必要でも
trap 'date -R' USR1

for (( i=1 ; i <= 10 ; i++ )); do
( sleep $i; kill -USR1 $$ ) &
done

wait
でいいだろとしか思わんけどw
106: 2019/12/01(日)19:22 ID:IoGKXgrY(1) AAS
>>91
tim_flgをゴミ扱いしたこいつがソフトタイマを理解していない。
107: 2019/12/01(日)19:49 ID:YWi4MX0G(1) AAS
このサンプルでは1固定なんだからゴミやろ
108
(1): 2019/12/02(月)22:02 ID:9nn8K+iP(1) AAS
親ディレクトリ
-子ディレ クトリ(1)
 file(1).txt
 file ().txt
-子デ ィレクトリ(2)
 file(2) .txt
-子ディレクトリ(3)
 fil e(3).txt

ディレクトリとファイル名の半角スペースと半角の()を_で置換したいのですが
どうやればいいのでしょうか
省13
109: 2019/12/02(月)22:13 ID:cDa5fVnx(1/2) AAS
そういう用途なら、forとかlsとか使わないでfind使え
110: 2019/12/02(月)22:15 ID:cDa5fVnx(2/2) AAS
いきなりstatがでるような事はやめて、
echo mv なんとか かんとか で実行命令を表示するようにしろ
怖すぎるわ。それやればなんとかなるだろ
111
(1): 2019/12/02(月)22:19 ID:agtAae1a(1) AAS
rename 関係はperlで試せる dry run 作ってる
外部リンク:pastebin.com
touch "file(1).txt"; ~/bin/rename.pl dry 'tr/[()]/_/' *txt
file(1).txt => file_1_.txt

~/bin/rename.pl run 'tr/[()]/_/' *txt; ls
file_1_.txt
112
(1): 2019/12/02(月)22:46 ID:RT0MauQR(1) AAS
find . -name '*[ ()]*' -print | sort -r | while read item; do
mv "$item" "${item%/*}/$(echo "${item##*/}" | tr ' ()' '_')"
done
113
(3): 2019/12/03(火)07:24 ID:v9g/lO5M(1/4) AAS
Ruby で作った。
コードは次のレスに書く

DryRun を使ったので実際には、変更されない

ファイル/ディレクトリは、同時に変更すると、バグるかも知れないので、別々に変更する。
また「子ディレクトリ(1)/孫ディレクトリ(1)」のように、2か所以上同時に変更すると、バグるかも知れない

こんな複雑なものを、シェルスクリプトで書くのは超危険!

特に移動は、dest が存在するときは移動になり、
存在しないときは変更になるという、極めて難しい場合分けが必要で、
省2
114: 113 2019/12/03(火)07:25 ID:v9g/lO5M(2/4) AAS
require 'fileutils'

root_dir = "C:/Users/Owner/Documents/Ruby/test/**/*" # 基準ディレクトリ

# 変更前のファイル/ディレクトリを入れる配列
src_files = [ ]; src_dirs = [ ]

# 基準ディレクトリ以下のファイル/ディレクトリを取り出して、配列に入れる
Dir.glob( root_dir ) do |path|
case
when File.file?( path ) then src_files.push ( path )
when File.directory?( path ) then src_dirs.push ( path )
else # 処理しない
省14
115: 2019/12/03(火)08:29 ID:ujGDA/f+(1/2) AAS
なんかかえってめんどくさいことしてんな。perlでめんどくさく書きたいだけ?
116: 2019/12/03(火)08:29 ID:ujGDA/f+(2/2) AAS
perlではなくrubyか。しつれい
117: 113 2019/12/03(火)09:46 ID:v9g/lO5M(3/4) AAS
mv を作った奴は、頭おかしいw

dest が存在するときは移動になり、
存在しないときは名前の変更になるという、極めて難しい場合分けが必要だから

漏れらが欲しいのは、
rename だけする関数と、移動するだけの関数の、2つに分かれている関数

それが分かれていないから、自分で処理を分けて、
かなりチェックしないと、バグってしまう
118: 2019/12/03(火)12:17 ID:5ZiHQIvd(1) AAS
つまり自分に都合が悪い仕様=バグ
119: 2019/12/03(火)12:28 ID:Uh1tIUQA(1) AAS
一括リネームってたいてい複雑になるから
GUIツールを使ったほうが良いと思うんだよね

Windows 10版のPowerToysにリネーム機能が追加
外部リンク[html]:pc.watch.impress.co.jp
120
(1): 2019/12/03(火)18:09 ID:+zVWCKlo(1/2) AAS
>>112
Fix(IFS文字が頭と末尾にある場合。dirname,basenameにしたのは気分)&Variation
find . -name '*[ ()]*' -print | sort -r | (IFS=''; while read item; do
mv "$item" "$(dirname "$item")/$(basename "$item" | tr ' ()' '_')"
done)

find . -name '*[ ()]*' -print | sort -r | (IFS=''; while read item; do
dir="$(dirname "$item")"; newname="$(basename "$item" | tr ' ()' '_')"; newpath="$dir/$newname"
[ ! -e "$newpath" ] && mv "$item" "$newpath" || echo "can't rename $item, exists $newname" >&2
done
# can't rename $item 〜 メッセージは単なる目安
省12
121: 2019/12/03(火)18:14 ID:+zVWCKlo(2/2) AAS
>>120
誤 ext="${newname#*.}"
正 ext="${newname##*.}"
122
(2): 2019/12/03(火)18:30 ID:HnkJN8FN(1) AAS
>>111
rename自体がperlだしちゃんと試行もあるけど
123: 2019/12/03(火)19:27 ID:mUaHu9IR(1) AAS
>>122
perl ワンライナーより
dry run のスイッチと
どのように変更させるかに集中し
出力確認などの余計なことは共通する定型処理だから
コードにまとめたほうが使いやすい
124: 2019/12/03(火)19:44 ID:R2wB6lmg(1) AAS
Linuxディストリによっては標準で入っている、perlスクリプトで作られたrenameコマンドのことだろ
125: 2019/12/03(火)20:48 ID:jDo5c24e(1) AAS
renameは標準で入ってないとはいえ
テスト無しの自作コードでやるような処理じゃないやろ
find -depth -exec rename -nでdry-runしてから-n消せばいい
126: 2019/12/03(火)21:32 ID:yTVXI633(1/2) AAS
話のネタから外れて何を主張したいのだか
127: 2019/12/03(火)22:25 ID:yTVXI633(2/2) AAS
dry-runって言っても結局ひとつをrename/mvするその時点での状態でしか判断してないし、mvコマンドの前にecho付けるのと何が違うのだか
[ "$1" = "-n" ] && nac=echo || nac=''
$nac mv ...
でスイッチにしたけりゃ同じようにできるだろし
極めて難しいらしいことも結局時点での存在チェックしてるだけで、シェルスクリプトでtestを使うのと何がそうも極めて難しいほど違うのか

>>122
既に存在してたらエラー(オプションによって強行もできる)でもあるよね
The original C<rename> did not check for the existence of target filenames,
so had to be used with care. I hope I've fixed that (Robin Barker).
って、わざわざコメント書くようにな目玉なw
省1
128: 113 2019/12/03(火)23:09 ID:v9g/lO5M(4/4) AAS
Windows10, WSL, Ubuntu 16.04 にも、/usr/bin/rename がある

この手の処理の何がヤバイかと言うと、

例えば、3つ目の処理で、エラーが出ると、
2つ目までは、変更されてしまっているから、
そこから再実行すると、最初から実行していた時と、初期条件が変わっている

データベースと同じで、一部分だけ更新されたような、中途半端な状態になってはいけない(一貫性)。
エラー時には、すべてをロールバックするべき。
または、全体のバックアップを取っておく

すべてを更新するか、すべてをロールバックするのどちらかの状態だけにする
129: 2019/12/03(火)23:14 ID:50yNXJCt(1) AAS
自作コードがそれ以下なのになにを言っているのだか
130: 2019/12/04(水)00:03 ID:LOcDYH/A(1) AAS
>>108
まだ見てくれてる? 変更するんじゃなくて新たに作るほうが無難だと思うよ。
新たに作るといっても通常ファイルはハードリンクできるからね。
実際にやってみたよ。

$ find a
a
a/a (0)
a/a (0)/a (00)
a/a (0)/a (01)
a/a (1)
省18
131: 2019/12/04(水)02:51 ID:hySlbdZs(1) AAS
pax -rwlpe src dst
132
(3): 2019/12/04(水)23:27 ID:xn8KyTI4(1) AAS
renameコマンドって複数ないか?
's/パターン/置換文字/' FILEとパターン 置換文字 FILEとサイトによって説明違うんだよな
俺が散らばったファイルをリネームする時はmoreutilsのvidir使ってるけど
テキストエディタで修正する奴な
133: 2019/12/05(木)00:34 ID:0uggokQM(1/4) AAS
Larry Wall and Robin Barker版とそれの機能拡張版のAristotle Pagaltzis版じゃね
Aristotle Pagaltzisで増えた -s パターン 置換文字 FILE 使ってじゃないの
134: 2019/12/05(木)11:01 ID:3XJjcX6a(1) AAS
>>132
util-linux版とperl同梱版(これはさらにいくつかに分かれる)の違い
debian/ubuntu なら前者rename.ul後者rename(Larry Wall版)
centos なら前者rename後者prename(Peder Stray版)
135: 2019/12/05(木)11:02 ID:6ZFP3Xq2(1) AAS
>>132
Debian系はPerl付属のprename、
CentOS系はutil-linuxのrename.ulをrenameとして使ってるらしい
そら人によって言ってることが違う筈だ
136: 2019/12/05(木)15:05 ID:0uggokQM(2/4) AAS
Larry Wall
- Robin Barker, 重複時実行しない、 重複時実行強制実行オプション
-- Aristotle Pagaltzis, 機能いろいろ (>>132 のはそのうちの -s/--subst from to じゃないの)
- Peder Stray, 重複時バックアップオプション
Aristotle Pagaltzis意外はそんなに変わらんかな。Aristotle Pagaltzisで追加した機能を使わなければAristotle Pagaltzisも

外部リンク:github.com
Debian prename from pkg perl: Robin Barker & Larry Wall.
Debian/Ubuntu file-rename from pkg file-rename: Larry Wall.
Arch perl-rename from pkg perl-rename: Peder Stray (same as Fedora).
Fedora prename from pkg prename: Peder Stray (same as Arch).
省2
137
(2): 2019/12/05(木)15:14 ID:TzSLtKO4(1/2) AAS
たぶん基本的なことだと思うんですが、教えてください。

#!/bin/bash
echo -e \
'Hostname\tIP\tInterface\tVlan\tMode\tPort-Channel\tAllowed\sVlan\tDescription'\
> cp.tsv

このスクリプトを実行すると…

$cat cp.tsv
-e Hostname IP Interface Vlan Mode Port-Channel Allowed Vlan Description

このように、先頭に-eが入ってしまいます。なぜでしょう…?
138
(1): 2019/12/05(木)15:19 ID:0uggokQM(3/4) AAS
Perl同梱(?)のprename/file-renameがLarry Wall版か
Ubuntuで pkg rename (pkg file-rename??)を入れるとprename/file-renameもLarry Wall and Robin Barker版に上書きされる感じかな??
139: 2019/12/05(木)15:21 ID:0uggokQM(4/4) AAS
>>138
いや、違った
Perl同梱(?)のprename/file-renameもLarry Wall and Robin Barker版か
140
(1): 2019/12/05(木)15:22 ID:WdOnkWYr(1) AAS
>>137

そのスクリプトを x.sh だとして、

$ /bin/sh x.sh

とかして実行したんじゃない?
141
(1): 2019/12/05(木)15:55 ID:Gb1I+/8K(1) AAS
>>137
-eをオプションとして扱うかどうかはシェルによって違う。
bashはオプションだが、dashはオプションではなくただの文字列
142: 2019/12/05(木)15:58 ID:TzSLtKO4(2/2) AAS
>>140-141
あ、ほんとだ。
sh -xで実行してました。
bash -xだと大丈夫でした。
シェバン付けてるから大丈夫だと思い込んでました。ダメなんですね。
横着せずにきちんと打つようにします。

ありがとうございました!
143: 2019/12/06(金)20:34 ID:08yg4gJX(1) AAS
宇宙刑事シェバン
144: 2019/12/10(火)22:30 ID:zD6aLrgM(1) AAS
x-y
↑こういう形式の,ハイフンで結ばれた二つの数字の計算結果の正負だけを知りたいのですが,
なるべく処理が早い方法ないですか。
対象の文字列は標準出力ではなくて変数に格納されています。

思い付いたのは
[ ${var%-*} -lt ${var#*-} ]

$((var < 0))
です。
どっちもPOSIXには準拠している筈ですが,同じような処理を大量に繰り返すとどうしても遅くなります。
省2
145
(1): 2019/12/10(火)23:18 ID:kdXCWOtW(1/5) AAS
$((var < 0))はPOSIX準拠じゃなくね?

やるなら [ $(($var)) -lt 0 ] こうだろうけど
それでも遅いって言うならどうしようもないと思うが、
気になるほど遅いなら別のところに問題があるんじゃね?
146
(4): 2019/12/10(火)23:24 ID:kdXCWOtW(2/5) AAS
ちなみにうちのマシンだとこんな感じ

$ time sh -c 'var=1-2; i=0; while [ $i -lt 1000000 ]; do [ $(($var)) -lt 0 ]; i=$((i+1)); done'

real 0m2.722s
user 0m2.718s
sys 0m0.004s

100万やって3秒、1万回だと0.03秒。これが気になるとしたら
相当多くの数の計算をしてることになるはずなんだが本当に?
147: 2019/12/10(火)23:25 ID:SL+fGedD(1) AAS
echo "$var<0"|bc
148: 2019/12/10(火)23:28 ID:kdXCWOtW(3/5) AAS
bcプロセス起動してるから遅い
それは実行しなくてもわかる
149: 2019/12/10(火)23:50 ID:kdXCWOtW(4/5) AAS
あとオマケ、速いとは思えないけど

IFS=-
var=1-2
set -- $var
echo $1 # 1
echo $2 # 2

これを使ってもできる。
速さは [ ${var%-*} -lt ${var#*-} ] とどっこいどっこいだろうな
もしかしたらset使ったほうが速いかもしれない程度
150
(2): 2019/12/10(火)23:51 ID:LOypIkS3(1) AAS
>>146
それ100万やったら50秒かかったわ
10万で5秒だしawk使うわ
151
(1): 2019/12/10(火)23:59 ID:kdXCWOtW(5/5) AAS
>>150
えらい遅いなw
俺のなんて2012年発売のCPUだぞ。
i7 3770。3.40Ghz(ブースト時で3.9Ghz)
152
(1): 2019/12/11(水)00:00 ID:ivhCTlPt(1/2) AAS
i7 3.4Ghzって今どき低スペックなのか?
ハイスペックかと思ってた
153
(1): 2019/12/11(水)00:00 ID:5YQOA1oq(1/9) AAS
>>150
awkつかうなら、awkのコード書いてみてくれ
実行してみる。
154
(1): 2019/12/11(水)00:03 ID:5YQOA1oq(2/9) AAS
>>152
スペックは低くはないと思うけどさ、もう古いし
中古だと2〜3万円台で搭載パソコンを買えちゃうよ
外部リンク[php]:used.dospara.co.jp
155: 2019/12/11(水)00:11 ID:ivhCTlPt(2/2) AAS
>>154
凄い時代になったなw
いつのまにか皆さんハッピーになってた
156
(1): 2019/12/11(水)00:15 ID:rj8eSq0k(1) AAS
バックグラウンドで色々動きっぱなし(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遅すぎ・・・
157: 2019/12/11(水)00:21 ID:5YQOA1oq(3/9) AAS
>>156
うちもcygwinだとそんな感じだわw msysも
WSLは全然速度変わらないのにな

本質的にCPUだけで処理できる内容のはずだが
なにかシステムコール呼び出してるんだろうな
158
(1): 2019/12/11(水)00:26 ID:H3x5MOt+(1/2) AAS
>>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秒くらいになる
159: 2019/12/11(水)00:40 ID:5YQOA1oq(4/9) AAS
>>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
省1
160: 2019/12/11(水)00:40 ID:H3x5MOt+(2/2) AAS
ランダムな引き算生成するawkバージョン

$ awk 'BEGIN{srand(); for (i=0; i<1000000; ++i) {print int(rand()*1000)"-"int(rand()*1000)}}' > input.txt
161: 2019/12/11(水)00:46 ID:5YQOA1oq(5/9) AAS
お、こっちの方がわずかに速かった。スクリプトで計算させるよりも読み込み時に分割させたほうが良いんだろうな。
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 ID:mRJcWm57(1) AAS
$ 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
163: 2019/12/11(水)00:54 ID:5YQOA1oq(6/9) AAS
> 対象の文字列は標準出力ではなくて変数に格納されています。

お前らこの条件忘れてるだろw
164
(1): 2019/12/11(水)01:39 ID:5YQOA1oq(7/9) AAS
うーん、よく考えるとこれ実際の要件を想定して
「それぞれのコマンドを使って処理をした結果を元に続きの処理をする」となると
差があまりなくなってしまうかもしれん

$ 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
省5
165
(1): 2019/12/11(水)01:44 ID:5YQOA1oq(8/9) AAS
$ 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
166: 2019/12/11(水)01:47 ID:5YQOA1oq(9/9) AAS
結果をファイルに吐き出すだけなら良いんだけどね、
その結果をシェルスクリプトを使って処理する場合の話
167
(8): 2019/12/11(水)03:39 ID:MgOCMEvC(1/3) AAS
>>151
今年出た i5 9500
プロセッサー・ベース動作周波数 3.00 GHz
ターボ・ブースト利用時の最大周波数 4.40 GHz
あんまり変わらない気がする

シェルスクリプトなんかスレッド使わないだろうし
168
(1): 2019/12/11(水)07:28 ID:hRzITiR9(1/6) AAS
>>167
スレッドバリバリ使ってるぞw
| つかうと必然的にスレッドになるしな
169
(1): 2019/12/11(水)08:22 ID:6UY8oXji(1/2) AAS
>>145
外部リンク[html]:pubs.opengroup.org
によると
外部リンク[html]:pubs.opengroup.org
の一覧の内,sizeof()函数,++及び--単項演算子,Selection・Interation・Jumpは実装しなくてよい
とあるから>はPOSIXの範疇だと思います。
170
(2): 2019/12/11(水)12:44 ID:MgOCMEvC(2/3) AAS
>>168
そりゃプロセスだろ
171
(1): 2019/12/11(水)13:32 ID:hRzITiR9(2/6) AAS
>>170
今はCPUの話だからハイパースレッディングのスレッドだろう
172
(1): 2019/12/11(水)13:55 ID:hRzITiR9(3/6) AAS
>>169
POSIX準拠じゃないのでは?と言ってるのは
$((var < 0)) のvarは数値限定ってところだよ
173
(1): 2019/12/11(水)15:18 ID:++mq81bA(1/4) AAS
>>171
> | つかうと
じゃないの。普通は子プロセスだろう
174
(1): 2019/12/11(水)15:22 ID:++mq81bA(2/4) AAS
プロセスが別のコアで動くとかか??
スレッドをハイパースレッディングのスレッドを指すなんて初めてみた
175
(1): 2019/12/11(水)15:28 ID:hRzITiR9(4/6) AAS
>>173
文句は>>167に言ってくれ。合わせただけ
176: 2019/12/11(水)15:29 ID:hRzITiR9(5/6) AAS
>>174
普通にCPUの所に4コア8スレッドって書いてあるからさ
外部リンク[aspx]:kakaku.com
177: 2019/12/11(水)15:39 ID:++mq81bA(3/4) AAS
そこまで出されるとマジでスレッドという意味で使ってたんだな
OSも知らないスレッドだろう、OSから見てもただのコアだろう
178: 2019/12/11(水)15:46 ID:hRzITiR9(6/6) AAS
>>167涙目www

でよろしいか?
俺に言うなって
179: 2019/12/11(水)15:55 ID:++mq81bA(4/4) AAS
一行目なんて書かなきゃならないのね
>>167もそんなスレッドのことを言ってないだろうに。なんでかなw

プロセスじゃなくスレッドならプロセス起動する無駄時間がないとかそういう意味でのだろうし、そもそもスレッドはそういうために
元々のネタがプロセス起動にどれだけ食われてるのかという話だな、するなら
180: 2019/12/11(水)16:11 ID:6UY8oXji(2/2) AAS
>>172
なるほど。確かに準拠してませんでした,すいません。
181
(1): 2019/12/11(水)20:23 ID:MgOCMEvC(3/3) AAS
>>175
いや、あってないから
勘弁してくれ
182
(1): 2019/12/12(木)01:47 ID:4Chv4WTd(1) AAS
>>181
シェルスクリプトでスレッドってどういう事?
スレッド使わなくてもコアは使うじゃん。
183
(2): 2019/12/12(木)02:33 ID:NtLqNRlV(1/3) AAS
>>182
なんでオレに聞くんだよ
シェルスクリプトはスレッド使わないって当然のこと言っただけじゃないか
なんで頭悪い奴が絡んでくるんだよ気持ち悪いな
184
(2): 2019/12/12(木)02:40 ID:n05Ewb3K(1/2) AAS
CPUのスペック比較とシェルスクリプトでスレッド使わないという話とどう関係あるの?
新しいCPUはOSスレッドを効率的に実行できる機能でもあるの?
185: 2019/12/12(木)03:38 ID:g+q4RhTJ(1/2) AAS
そうだよな。CPUの話をしていたのに
なんでスレッド使うかどうかの話をしたのかだよな

> 今年出た i5 9500
> プロセッサー・ベース動作周波数 3.00 GHz
> ターボ・ブースト利用時の最大周波数 4.40 GHz
> あんまり変わらない気がする
>
> シェルスクリプトなんかスレッド使わないだろうし
186
(1): 2019/12/12(木)03:41 ID:g+q4RhTJ(2/2) AAS
スレッド使わなくてもコア使うから関係あるだろって言えばよかったのか?
i5 9500の名前を出したのは、コア6スレッド6だからだろ?
187: 2019/12/12(木)08:10 ID:NtLqNRlV(2/3) AAS
>>184
最新のCPUにしたところで周波数がちょっと早くなった程度で差が無いって話

新しいCPUは同時実行スレッド数が増えてるとか言う奴がいるけどシェルスクリプトには関係ないだろ?
「どう関係あるの? 」とか言われても「関係ない」って最初から書いてんのに読めない訳?
188
(2): 2019/12/12(木)08:11 ID:NtLqNRlV(3/3) AAS
>>186
頭悪いなー
シェルスクリプトで使うのは1コアだけだろうが
189: 2019/12/12(木)09:49 ID:AVYkL4QT(1/17) AAS
本気でシェルスクリプトとコアが関係ないと思ってるのか?
パイプ使ったら複数コア使うことになるんだが

例えばcat ファイル名 | grep なんとか ってやると
catのファイル表示と、grepが並列で動く

あとバックグラウンド実行もあるよね

自分が並列で動くものを書いてないからって、
シェルスクリプトと並列が関係ないわけじゃないだろ
自分が書かないって話をするならC言語だってコアは関係ない
190: 2019/12/12(木)09:52 ID:AVYkL4QT(2/17) AAS
あと、xargsとかGNU parallelとか
191
(1): 2019/12/12(木)10:19 ID:mtFqZIGW(1/2) AAS
それはプロセスレベルの並列化のお話。スレッドの話はどこいった?
192: 2019/12/12(木)10:24 ID:AVYkL4QT(3/17) AAS
シェルスクリプトで外部コマンドを使わない場合の話でもしてるのか?

シェルスクリプトでパイプを使わないならコアは関係ない!
そんな事ありえないけど関係ないんだ!
みたいな話したってしょうがないだろ

それにパイプ使うのは foo | bar | baz みたいなシェル関数でも使えるし
シェル関数の中身はそれぞれこんな感じな
while read line
do
 省略
done < ファイル名
省1
193: 2019/12/12(木)10:24 ID:AVYkL4QT(4/17) AAS
>>191
今はCPUコアの話
194
(1): 2019/12/12(木)12:23 ID:NxSFhA/k(1/3) AAS
>コア6スレッド6だからだろ
それを言うならスレッド12だろ。ハイパースレッディングでスペック表すときの論理コア数をスレッドと言っているにすぎないだろうに
いつものやつが絡んでるだけだろうな、すぐに話を逸らすことからも
195
(3): 2019/12/12(木)12:43 ID:NxSFhA/k(2/3) AAS
>>183
まあ、シェル自体はスレッドを使ってることもあるだろう、いまどき
シェルスクリプトを書いてどこがスレッドとか全然わからん、どうスクリプト書けばスレッドになるのかなんて全然わからないとこではあるので、そういう意味ではスレッド使わないと言えるだろうけど

また、>>146にスレッドの効果なんて期待できないだろう。子プロセスがんがん起動しているわけでもなさそうだし、並列化なんてできそうもないスクリプトのようだからね

使ってる環境のshの実態がなんによるかが大きいんじゃないのかな?bashはかなり遅い感じかなあ
196: 2019/12/12(木)12:57 ID:NxSFhA/k(3/3) AAS
>>195,183
>まあ、シェル自体はスレッドを使ってることもあるだろう、いまどき
いや、いまどきも1シェルプロセスは1スレッドしかなのか。仮にスレッド使う場合があったとしてもどういう場合というのはわからんな
確認せずにいまどきならと書いた、すまん
197
(1): 2019/12/12(木)16:08 ID:AVYkL4QT(5/17) AAS
>>194
i5 9500は6コア6スレッド
なんでこういつも思い込みで発言するかな?

URL貼れないから「インテルR Core? i5-9500 プロセッサー」からググれ
198: 2019/12/12(木)16:10 ID:AVYkL4QT(6/17) AAS
>>195
OSのスレッドは使ってなくても、
CPUのコア数が多ければ、シェルスクリプトでそれを使えるから
コア数の数はシェルスクリプトでも意味があるよって話
199
(1): 2019/12/12(木)16:11 ID:AVYkL4QT(7/17) AAS
>>105
> なんでこういつも思い込みで発言するかな?
そりゃそうやろw

ただの1-2の計算なんか、どんな言語使っても
スレッドの効果なんてねーよw
言語じゃなくてやる処理の問題
200: 2019/12/12(木)16:24 ID:AVYkL4QT(8/17) AAS
ちなみに>>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'
1-
あと 802 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.275s*