- 1 名前:名無しさん@お腹いっぱい。 mailto:sageteoff [2015/08/14(金) 23:42:01.51 .net]
- シェルスクリプトの総合スレです。
□お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。 src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/ heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) ・シェルスクリプトのことをシェルってゆーな □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも awkまたはperlの方が適した処理にはそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 □回答者への注意事項: ・シェルスクリプトでの処理方法を質問しているのに、よくわからずに 「そういうのはperl使いましょう」と回答するのはやめましょう。 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。 前スレ シェルスクリプト総合 その24 peace.2ch.net/test/read.cgi/unix/1415634843/
- 562 名前:名無しさん@お腹いっぱい。 [2016/04/16(土) 10:06:55.21 .net]
- >>550
そういう問題ではない。
- 563 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/16(土) 10:35:23.38 .net]
- >>551
だったらどういう問題?
- 564 名前:名無しさん@お腹いっぱい。 [2016/04/16(土) 10:51:02.13 .net]
- >>552
なんでテストしてないの?
- 565 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/16(土) 11:15:01.02 .net]
- バグがあっても大丈夫な設計を心がけろという話なのに
なんでテストしていないという話になる?頭大丈夫か?
- 566 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/16(土) 11:25:08.28 .net]
- あまりにアレで何か別のことを隠すためのうんたらかんたらを妄想してしまう記事だな
- 567 名前:名無しさん@お腹いっぱい。 [2016/04/16(土) 13:52:26.18 .net]
- >>554
設計があって、テストをしないのはありえません。
- 568 名前:名無しさん@お腹いっぱい。 [2016/04/16(土) 13:56:59.02 .net]
- >>554
だいたいそれは設計じゃないだろ。 ただのコーディングミスを防げために、コーディングミス用のロジックを書くのは阿呆すぎる。
- 569 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/16(土) 14:43:59.32 .net]
- >>557
フェイルセーフとフールプルーフの違いを学べよ
- 570 名前:名無しさん@お腹いっぱい。 [2016/04/16(土) 15:25:19.31 .net]
- >>558
いかにもインフラの人間がいいそうなことだが、キミは開発側ではありえない助言をしている。
- 571 名前:名無しさん@お腹いっぱい。 [2016/04/16(土) 15:27:25.43 .net]
- 検証もしないで、ぶっつけ本番でそういう構成になっているから大丈夫という考え方はインフラでもありえない。
- 572 名前:名無しさん@お腹いっぱい。 [2016/04/16(土) 15:28:05.09 .net]
- そもそも操作ミスではないじゃん。
- 573 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/16(土) 16:30:24.50 .net]
- バックアップは特定の権限でしか消せないとか、削除可能な範囲を絞るとか
万が一のためインフラ側で制限しないとダメなんだよ それでもダメなときはダメだし 設計・テストとかプログラムのみでの対応はコストだけが跳ね上がるし現実的ではない ジョブ管理システムやコンパイラのバグが絡んでくるともうお手上げになる
- 574 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/16(土) 18:08:55.67 .net]
- シェルスクリプトなのにコンパイラのバグ?
- 575 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/16(土) 19:49:59.88 .net]
- 例で示しただけだから別にインタプリタでもなんでもいいよ
- 576 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/17(日) 01:23:14.24 .net]
- バグに絡まれやすそうな奴だな
- 577 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/17(日) 07:15:51.53 .net]
- >>549
rm -rfはシェル関数で。直接使う事は禁則。 rmしないでmv。定期的に掃除
- 578 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/18(月) 20:09:07.34 .net]
- >>549
japanese.engadget.com/2016/04/15/rm-rf-qanda/
- 579 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/18(月) 20:24:48.32 .net]
- ひでーw
__ タヒんでしまえよ
- 580 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/18(月) 22:44:34.25 .net]
- シェルショッカーとかいうおじさんおるよな
- 581 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/25(月) 19:04:26.09 .net]
- bashで、新しいscreenウィンドウを開いてそこで引数で指定したコマンドを実行する関数
を作りたいのですが、引数の展開をどうやればいいかで悩んでいます。 # 例:sc tail -f ./hoge.log sc() { # "cd $PWD; $@"ではダメだった screen -t "$1" -X screen bash -c "cd $PWD; '$1' '$2' '$3' '$4' '$5' '$6' '$7' '$8' '$9'" } 10個以上の引数に対応するにはどう書くのがいいでしょうか?
- 582 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/25(月) 21:45:04.21 .net]
- >>570
"cd $PWD; $@" だと screen のコマンド全体が、 "screen" "-t" "$1" "-X" "screen" "bash" "-c" "cd $PWD; $1" "$2" ... という引数に展開される。 これは "cd $PWD; $@" がまず、"cd $PWD; ""$@" に変換され、 "$@" が "$1" "$2" ... に展開されて "cd $PWD; ""$1" が連結されて "cd $PWD; $1" になるため。 なお set - "$@" cd "$PWD" ";" "$@" したら、 screen に渡るのは ; までで肝心のコマンドは渡らない。 "cd $PWD; $*" だと "cd $PWD; $1 $2 $3 ..." (配列としては展開されずに1つの文字列扱いになる) に展開されて意図した動きになる。 ただ、引数に空白が入る場合はエスケープ入れないとNGね。
- 583 名前:570 mailto:sage [2016/04/26(火) 19:09:31.05 .net]
- 空白のエスケープはどうやればいいんでしょう?
- 584 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/26(火) 19:43:17.56 .net]
- >>572
シングルクォートと空白の例。 sc() { screen -t "$1" -X screen bash -c "cd $PWD; $*" } sc date +Date=\\\'%y\\\ %m/%d
- 585 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/27(水) 12:24:16.19 .net]
- ...なんだかなあ
与えたスクリプトの中で、展開すれば? sh -c 'some command; "$@"' 'dummy' "$@" sc() { screen -t "$1" -X screen bash -c 'cd $PWD; "$@"' 'dummy' "$@" }
- 586 名前:570 mailto:sage [2016/04/27(水) 19:13:45.99 .net]
- なるほど、dummy 以降が -c で与えたコマンドへの引数になることを利用するわけですね。
ちなみに screen -t "$1" -X screen bash は冗長で screen -t "$1" bash でいいみたいでした。
- 587 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/04/27(水) 21:07:51.80 .net]
- -c の次の次の引数からが $0 以降になるとは知らなかったなぁ。 勉強になったわ。
これは -c AAA BBB CCC DDD ... のとき、BBB 以降は実行されないけど BBB が $0 として、 CCC DDD ... が引数としてセットされた状態でプロセスが開始され、実際に実行される内容の AAA 内に展開されずに渡された "$@" があるので CCC DDD ... が実行されるってことかな。 ちなみに cd の部分は 'cd "'"$PWD"'"; "$@"' の方がいいかな。 ( パスに空白が入っていてもエラーにならないがダブルクォーテーションが入っていたらNGではあるが。 )
- 588 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/12(木) 21:13:45.79 .net]
- コマンド応答が返ってくるまでの表示に文字を回転させてりしてみたくなった。
例えば、「*」がくるくると回っていたり・・・
- 589 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/13(金) 00:30:46.45 .net]
- ええね
- 590 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/13(金) 19:21:12.15 .net]
- >>577
難しい…どなたかヒントを
- 591 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/13(金) 20:19:09.81 .net]
- >>579
なんだよ、すごい目算があって開発宣言したと期待してたのに まず、文字回すのは無理 /|\-を同じ位置で順番に繰り返す出す程度 あと、コマンド実行中は通常シェルはwait状態で止まってしまうので コマンドをバックグラウンドで起動してシェルを動かし続けるか 別プロセスを同時に起動してそいつに表示させる必要がある どっちもコマンドラインで明示しなきゃならん 普通に起動して同じことをさせるにはシェルの改造くらいしか思いつかん それともzshくらいになるとすごいモジュールがあったりするのだろうか
- 592 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/13(金) 20:43:34.11 .net]
- OpenGLでぐりぐり回そうぜ
- 593 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/13(金) 20:57:15.29 .net]
- bash 依存だけど、こんなんでどう
sleep 10 & { tput civis while kill -0 %- &>/dev/null do for c in {-,/,\|,\\} do printf '%c\r' $c sleep 0.1 done done tput cvvis } 途中で interrupt されるとカーソルが見えないままになるけど
- 594 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/14(土) 20:15:01.86 .net]
- npm見れば解決しそう
- 595 名前:534 [2016/05/21(土) 22:04:30.88 .net]
- >>535
お陰さまで最低限現場の記述ルールに則ったものは普通に作れるようになりましたm(_ _)m
- 596 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/23(月) 00:15:19.48 .net]
- >>559
超遅レスだかインフラでも そんな事言わないあり得ない偏見すごいな >>558 が伝えたいニュアンスは分かるけど 端的に考え方を言い表したいがために 登場場面が根本的に違う2つの用語だけで 端的に伝えようとするセンスが酷い それにそもそも元の話と何かズレてるし 後輩育成とかは絶対に任せられないタイプ
- 597 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/23(月) 08:05:15.40 .net]
- ログファイルのローテート処理のお勧め教えれ
元ファイルをコピーしてヌルを上書きすると 一瞬ログの内容ロストするから
- 598 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/23(月) 08:55:28.11 .net]
- >>586
ログを出す側で制御 (SIGHUPとかで出力ログファイルを開きなおす) してくれないとその問題は防げない。 mkfifo で FIFO ファイル作ってログローテーション用後続スクリプトに一旦渡す方法やパイプで後続スクリプトに 渡してローテーションする方法も考えられるけど、FIFO のバッファがいっぱいになるとメインプロセス側が処理 待ち(write がブロック)したり、後続スクリプトの異常終了で SIGPIPE 食らってメインプロセスが死んだりする のでお勧めできないそうな。
- 599 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/23(月) 16:33:22.23 .net]
- syslogdを kill -STOP; ... ; kill -CONT じゃダメなん?
- 600 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/23(月) 17:04:28.65 .net]
- logrotateでええやろ
- 601 名前:587 mailto:sage [2016/05/23(月) 23:22:16.85 .net]
- >>588
syslogd がつかんでいるのはファイルハンドルであってファイルのパスじゃない。 なのでそれをやっても、リネームした古いファイルの方に書き続けてしまう。 例えば /var/log/messages に書き続けている状態でファイルを mv して messages.1 にしても、syslogdは messages.1 の方に書き続ける。 kill -HUP するとファイルハンドルを閉じて /var/log/messages を開くので、ここでようやく messages 側に書き始めるわけ。 # STOP/CONT は意味がない。 logrotate では syslogd のログについては HUP しかしない。 >>589 logrotate の samba のログ設定には copytruncate って書いてあるでしょ? つまり logrotate が >> 586 の言う「コピーしてファイルを空にする」処理をやっている。 samba は syslogd のような開きなおす処理をしてくれないからこの実装にせざるを得ない。
- 602 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/24(火) 04:38:11.44 .net]
- >>590
kill -HUP に対応してないsyslogdだったら、という話だろ。 kill -STOP してからログファイルを別ファイルにcpして、元のログは > file でゼロにする。 それで -CONT すればいいという話。 >syslogd がつかんでいるのはファイルハンドルであってファイルのパスじゃない。 というのは当然知ってるだろ。
- 603 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/24(火) 08:44:45.64 .net]
- スレ違いになりつつあるが、便乗して質問。
STOP -> truncate -> CONT って安全? TCP/UDPで待ち受けしているプログラムで syn やメッセージ取りこぼしたりとかしない? fork する奴にも使える?
- 604 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/24(火) 09:37:37.23 .net]
- >>592
TCPなら再送含めてOSがうまくやる UDPだとバッファあふれたら消える もともと消えるの前提だから再送はアプリの自己責任 forkしたら止まるのは当たり前だが指定したプロセスだけ プロセスグループを指定したら該当するやつ全部 どの辺が疑問なのかむしろ知りたいわ
- 605 名前:592 mailto:sage [2016/05/24(火) 20:11:40.98 .net]
- >>593
THX > どの辺が疑問なのかむしろ知りたいわ logrotate コマンドの copytruncate の欄に SIGSTOP すると良い、とは書かれていない あたり、何か不都合があるんじゃないかと思うんだがどーよ?
- 606 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/24(火) 22:53:24.96 .net]
- >>594
そいつとtcpもudpもforkも関係ないのになんで出てきた?
- 607 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/25(水) 08:40:27.70 .net]
- tcp 再送は5分までいけるが、ロードバランサー/L7swの監視の場合にはファイルコピーしている
ちょっとした間にサービス停止として検知される可能性があるな。
- 608 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/25(水) 15:06:05.26 .net]
- >>596
5分って、どこの標準か興味がある。
- 609 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/27(金) 20:10:08.30 .net]
- >>586
普通は単純にリネームしてタッチする
- 610 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/28(土) 12:10:25.23 .net]
- タッチして逮捕されたらリネームじゃないのか。
- 611 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/29(日) 01:58:44.16 .net]
- つ 座布団
- 612 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/29(日) 20:46:35.04 .net]
- ユニックスの入門本が一冊欲しいのですが何がいいでしょうか
特定のコマンドやシェルのノウハウとかではなく 多くの場面で通用する本当に基礎的な知識を学びたいと思っています 私自身はいずれシェルを書きたいと思っていますが LS、CPコマンドなどの使い方を知りたいわけではないということです
- 613 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/29(日) 20:57:27.92 .net]
- >>601
UNIXスーパーテキスト ってまだ売ってたっけ?
- 614 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/29(日) 21:40:46.70 .net]
- >>601
古い本だけど砂原秀樹さんほかの『プロフェショナルBSD』 UNIXのコマンドはこういうふうに使うという根本的なことの理解に役立つ
- 615 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/29(日) 22:26:33.91 .net]
- スレチにも回答してあげるとは優しいやつばっかやな
- 616 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/29(日) 23:19:55.20 .net]
- >>601
入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界 名著です。 これを挙げると古いとか文句を付ける馬鹿がいますが、無視してください。
- 617 名前:名無しさん@お腹いっぱい。 [2016/05/29(日) 23:20:36.49 .net]
- あげ
- 618 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/30(月) 00:14:11.32 .net]
- >>604
お前の心が汚れているだけだ
- 619 名前:名無しさん@お腹いっぱい。 [2016/05/30(月) 03:08:51.89 .net]
- shell から emacs 起動して終了すると、
[1] Done emacs って出るよな?これって何が出しているんだろう?出来れば止めたい。
- 620 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/30(月) 04:52:05.02 .net]
- >>608
set +m しておくと出なくなるよ。(出してるのはシェル自身)
- 621 名前:名無しさん@お腹いっぱい。 [2016/05/30(月) 09:25:10.53 .net]
- vim7.4使ってますが、書き込み時、sh -n みたいな、構文・文法チェックを
する方法はないでしょうか? vimプラグインのsyntasticも試してみたのですが、.vimrcの記述のせいか うまく動いてないようで。 何か簡単でうまい方法ありましたら、ご紹介ください。
- 622 名前:名無しさん@お腹いっぱい。 [2016/05/30(月) 10:19:27.79 .net]
- >>609
どうもです。なるほどシェルが出しているのですか。 でも、なぜ emacs しか出ないのでしょう? 教えていただいた set +m 「ジョブ制御の無効」は bash のみでしょうか? 私は tcsh なのですが、tcsh でも同様の事は可能でしょうか?
- 623 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/30(月) 18:00:07.40 .net]
- ひとつ質問
シェルで2つの日時を元に所要時間を求めたい場合ぐぐるといろいろ方法はありますが これが便利なコマンド一発で用意されていないのは需要がないと言うか 需要があった人が最終的に誰でも使える簡単な形にせずに終わらせたってことなんでしょうか?
- 624 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/30(月) 18:55:30.71 .net]
- >>612
広く使われるほどの需要はなかった
- 625 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/30(月) 19:36:20.17 .net]
- dateコマンドのオプションに互換性がなかったから。
GNU date限定とかならいいんだけど
- 626 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/30(月) 21:40:48.25 .net]
- 内部的にUNIX時間で持てば差分計算は簡単なような
- 627 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/31(火) 08:52:48.30 .net]
- >>615
32bitマシンが絶滅するまでは難しいな。 あと20年普通に残りそうだし
- 628 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/31(火) 21:45:59.92 .net]
- 内部的にUNIX時間で持つってどういうこと?
内部というのは環境変数やシェル変数という意味?
- 629 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/31(火) 23:23:59.98 .net]
- 256bit機が普及するまで32bit機はなくならないだろうね。
- 630 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/05/31(火) 23:24:37.85 .net]
- >>617
epochからの時間ってことじゃない? >>616 difftime(3)て32bitと64bitで違うのかな
- 631 名前:超音波テロの被害者 [2016/06/01(水) 16:02:45.59 .net]
- 超音波テロの被害にあっています。
卑劣極まりない被害にあっています。 何が起こったかわからないときから、 わかってみれば、 まだ世の中に知られていない超音波テロ。 世の中の多数の振動源・発信源が システム化され、 ネットワークを通して、 超音波・音波を集中させて 対象を攻撃するらしい。 超音波による物理的な力で、 ものが飛び、ものが壊れる。 それが人間の体に対してまで。 形のあるもの、ないもの、壊され、奪われ、 聞こえる声、音。超音波テロの加害者の声。 卑猥な内容、卑劣な内容、脅しやいたぶり。
- 632 名前:超音波テロの被害者 [2016/06/01(水) 16:03:08.53 .net]
- 身体の表面を突き抜け、内臓を攻撃される。
頭蓋骨を突き抜け、意識を失わされる。 臓器不全やがん、命に関わることまで。 人間の身体を壊そうとする超音波テロ。 日本国中、どこにいても超音波で襲われる。 車に乗っている人間が襲われる。 歩いている人間が襲われる。 自宅で超音波の攻撃を受ける。 人や社会が超音波で襲われ、 罪もない人が超音波で襲われ、 卑劣な被害にあっています。 被害を訴えても信じてもらえない。 「見続けるのがいやだから、殺して終わる」、 「証拠隠滅だ」という超音波テロの加害者の声とともに 強烈な超音波の攻撃。 叫ばされ、いたぶられ、それを口実にまた攻撃され、 超音波テロの、残酷残虐で、卑劣な攻撃の被害にあっています。 心の底から被害を訴え、祈っています。 天に神に届きますように。
- 633 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/01(水) 17:45:47.97 .net]
- >620
これなんつーシェルのスクリプトですか?
- 634 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/02(木) 07:52:05.22 .net]
- /bin/jpsh
- 635 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/02(木) 08:00:02.53 .net]
- /bin/chouonpa/itaburare
- 636 名前:名無しさん@お腹いっぱい。 [2016/06/05(日) 11:03:53.19 .net]
- ディレクトリを指定する時って、「/dir/」が正しいのか、「/dir」
にすべきか、最後の/をつけるかつけないかでどんな違いがあるのか いつもすごく気になる。
- 637 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/05(日) 13:34:06.57 .net]
- >>625
rsync や ln 、mv あたりはありなしで挙動がかわる。 ln や mv はオプションで一応制御できるけど
- 638 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/09(木) 19:13:38.61 .net]
- json形式のデータをSQLのjoinみたいにキーで結合したいのですが
いいスクリプト知りませんか? jqはできそうな感じなんだけど、サンプルのページが見当たらなくて
- 639 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/09(木) 21:10:02.49 .net]
- >json形式のデータをSQLのjoinみたいにキーで結合したいのですが
cpanモジュール使うべし。 力技でゴリゴリでもできるかもしらんが、時間の無駄
- 640 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/09(木) 22:45:45.43 .net]
- >>627
データがどんなもんか分からないので何とも言えないけど例えば [ {"id": 1, "name": "Tom", "gender": 1}, {"id": 2, "name": "Alice", "gender": 2}, {"gid": 1, "gender": "male"}, {"gid": 2, "gender": "female"} ] なんてJSONファイルがあって gender と gid で join する場合、 jq ' map( (select(has("id")) | { k: .gender, v: { id: .id, name: .name }}), (select(has("gid")) | { k: .gid, v: { geder: .gender }}) ) | group_by(.k) | map((map(.v) | add)) ' data.json かなぁ。
- 641 名前:629 mailto:sage [2016/06/10(金) 01:11:22.91 .net]
- あー、しまった、思いっきり間違えた…
jq ' (map(select(has("gid")) | {(.gid|tostring): .gender}) | add) as $g | map (select(has("id")) | .gender = $g[(.gender|tostring)]) ' data.json
- 642 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/10(金) 01:28:18.48 .net]
- [
{ "id": 1, "name": "Tom", "gender": "male" }, { "id": 2, "name": "Alice", "gender": "female" } ] できました、できましたけど書き方わからないです>< >>628 cpan使うのが主流なんですか?
- 643 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/10(金) 01:54:22.40 .net]
- >>631
json 形式のデータを DB に insert する方法を調べた方がいいかも
- 644 名前:名無しさん@お腹いっぱい。 [2016/06/10(金) 14:14:19.71 .net]
- >>631
いやそういうわけではなくて、pythonでもrubyでもいいけど JSONとかXMLとかYAMLなどの定形式な文書からスライスして取 り出すなら、すでにある専用モジュールとか使ったほうが断然 速いってはなし。俺はperlしかわからんのでcpanモジュール。 perlなら use JSON::XS; して、 my $json = 'json.txt' my $data = decode_json($json); #jsonからperlのハッシュに変換 あとは、ハッシュの内容をダンプしてデータ構造みながら 必要なデータだけを拾う。 print %$data{features}->[$cnt]->{properties}->{title} .
- 645 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/10(金) 16:33:17.98 .net]
- 使うべしって言った割にショボ過ぎ
- 646 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/10(金) 22:15:34.82 .net]
- スレ的にもここはあくまでシェルスクリプトでやるべきだろ
なんでもありなら今はPythonの方がメジャー もしくはRubyとか
- 647 名前:名無しさん@お腹いっぱい。 [2016/06/10(金) 23:07:20.19 .net]
- 場違いだったらすまん。
gomプレイヤーとかのソフト立ち上げるとスクリプトエラー出るんだけどどうしたらいい? imgur.com/9hlJu8w
- 648 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/11(土) 00:12:44.31 .net]
- スレチ
- 649 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/11(土) 00:34:35.87 .net]
- スクリプトエラーとやらがでる
↓ にちゃんでスクリプトで検索 ↓ シェルスクリプトとかよくわからんけどスクリプトって入ってるからここに書けば誰か完璧な答えを出してくれるはず ゆとり、ここに極まれり
- 650 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/11(土) 03:40:49.78 .net]
- 引数を受けて同名のサブディレクリ直下にある全てのシェルスクリプト(.sh)を実行するってどう書けばいいんでしょうか?
- 651 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/11(土) 03:41:43.14 .net]
- bash環境です。同名とは引数に指定された文字です
- 652 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/11(土) 03:53:01.79 .net]
- find 引数 -name *.sh -exec {};
こんな感じなのだろうか。
- 653 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/11(土) 04:14:09.33 .net]
- ありがとうございます
こんな感じで良いのかな? find 引数 -maxdepth 0 -name *.sh -exec bin/sh -c ' {} ' \;
- 654 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/11(土) 10:22:42.97 .net]
- シェルスクリプトじゃないけどrun-partsが似たような仕事するね
- 655 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/12(日) 05:31:11.76 .net]
- for sh in $dir/*.sh; do $sh; done
- 656 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/12(日) 11:11:52.76 .net]
- Cygwin(bash)で特定の拡張子の映像ファイルをforループ文でまわして処理したいと思っています
for input in * do (処理) done これだと映像ファイルだけでなく全てのファイルが対象になってしまいます。 そうではなくて WMV、MP4、AVI、MPEG、MPGといった映像ファイルだけを 処理するにはどうしたらいいでしょうか?
- 657 名前:名無しさん@お腹いっぱい。 [2016/06/12(日) 11:15:55.66 .net]
- >>645
そもそもなんでファイルを振り分けてないのか?
- 658 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/12(日) 11:25:58.85 .net]
- >>646
ffmpegで処理してるので映像ファイルの種類は分けなくても良かったりします あ、ただ変換後の拡張子は統一するようスクリプトを書かないといけませんね
- 659 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/12(日) 11:44:06.36 .net]
- >>645
for input in $(ls -1 *.{wav,mp4,avi,mpeg,mpg} 2>/dev/null) do (処理) done とか。
- 660 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/12(日) 11:52:44.28 .net]
- >>648
これじゃダメな場合があるんだっけ? for input in *.wav *.mp4 *.avi *.mpeg *.mpg do 〜 done
- 661 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/12(日) 12:07:38.74 .net]
- .wavファイルがないとinputには"*.wav"がそのまま入る
だけど、ループの中で処理する時に [ -f "$input" ] || continue とでもしとけばいいよね
- 662 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/06/12(日) 12:36:44.21 .net]
- >>648
>>650 なるほど、そういう方法がありましたか。 ありがとうございますm(_ _)m >>649 >>650さんのご指摘通りその拡張子のファイルが無いとそのまま入っちゃうって問題がありますね
|

|