シェルスクリプト総合 その29
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ 3efb-m2E0)
垢版 |
2018/09/22(土) 11:53:21.38ID:BBiLRgnj0
!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512
シェルスクリプトに関する総合スレッドです。

スレ立て時は以下の文を先頭行に加えて下さい。
後のつけ忘れ防止の為に複数行重ねて追加推奨
!extend:on:vvvvv:1000:512

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。

前スレ
シェルスクリプト総合 その28
http://mevius.5ch.net/test/read.cgi/tech/1532397676/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
0282デフォルトの名無しさん (ワッチョイ 269f-nBLa)
垢版 |
2018/10/22(月) 02:54:50.03ID:HyPH6OEy0
>>280
じゃ、find で。
ファイルのパーミッションに 066 を and した時に 0 になるやつでいいのなら
find $dir -prune ! -perm -40 ! -perm -20 ! -perm -4 ! -perm -2 -exec やらせたいこと \;
のようにすればいいのではないかな。
http://pubs.opengroup.org/onlinepubs/9699919799/ で find コマンド見てみたら -perm はあるようなので。
もし GNU の find コマンド使えるようなら -perm /mode が使えて、これは何れかのビットが立っていれば
真になるので ! -perm /66 の一つで出来ると思う。
0284名無しさん@そうだ選挙に行こう! Go to vote! (アウアウウー Sa9f-L0SM)
垢版 |
2018/10/22(月) 10:18:21.67ID:8WYgXfgna
その辺はご自由に。POSIX縛りがあってもこの場合にfindも使えるってだけの話なので。ls使いたいならそうすればいい。
0286デフォルトの名無しさん (JP 0H1b-v9b0)
垢版 |
2018/10/22(月) 16:55:54.61ID:9s+yFzz3H
>>281
2.1の5で、リダイレクトの処理をしてパラメーターリストから
除去するって書いてあるのと、
6でコマンド名を第0パラメーターとして渡すって書いてるってことは、
先頭もパラメーターリストの一部と解釈できるから、
暗に、先頭にリダイレクトがあってもいいってことを表してるんでは?
0289デフォルトの名無しさん (ワッチョイ ea98-Pr2h)
垢版 |
2018/10/22(月) 21:35:03.82ID:oF7wf0Ce0
>>118
それはオブジェクト指向の話じゃない
C++の話だ

そもそもテンプレートやジェネリックは、型を明確にすることでバグを少なくしたり
速度を速くするためのもので、オブジェクト指向における問題点を解決するための追加機能

テンプレートやジェネリックを使うことでオブジェクト指向が不要になるのではなく
オブジェクト指向と組み合わせて使うことで問題点が改善される

テンプレートはオブジェクト指向と組み合わせずに使えたと思うが、
テンプレートの殆ど(ジェネリックは全て)はオブジェクト指向なしに使うことはできない
0292デフォルトの名無しさん (アウアウウー Sa9f-L0SM)
垢版 |
2018/10/23(火) 13:27:19.16ID:QwHjyvjPa
シェルというか tar コマンドの問題なんだけど、tar tvf でアーカイブに入っているファイルのタイムスタンプを秒単位まで出す方法ある?
Linux で GNU tar のmanページ見た感じではなさそうなんだけど、やはり自作するしかないなかな。
0294デフォルトの名無しさん (アウアウウー Sa9f-L0SM)
垢版 |
2018/10/23(火) 14:38:56.39ID:QwHjyvjPa
>>293
おお!ありがとう。新しい GNU tar にあるね。
最初CentOS6で試しててわからなかった。これは GNU tar 1.23 だ。
CentOS7は GNU tar 1.26 になっててこちらでは出来るしmanページにも書いてあった。
0296デフォルトの名無しさん (アウアウウー Sa9f-L0SM)
垢版 |
2018/10/23(火) 15:35:42.08ID:QwHjyvjPa
>>295
するする。仕事でRHEL6のサーバ使っててそれの一部をテストする時に使ってただけなので。
0298デフォルトの名無しさん (アウアウウー Sa5d-hDoO)
垢版 |
2018/10/25(木) 14:43:08.46ID:hw/Q19JUa
>>297
それもはやシェルかどうか関係なくてWindows固有の問題だと思うが、エクスプローラでそのファイル右クリックしてプロパティ出したらそんな感じの設定できるようになってない?
最小化した状態で実行するとか、そんなやつ。
0299デフォルトの名無しさん (アウアウウー Sa5d-hDoO)
垢版 |
2018/10/25(木) 14:51:54.06ID:hw/Q19JUa
こうだ。

まずショートカット作り、そのショートカットのプロパティ出すと実行時の大きさを指定できる所があって、そこを最小化にすると実行時にタスクバーにアイコン出ているだけになる。
0301デフォルトの名無しさん (ワッチョイ 9764-Ed1r)
垢版 |
2018/10/26(金) 22:15:40.17ID:ScQN6FWl0
ファイルや標準出力の行数がある数値より大きいことをできるだけ高速に確かめるにはどうすればいいだろう
最も単純で最もUNIXっぽいのは
$ test $(<file.txt wc -l) -gt $num
としてその真偽を見ることだけど
$ test $( (yes | head -n 3000000000000000000) | wc -l) -lt 300
こういうのを実行して貰えれば分かると思うがかなり時間が掛かる
俺の使ってる計算機はそこそこ良い性能(Intel Xeon x2/32GiB RAMなのだが)
それでも実行に1分強掛かった。
しかしこれは無駄だ。なぜなら結局比較する対象は300なのだから、「300行以上ある」ことが分かればいい。
なにか案ありませんかね。

思ったのはsed -n -e '300p'とかでその失敗判定を見るとかだが,これはsedコマンドの失敗の要因が他にもあるので
ちょっと不安定かなと。
0302デフォルトの名無しさん (ワッチョイ 1d80-SUE8)
垢版 |
2018/10/26(金) 23:12:31.32ID:7cGNdWT70
cで指定行読むコマンドを作ればいい
面倒なこといちいち考える必要がそもそもない
0309デフォルトの名無しさん (ワッチョイ 5b98-o90R)
垢版 |
2018/10/27(土) 01:23:00.95ID:4RrrP6U60
シェルスクリプトでループで回しながら数えるのと
headで300行とってきて、wcで300行数えるのってどっちが速いんだろうかね
やればすぐわかるけど、やる気起きないなぁw
0310デフォルトの名無しさん (ワッチョイ 5b9f-3knh)
垢版 |
2018/10/27(土) 04:24:55.28ID:QwPOuwmq0
>>309
シェルスクリプトだとインタープリタの言語みたいな動きになるので遅そうなイメージはあるな。但しうまいこと内部で最適化されれば速くなるかもね。
0311デフォルトの名無しさん (ワッチョイ 5b98-o90R)
垢版 |
2018/10/27(土) 08:30:31.93ID:4RrrP6U60
>>310
いうてもループとカウントと条件分岐だけだからなぁ
内部的にはインタプリタ解釈後の状態になってるだろうし
そこでCPUは食わない気がする

でもheadでとってきてwcでカウントの部分は並列で実行できるわけで
マルチコアなら当然のことながら、シングルコアでもファイルから読み取りの方が
遅いからwcで待たされることはなさそう

どちらが速いかは微妙な所だなw
0313デフォルトの名無しさん (ワッチョイ 1d80-SUE8)
垢版 |
2018/10/27(土) 09:08:24.86ID:S4VvuAVS0
ファイルの先頭からLFの数を数えるだけのことを
ああでもこうでもないと
いちいち考えないといけないオツムのデキを疑うわ。。。
0314デフォルトの名無しさん (オッペケ Sref-9p2Q)
垢版 |
2018/10/27(土) 09:14:33.78ID:EI3TCK5cr
ループってreadのループ?
catからパイプしてwhileのreadループってどうなんだっけ
昔作ったシェルでcatしてたファイルを処理中に書き換えたけど
実行されてる処理では書き換える前の内容で処理されてたみたいだから
どこかメモリに展開されてるんじゃ
catからのパイプでプロセスが終わってるからか?
でもリダイレクトやヒアドキュメントでも同じじゃないの?
0315デフォルトの名無しさん (ワッチョイ 1d80-SUE8)
垢版 |
2018/10/27(土) 09:24:18.83ID:S4VvuAVS0
低学歴知恵遅れの思考形態、世界では
すでに用意されているコマンドを組み合わせてシェルスクリプトを書くことが
シェルスクリプトを書くことになるという決まりがあるのが
このスレみてると分かる
0317デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
垢版 |
2018/10/27(土) 09:36:35.55ID:94jXB05x0
>>314
単にバッファに入っていただけとか。カーネルに設定できるバッファサイズなバッファなんぞもしくはcatプログラムのバッファ(の方が小さいだろう、たぶん)
もしくは上書きが上書きではなくて削除して新規ファイルに保存とかの場合とか(削除してもどこぞでオープンしていたらクローズされるまでは元のはそのまま残る)、か、OSが他でオープンされていたら上書きでも同じように別に保存してるとか
0318デフォルトの名無しさん (ワッチョイ 5b98-o90R)
垢版 |
2018/10/27(土) 10:00:05.77ID:4RrrP6U60
>>313
考えてるのはファイルの先頭からLFの数を数える
「効率がいい方法(コマンド)は何か」だよ

LFの数を数えることなんてわかりきったことは考えてない
それを実現する方法を考えてる

まったくキミは思慮が足りないなw
0325デフォルトの名無しさん (ワッチョイ 1d80-SUE8)
垢版 |
2018/10/27(土) 11:01:01.29ID:S4VvuAVS0
低学歴知恵遅れのしゃべり場
0331デフォルトの名無しさん (ワッチョイ df03-WuzW)
垢版 |
2018/10/28(日) 06:57:04.86ID:xmv6f/Y+0
そもそもシェルでええのにわざわざシェルスクリプトって言いたがる新参者達w
0334デフォルトの名無しさん (ワッチョイ df03-WuzW)
垢版 |
2018/10/28(日) 09:10:44.72ID:xmv6f/Y+0
>>333
おまえがググれよおこちゃまw
0335デフォルトの名無しさん (ワッチョイ 5b98-o90R)
垢版 |
2018/10/28(日) 09:26:48.32ID:PnJQ4LJT0
こんな感じに script1.sh が script2.sh を呼び出してる状態でさ、

script1.sh
 └ script2.sh

CTRL+Cを押した時、script2.shは止めて、script1.shは
止めないってできるのかなぁ?

シグナルって、伝搬というか、上から下へ もしくは 下から上へ
流れていくものなん?
0342デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
垢版 |
2018/10/28(日) 11:47:47.85ID:gJfQRhUl0
script2.shでそのへんの制御とかしたくなく、script1.shだけでならscript1.shで trap SIGINTすればいいだけっぽいな。無効じゃなくなにもしないシグナルハンドラで
script2.shの時だけでならその前後でNOPのシグナルハンドラ設定通常のシグナルハンドラに戻すとかか

>>341 被ったけど、書いたので被り被りで
0343デフォルトの名無しさん (ワッチョイ 5b98-o90R)
垢版 |
2018/10/28(日) 17:27:21.50ID:XoYPKH7l0
勘違いしてた。違う所が原因だった

単純にscript2.shを起動してるのではなくて
script2.sh | filter みたいにパイプ使っていて、
CTRL+C押したときにscript2.shが出力するメッセージを
script1.shで受け取れないって問題だった
0344デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
垢版 |
2018/10/28(日) 17:58:26.84ID:gJfQRhUl0
どのタイミングでの出力が出ない、出したいのかわからんな。CTRL+C押した瞬間ギリのか??としか思えないが。filterがなんなのか知らんけど、script1.shでtrapでもscript2.shでの出力が全くでないことなないだろう、当然
script2.shでtrapしてexitすればギリ近くのまで出るんじゃないの。script2.shで実際に出力しているコマンド(プロセス)にもよるだろうけど
0345デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
垢版 |
2018/10/28(日) 18:40:23.99ID:gJfQRhUl0
ああ、trapの対象はパイプチェイン(?)の最後のヤツ&それがシェルでなければなのか?script2.shに飛ぶことはないのね。その最後のでexitすればだなすればかな
script2.sh | cat
script2.sh | sh -c "trap 'exit 0';cat"
のような変態なw それもシェル種類依存かな。あとはバッファをflushすればよりなんとかなりそうかなあ(できるのであれば)
そもそもCTRL+Cなんだからそんなギリを気にすんなってとこか
0347デフォルトの名無しさん (ワッチョイ 5b98-o90R)
垢版 |
2018/10/28(日) 19:05:49.36ID:XoYPKH7l0
>>344
最終的にやりたいことは

script1.sh ・・・ サブプロセスの標準出力・標準エラー出力を総てキャプチャしたい
script2.sh ・・・ 標準出力・標準エラー出力を行い、CTRL+Cを押されたら(trapして)
          CTRL+Cが押されたと標準エラー出力に出力したい

ってことなんだよね

> そもそもCTRL+Cなんだからそんなギリを気にすんなってとこか
そういうことだし、諦めて一つのスクリプトにしてやりたいことは
解決できたのでもう深追いする気はなくなってる

あと関係ないけど、SIGINTってPOSIXじゃないみたいだなw
INTを使えってshellcheckに怒られた。みんな SIG SIG 言ってるのに
0348デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
垢版 |
2018/10/28(日) 20:03:04.22ID:gJfQRhUl0
なにその勝手にやる気なくすなよw ほんとに身勝手だな、いつも通り
SIGINTはPOSIXだからな(なぞ)。そっち寄りのの人は普通に使ってしまうんじゃね。てか、んなの本題に関係ないだろうに、そんなこと言いたいのはわかるけどさ(なぞ)
0352デフォルトの名無しさん (ワッチョイ 5b98-o90R)
垢版 |
2018/10/28(日) 20:30:59.64ID:XoYPKH7l0
>>350
やる気ではなくて、POSIX縛りは必須要件なので
サブプロセスの標準エラー出力の件は、別の方法で解決できることなので

数値でも指定できるのは知ってる。trap SIGINTとかSIGINT抜けてたとか
かいてあるから、trap INT、INT抜けてただよって言ってるだけ
0353デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
垢版 |
2018/10/28(日) 20:36:08.52ID:gJfQRhUl0
また、後出しか。そんなレスしている目的は違うだろうw
いきなり「数値でも指定できるのは知ってる」とか??(3)に対して???

http://pubs.opengroup.org/onlinepubs/007904975/utilities/trap.html
(新しいドキュメントはどこだ?)
SIG付きもPOSIX仕様のようだけどなwオプションでも言及しているんだからPOSIXの仕様のひとつだろう
なんて、アホなやりとりしたいの?
0359デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
垢版 |
2018/10/28(日) 20:56:45.89ID:gJfQRhUl0
だから最初は「(なぞ)」にしてたやん
>>347の最後あたりの応えとしてしかない。お前が変なツッコミするから悪い
ちなみに、>>353のPOSIXドキュメントでも (3) のことに言及しているのはどう思う?UNIX/Linuxはそんな境目はそれほど無いと思うけど。誰かみたいに(1)しか興味ない知らない人もいるだろうけど

単に知らなかっただけでいいのに、いつも偉そうにしているからドツボにはまってるように見えなくもないw
0360デフォルトの名無しさん (ワッチョイ 5b98-o90R)
垢版 |
2018/10/28(日) 21:00:00.71ID:XoYPKH7l0
> ちなみに、>>353のPOSIXドキュメントでも (3) のことに言及しているのはどう思う?

それが、シェルスクリプトだけのドキュメントじゃなくて、POSIXのドキュメントだからでしょう???
なにがいいたいんだか
0365デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
垢版 |
2018/10/28(日) 21:37:09.45ID:gJfQRhUl0
>>363
で?その目的がわからんな。単に素直な疑問なだけなら、>>348で応えているけど。話を振ってねちっこく続けているのは誰なの?>>349とか以後とか
それも>>353でお前は納得したんだろ?


なんか上でC++のことを偉そうにのたまっているのを誤爆したのお前じゃなかったっけ?
それがお前じゃなくても、なんでコマンド関連のCなんて簡単なのにそんなに知らないのか不思議だな、なんか異常にシェルスクリプト「だけ」に拘るのもあって

UNIX/Linux界隈では自分でCでコマンド書く(簡単なフィルタも)のも普通にいるだろうから、お前のようにシェルスクリプトだけしか言ってはいけないなんてないと思うけどな(それも俺からは単にお前の間違いをごまかすためだけにしか見えんからw)

>>362は俺に振ってもいいが、なにを聞いているのか傍目にもわからないw すまんが、も少し具体的に>>362
0368デフォルトの名無しさん (ワッチョイ 5b98-o90R)
垢版 |
2018/10/28(日) 21:49:30.03ID:XoYPKH7l0
>>365
コマンド?
もしかして、trapがコマンドだと思ってる?
シェルビルトイン関数だよ

シェルのプロセスでシグナルを扱わなきゃいけないから
外部コマンドで実装することは不可能

だからシェルスクリプトスレでtrapの話をするならば
シェルスクリプト前提になるのは当然だろう?
0369デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
垢版 |
2018/10/28(日) 21:53:11.18ID:gJfQRhUl0
>>368
そういう細かいことは言いたいのね。大枠でコマンドでいいじゃん (1) の範疇なんだから

その二行目以降はイミフ。なにを言っているの?言いたいの?
お前から見てミスを論ってなんとかお前のなにかを保ちたいだけにしか見えない
0375デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
垢版 |
2018/10/28(日) 22:07:32.28ID:gJfQRhUl0
>>373,374
はあ?無茶苦茶やな
その答えはすでに応えているけど。「みんな SIG SIG 言ってるのに」のに対する応えを含めての
それも最初に。それも話の流れで、お前も納得勉強wになっただろうにww

よほど「お前のなにかを保ちたい」が琴線だったようだねえw
■ このスレッドは過去ログ倉庫に格納されています

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