レス数が1000を超えているけど、まだ書けるかも知れないよ。
シェルスクリプト総合 その24
1 :名無しさん@お腹いっぱい。 :2014/11/11(火) 00:54:03.43 .net シェルスクリプトの総合スレです。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。 http://src.opensolaris.org/source/xref/onnv/onnv-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に逃げずにシェルスクリプトで処理するのが頭のいいやり方。 前スレ シェルスクリプト総合 その23 http://peace.2ch.net/test/read.cgi/unix/1404204950/
2 :名無しさん@お腹いっぱい。 :2014/11/11(火) 01:00:47.57 .net 乙です
3 :テンプレ ◆01VkPKFOHeoR :2014/11/11(火) 03:40:09.81 .net ああ、次スレをいつ立てようかとタイミングを見ていたが 次スレ立ったか... 一応前スレでテンプレ書いた手前、書き込んでおきます
4 :テンプレ ◆01VkPKFOHeoR :2014/11/11(火) 03:41:35.86 .net シェルスクリプトの総合スレです。 初心者、学生、アマチュア、プロ、シェルの種類や OS を問いません。 スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずはテンプレートをご覧下さい。 □A. お約束 1. 特記なき場合は #!/bin/sh がデフォルトです。この場合可搬性に注意し、 Traditional Bourne Shell もしくは、POSIX 相当のスクリプトでお願いします。 bash / zsh / ksh / ash / dash や OS 等に依存する場合は、明示しましょう。 良く分からない方は、使用している OS を書いておけば OK です。是非ご参加下さい。 2. 質問する前に、まず自分で調べましょう。ただし、 「聞くは一時の恥、聞かぬは一生の恥」です。積極的に参加しましょう。 3. 相手を侮辱する発言、失礼な発言は差し控え、知的な議論を楽しみましょう。 4. 他者には様々な環境や事情、目的が有る事に留意し、無下に扱う様な発言は 控えましょう。 □B. お約束の補足 1. Mac OS X では、/bin/sh の実体は bash です。また、一般的に BSD 系 や GNU/Linux の方は、/bin/sh がシンボリックリンクですので、注意して下さい。 ls -l /bin/sh や readlink -e /bin/sh で確かめて下さい。 2. 可搬性については、下記 F.1 を参照して下さい。 3. POSIX については、man 7 standards や下記 F.2 ( の特に Shell & Utilities ) を参照して下さい。 4. Traditional Bourne Shell とは、UNIX Version 7 から SVR4.2 の /bin/sh を元に 小さなの改変を加え主に商用 UNIX で残されているものです。( 下記 F.3 参照 ) 5. Traditional Bourne Shell で入手しやすい sh は、後期 SVR4.0 から派生し、 SunOS 5 / OpenSolaris を経た、Heirloom Bourne Shell です。 SVR4 / SVID3 相当です。同様の Unix utilities も扱っています。 ( 下記 F.3 参照 )
5 :テンプレ ◆01VkPKFOHeoR :2014/11/11(火) 03:42:31.91 .net □C. 初心者へのアドバイス 1. シェルスクリプトのことをシェルってゆーな 2. 知らないコマンドが出てきたら man コマンドで調べましょう。 3. UNIX には、シェルスクリプトに便利な小さなコマンドが色々あります。 apropos ないしは man -k でそれらしい単語による簡単な検索もできます。 4. シェルの構文や内部コマンドは man sh で。英語は LANG=C man shで。 5. 思い通りに動かないときは、まずは #!/bin/sh -x でトレースしましょう。 6. 適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも awk / perl / javascript / ruby / python 等、他の (スクリプト) 言語の方が 適した処理にはそちらを使いましょう。 7. シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題は正規表現スレへ 8. csh / tcsh のシェルスクリプトは推奨されません。理由は下記を参照 http://www.speech-lab.org/~hiroki/csh-whynot.euc 9. cat file|すんなハゲ a. 詳細は "Useless Use of Cat" UUOC で検索して下さい b. 有用な場合も有ります Useful use of cat(1) 英文 http://www.in-ulm.de/~mascheck/various/uuoc/ □D. シェルスクリプトでよく使うコマンド 1. 制御・条件判定系: [, test, expr, true, false, yes, getopts 2. テキスト処理系: cat, awk, sed, tr, sort, uniq, grep, wc, head, tail, cut, paste, comm, join 3. ファイル検索系: find ( スペースなどを含むファイル名を正しく処理するため、 find は -exec command {} + を推奨。 他に -print0、xargs は -0 オプションという方法もあるが Solaris 非対応 ) 4. ディレクトリ系: basename, dirname 5. 出力系: echo, printf 6. 対話コマンド制御系: expect 7. http / ftp の処理自動化: wget, curl
6 :テンプレ ◆01VkPKFOHeoR :2014/11/11(火) 03:43:24.34 .net □E. 学習用テキスト 1. Bourne Shell自習テキスト ( 1993年 ) pdf お薦め http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/ http://ayapin.film.s.dendai.ac.jp/~matuda/Lecture/PDF/sh-two.pdf 2. シェルを使おう - 導入からプログラミングまで - ( 2002年 ) http://www.netfort.gr.jp/~tomokuni/lms/shell/ 3. UNIX FAQ LIST http://www.nurs.or.jp/~asada/FAQ/UNIX/UNIX.FAQ.html □F. 参考リンク 1. 可搬性関連 a. autoconf マニュアル 移植性のあるシェルプログラム http://www.gnu.org/software/autoconf/manual/autoconf.html#Portable-Shell http://www.geocities.jp/fut_nis/html/autoconf-ja/Portable-Shell.html b. Portability talk [Bash Hackers Wiki] 英文 Obsolete and deprecated syntax も見る価値有り http://wiki.bash-hackers.org/scripting/nonportable c. How to make bash scripts work in dash 英文 http://mywiki.wooledge.org/Bashism d. DashAsBinSh 英文 https://wiki.ubuntu.com/DashAsBinSh e. Portable Shell Programming 英文 http://www.in-ulm.de/~mascheck/various/portability/
7 :テンプレ ◆01VkPKFOHeoR :2014/11/11(火) 03:44:12.46 .net 2. POSIX The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2013 Edition 英文 http://pubs.opengroup.org/onlinepubs/9699919799/ 3. Traditional Bourne Shell 関連 a. The Traditional Bourne Shell Family History and Development 英文 http://www.in-ulm.de/~mascheck/bourne/ b. BourneShell / Where does the Bourne shell live? 英文 http://mywiki.wooledge.org/BourneShell c. The Heirloom Bourne Shell 英文 http://heirloom.sourceforge.net/ 4. マニュアル a. The Base Specifications Issue 7, 2013 Edition 英文 http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html b. FreeBSD 日本語マニュアル検索 http://www.jp.freebsd.org/man-jp/search.html c. JM Project (Japanese) http://linuxjm.sourceforge.jp/ 5. FAQ 等 a. UNIXの部屋 ( 2011年 ) http://x68000.q-e-d.net/~68user/unix/ b. Linux JF (Japanese FAQ) Project http://linuxjf.sourceforge.jp/ c. Advanced Bash-Scripting Guide 英文 http://www.tldp.org/LDP/abs/html/ d. Unix Programming FAQ 日本語訳 ( 2000年 ) http://www.race.u-tokyo.ac.jp/~moro/unix-programmer/
8 :名無しさん@お腹いっぱい。 :2014/11/11(火) 03:45:49.28 .net 6. ツール a. web tool です。Vim syntastic や Emacs の Flycheck でも使えます ShellCheck http://www.shellcheck.net/about.html b. vim 用 syntastic https://github.com/scrooloose/syntastic c. checkbashisms も使用してチェック duggan/shlint GitHub https://github.com/duggan/shlint □G. 前スレ 1. ☆シェルスクリプトを勉強するにあたって☆ http://hibari.2ch.net/test/read.cgi/unix/989659936/ 2. 便利なシェルスクリプト見せろ http://pc.2ch.net/test/read.cgi/unix/996949546/ 3. シェルスクリプト総合 その1 http://pc5.2ch.net/test/read.cgi/unix/1101820646/ 中略。検索して下さい 4. シェルスクリプト総合 その23 http://peace.2ch.net/test/read.cgi/unix/1404204950/
9 :テンプレ ◆01VkPKFOHeoR :2014/11/11(火) 03:46:48.40 .net □H. 関連スレ 1. sed http://peace.2ch.net/test/read.cgi/unix/1085730992/ 2. 正規表現 http://peace.2ch.net/test/read.cgi/unix/1039165754/ 3. Regular Expression(正規表現) Part13 http://peace.2ch.net/test/read.cgi/tech/1415149975/ 4. Perlについての質問箱 63箱目 http://peace.2ch.net/test/read.cgi/tech/1392906213/ 5. ECMAScript デス 4 http://peace.2ch.net/test/read.cgi/tech/1325448978/ 6. Rubyについて Part49 http://peace.2ch.net/test/read.cgi/tech/1382307475/ 7. Pythonのお勉強 Part50 http://peace.2ch.net/test/read.cgi/tech/1413474092/ 8. 【node.js】サーバサイドjavascript 2【Rhino】 http://peace.2ch.net/test/read.cgi/tech/1358937029/ □I. 現在評価待ち: X.n は予定した追加先。主にスレ立て人の判断保留用。
10 :テンプレ ◆01VkPKFOHeoR :2014/11/11(火) 03:47:27.08 .net □J. テンプレートの変更案や、おすすめの本、リンク等が有りましたら続けてどうぞ! 1. 検索しやすい様に、先頭に "コメント複数行\n指示\n□X" を付けて指定して下さい。 追加や、削除、挿入、移動、分割等と適切に書いて下さい。 900 レスまでに別の方の反論が無ければ、次にスレッドを立てる人が適当に判断して 取り込むはずです。 2. レス例 スクリプトスレを列挙するのは不要に感じる 削除 □H. 関連スレ H.5から8 ECMAScript, Rubyについて, Pythonのお勉強, サーバサイドjavascript 3. レス例 これは、聖なる本 追加 □E. 学習用テキスト 4.お勧め図書 a 伝承シェルプログラミング ( 199X年 ) http://www.example.net/404.html | テンプレートの変更案や、お勧めのリンク、本等が有りましたら、 V あ、張り切って〜、どうぞ〜! 案じゃ無くてつぶやきでも、どうぞ〜!
11 :名無しさん@お腹いっぱい。 :2014/11/12(水) 04:59:38.71 .net シャナスクリプトはまだですか?
12 :名無しさん@お腹いっぱい。 :2014/11/12(水) 07:18:57.54 .net シャロスクリプトもまだです
13 :名無しさん@お腹いっぱい。 :2014/11/12(水) 13:25:09.66 .net そういえば コート脱いだらハワイのミポリソ萌えスクリプトが サーバのどっかに転がってたかもなぁw
14 :名無しさん@お腹いっぱい。 :2014/11/12(水) 23:08:52.17 .net 前スレで長テンプレを提案してた人スレ立ったらテンプレそのままでざまぁwww とか思ってたらしっかり記載していたでござる なんか文面の雰囲気変わったな、もっと堅い感じだった気がするが
15 :名無しさん@お腹いっぱい。 :2014/11/13(木) 07:09:24.77 .net >>14 変えてないけどなあ 意見聞く際になるべく中立、丁寧語で書いたから、そういう印象なのかな? 意見を聞いて了承を得てからという作業は面倒臭かったが たとえ、その23 以前の短い1レスだけのテンプレのままを、立てる人がコピペするにしても 少なくとも Perl の矛盾した記述だけはなんとかしたい シェルスクリプト総合 その1 からずっと最近までは 「(Rubyや)awkまたはperlの方が適した処理にはそちらを使いましょう。」だけだった
16 :名無しさん@お腹いっぱい。 :2014/11/16(日) 22:28:48.41 .net お勧めの shell を教えて下さい。 ずっと(22年ぐらい) 自宅や学校の FreeBSD上で tcsh を login shell として使ってきましたが、 このスレを読んで、 csh 系スクリプトはお勧めでないことを知りました。 root で作業するときには、 sh も必要なので使いますし、スクリプトも書くのですが tcsh から sh系に移行できないでいます。 最近は仕事で数値計算をするときのプラットフォームが cygwin になってしまったため、 これを機に 自宅の FreeBSD でも、sh 系を login shell にするように切り替えようかとも思っています。 お勧めを教えて頂けませんでしょうか。 どうぞ宜しくお願い致します。
17 :名無しさん@お腹いっぱい。 :2014/11/16(日) 22:34:23.69 .net >>16 自己フォローです。 すみません。他に適切と思われるスレを見つけたので、移動します。 おまえら! shell は何を使っているんですか? http://peace.2ch.net/test/read.cgi/unix/1012330865/ お邪魔して申し訳ありませんでした。
18 :名無しさん@お腹いっぱい。 :2014/11/17(月) 00:19:12.19 .net お、おう
19 :名無しさん@お腹いっぱい。 :2014/11/17(月) 06:46:29.31 .net ログインシェルとスクリプトのシェルを一致させる必要は別にないのになぁ…
20 :名無しさん@お腹いっぱい。 :2014/11/17(月) 08:15:15.50 .net ログインシェルはzshでスクリプト書くときはbashかな
21 :名無しさん@お腹いっぱい。 :2014/11/17(月) 08:20:16.99 .net ログインシェルもスクリプトもashだ
22 :名無しさん@お腹いっぱい。 :2014/11/17(月) 08:52:41.49 .net Bシェル系同士なら一致させなくても良い
23 :名無しさん@お腹いっぱい。 :2014/11/17(月) 14:56:35.93 .net スクリプトは ash か dash
24 :名無しさん@お腹いっぱい。 :2014/11/17(月) 22:07:53.32 .net z750sh3
25 :名無しさん@お腹いっぱい。 :2014/11/18(火) 13:45:16.57 .net shで無駄にがんばる いやなんとなく続けてるだけか
26 :名無しさん@お腹いっぱい。 :2014/11/18(火) 17:45:34.74 .net /bin/sh でがんばっているよ 実体が ash だったり dash へのリンクだったりするだけでw
27 :名無しさん@お腹いっぱい。 :2014/11/18(火) 17:50:06.98 .net がんばるってほどのことかな スクリプト書く労力は他のシェルでもあんま変わらんでしょ?
28 :名無しさん@お腹いっぱい。 :2014/11/18(火) 18:04:52.35 .net ん? ログインシェルを/bin/shで頑張るって話でしょ? 補完なし、ヒストリーなし、aliasなしで。
29 :名無しさん@お腹いっぱい。 :2014/11/18(火) 18:09:15.90 .net スクリプトスレだからスクリプト動かす話だよ
30 :名無しさん@お腹いっぱい。 :2014/11/18(火) 18:24:14.49 .net >>19 の、ログインシェルとスクリプトのシェルを一致させる必要があるかどうか という話から来てるから、 ログインシェルの話だろ
31 :名無しさん@お腹いっぱい。 :2014/11/19(水) 20:36:46.43 .net emacsキーバインドのtcshでログインして、viでashスクリプト書いてるわ。
32 :名無しさん@お腹いっぱい。 :2014/11/20(木) 21:39:29.05 .net >>28 ashはファイル補完もヒストリー呼び出しもある。 aliasなんてうんこ。functionの方が強力。
33 :名無しさん@お腹いっぱい。 :2014/11/21(金) 05:09:42.89 .net >>32 それはFreeBSD拡張のashだね。
34 :名無しさん@お腹いっぱい。 :2014/11/21(金) 16:11:47.88 .net スレ違いっぽいので何だがw ログインシェルは zsh
35 :名無しさん@お腹いっぱい。 :2014/11/21(金) 16:14:13.45 .net >>33 大抵emacsのshell-modeで使うので、ヒストリやコンプリーションは なくてもそれほど困らない。
36 :名無しさん@お腹いっぱい。 :2014/11/21(金) 19:51:04.45 .net もういっそログインシェルをemacsにしろよw
37 :名無しさん@お腹いっぱい。 :2014/11/21(金) 19:58:39.53 .net ログインシェルを遊びでviにしてみたことならある。 その状態でログインしたviからシェルエスケープしようとすると vi変数でshell=vi状態になってるのでシェルのつもりでさらにviが起動されてハマる。
38 :名無しさん@お腹いっぱい。 :2014/11/21(金) 20:28:57.59 .net emacsをdisplay managerにしたようなOSがあったな。
39 :名無しさん@お腹いっぱい。 :2014/11/21(金) 20:41:52.18 .net Oberon?
40 :名無しさん@お腹いっぱい。 :2014/11/21(金) 20:53:09.31 .net apollo domain
41 :名無しさん@お腹いっぱい。 :2014/11/25(火) 12:45:00.26 .net for文で空白区切りのリストを後ろからループさせることはできないでしょうか? 下記の例だと「1 2 3」の順で表示されますが、これを「3 2 1」の順で表示させたいです。 VLIST="1 2 3" for val in $VLIST do echo $val done
42 :名無しさん@お腹いっぱい。 :2014/11/25(火) 13:00:52.50 .net >>41 VLIST='1 2 3' for val in `echo "$VLIST" | tac -s ' '` do echo "$val" done
43 :41 :2014/11/25(火) 13:39:35.78 .net >>42 すごい!できました。 ありがとうございました!
44 :名無しさん@お腹いっぱい。 :2014/11/25(火) 13:46:29.21 .net もう答えが出ちゃってますけど rev コマンドでも行けます $ for val in $(rev <<< "$VLIST"); do echo $val; done
45 :名無しさん@お腹いっぱい。 :2014/11/25(火) 13:56:09.14 .net tac便利、自分も使ってる
46 :名無しさん@お腹いっぱい。 :2014/11/25(火) 13:57:16.68 .net >>45 revだと、2桁以上の数字の時 数値の桁が入れ替わるので不可。 12 13 14 -> 41 31 21 みたいに
47 :名無しさん@お腹いっぱい。 :2014/11/25(火) 20:47:40.16 .net tac 知らなかったが便利そうだ。
48 :名無しさん@お腹いっぱい。 :2014/11/25(火) 21:00:07.87 .net 良かった。知らないのは俺だけじゃなかったんだなw GNU 方面は、他にも便利なコマンドがいろいろありそう・・・ (さすがに date コマンドで日付演算できるのは知ってた)
49 :名無しさん@お腹いっぱい。 :2014/11/25(火) 21:25:54.46 .net とりあえずcoreutilsに入ってるものは全部覚えておこうぜ 100個ぐらいしかないんだからさ
50 :名無しさん@お腹いっぱい。 :2014/11/25(火) 21:53:35.67 .net GNU Coreutils Cheat Sheet http://www.catonmat.net/blog/gnu-coreutils-cheat-sheet/
51 :名無しさん@お腹いっぱい。 :2014/11/26(水) 00:18:13.73 .net tac知ってたけど有効な使い道が見いだせないでいた しかし名前のセンスいいよな
52 :名無しさん@お腹いっぱい。 :2014/11/26(水) 00:36:12.96 .net slがtacの仲間だと思って入れた時の脱力感
53 :名無しさん@お腹いっぱい。 :2014/11/26(水) 06:02:33.63 .net >>46 要素ごとにもっかいrevで
54 :名無しさん@お腹いっぱい。 :2014/11/26(水) 06:28:19.23 .net どうせまたBash shockのようにCoreutils shockが起こるんだぜ? やめておけよw
55 :名無しさん@お腹いっぱい。 :2014/11/26(水) 06:42:34.79 .net tac使わずに標準コマンドまたは内部コマンドだけでやれ、というのがいい詰めスクリプト問題になるなぁ。
56 :名無しさん@お腹いっぱい。 :2014/11/26(水) 06:48:48.66 .net 再帰すればラクショー
57 :名無しさん@お腹いっぱい。 :2014/11/26(水) 06:50:18.91 .net VLIST='1 2 3' t=; for val in $VLIST; do t="$val $t"; done for val in $t do echo "$val" done
58 :名無しさん@お腹いっぱい。 :2014/11/26(水) 06:51:47.26 .net >>56 のあとに再帰すら使ってないラクショーな >>57 が書き込まれた件について
59 :名無しさん@お腹いっぱい。 :2014/11/26(水) 07:03:58.55 .net 再帰するならこうか。これ活用しにくい。これなら >>57 の方がいい VLIST='1 2 3' func() { if [ $# -gt 1 ]; then (shift; func "$@") fi echo "$1" } func $VLIST
60 :名無しさん@お腹いっぱい。 :2014/11/26(水) 12:51:29.43 .net 未熟者のオレに>>57 の動きを教えてくだせえ。。。
61 :名無しさん@お腹いっぱい。 :2014/11/26(水) 12:59:26.09 .net set -x してから >>57 を実行してみると分かると思う
62 :名無しさん@お腹いっぱい。 :2014/11/26(水) 17:31:45.44 .net >>57 即レスかっけー!これは濡れるw
63 :名無しさん@お腹いっぱい。 :2014/11/26(水) 19:08:42.67 .net >>57 が正統派に思えてくる 素直で余計なことをしていない 逆転と出力で2回forってるのが気にはなるが
64 :名無しさん@お腹いっぱい。 :2014/11/26(水) 20:30:20.12 .net #!/bin/bash VLIST='1 2 3 4 5' val=($VLIST) while [ ${#val[@]} -gt 0 ]; do echo ${val[${#val[@]}-1]} unset val[${#val[@]}-1] done
65 :名無しさん@お腹いっぱい。 :2014/11/26(水) 21:05:02.38 .net >>64 どうせbash使うなら素直にこうやれよ ↓ #!/bin/bash VLIST='1 2 3 4 5' val=($VLIST) for ((i=${#val[@]}-1; i >= 0; i--)) { echo ${val[i]} }
66 :名無しさん@お腹いっぱい。 :2014/11/27(木) 02:55:58.45 .net どうせ10個もアイテムないだろうから VLIST="1 2 3" set $VLIST for val in $9 $8 $7 $6 $5 $4 $3 $2 $1 do echo $val done
67 :名無しさん@お腹いっぱい。 :2014/11/27(木) 03:03:45.58 .net それだったら echo $9 $8 $7 $6 $5 $4 $3 $2 $1 でええやん…
68 :名無しさん@お腹いっぱい。 :2014/11/27(木) 03:42:20.68 .net >>59 bash/zsh なら local 変数使ってこんな感じに function reverse { local arg="$1" [ $# -gt 0 ] && { shift; reverse "$@"; echo -n "$arg "; } } 最後の改行はどうすべぇ…
69 :名無しさん@お腹いっぱい。 :2014/11/27(木) 04:05:50.71 .net 2段重ねにしてみる function reverse { function _reverse { local arg="$1" [ $# -gt 0 ] && { shift; _reverse "$@"; echo -n "$arg "; } } _reverse "$@" | sed 's/ $/\n/' }
70 :名無しさん@お腹いっぱい。 :2014/11/27(木) 12:26:34.92 .net キモい もっと綺麗にならんかね
71 :名無しさん@お腹いっぱい。 :2014/11/27(木) 13:33:00.01 .net >>70 毎日凝視して眺める訳じゃないから 動けばいい、安定してどんな場面でも問題が起こらなければいい。 シェルスクリプトなんてそういうレベルのもの しょせん手作業の積み上げだからね。
72 :名無しさん@お腹いっぱい。 :2014/11/27(木) 14:14:44.52 .net 「コードが汚くても安定して動けばいい」なんてのは 他人のコードをメンテしたり機能追加したことのない奴が言うセリフ
73 :名無しさん@お腹いっぱい。 :2014/11/27(木) 14:31:21.58 .net 継続してメンテしなきゃいけないスクリプトもあるし 一回動けばそれでいい使い捨てのスクリプトもある それだけの話っしょ
74 :名無しさん@お腹いっぱい。 :2014/11/27(木) 14:32:04.95 .net >>68 ,69 は再帰を知っていれば分かりやすいと思うけどなぁ
75 :名無しさん@お腹いっぱい。 :2014/11/27(木) 14:43:04.36 .net 再起知らないプログラマなんて存在しないだろ
76 :名無しさん@お腹いっぱい。 :2014/11/27(木) 15:06:22.08 .net >>72 自分しか使わないマシンでも他人にメンテをお願いする 前提で書かないとならないのかい? むしろメンテ側の人間には全く関係ない話しなんだが。
77 :名無しさん@お腹いっぱい。 :2014/11/27(木) 15:08:35.87 .net >>76 一ヶ月前の自分は他人と思えって諺があってだな 個人的には自分のコードを汚く書いてしまったせいで泣くはめになったことも良くある
78 :名無しさん@お腹いっぱい。 :2014/11/27(木) 15:12:04.96 .net いくらか使いこなせるようになったPerlerによくあった
79 :名無しさん@お腹いっぱい。 :2014/11/27(木) 15:23:18.84 .net >>77 良い師匠に巡り会ったじゃない。 もし1ヶ月前の自分が完全無欠なら精進の可能性を断たれるな。
80 :名無しさん@お腹いっぱい。 :2014/11/27(木) 17:23:22.21 .net 数年前にキレイに書いたつもりのスクリプトでもメンテ(改造)めんどいお
81 :名無しさん@お腹いっぱい。 :2014/11/27(木) 17:40:12.56 .net 保身のため、コードはなるべく汚く、自分しか読めないように書くこと。リストラ対策。
82 :名無しさん@お腹いっぱい。 :2014/11/27(木) 18:27:07.18 .net それは辞めたくなったときに困る
83 :名無しさん@お腹いっぱい。 :2014/11/27(木) 19:50:57.59 .net >>81 から>>82 でなんか笑った
84 :名無しさん@お腹いっぱい。 :2014/11/28(金) 00:13:06.85 .net >>80 書いた「つもり」だからだろ
85 :名無しさん@お腹いっぱい。 :2014/11/28(金) 00:35:46.31 .net 数年たちゃ腕もあがるだろうから当時の綺麗でも今の汚いなんだろうな
86 :名無しさん@お腹いっぱい。 :2014/11/28(金) 05:41:19.53 .net こういっちゃなんだが何年経とうが、何日経とうが シェルスクリプトに問題が出て治す必要があるなら 最初から書いた方が良いよ、、その時の実力で 最良のものが書ける。 1度書いた流れなら数年経っても頭に残ってるから 高速で仕上がるし、できた物を比べても大した違いは無い事も多い。 駆け出しの頃の書き物はまったく変わるのかもしれないが それはそれで、全く変わらないと困るだろ。 過去の駄作に手をいれてジタバタしたって無駄
87 :名無しさん@お腹いっぱい。 :2014/11/28(金) 08:44:15.84 .net 使い捨てのつもりだったのに、長期にわたって使われた上に 「これこういう風に変えられない?」とか言われて白目になったことはある。 もちろん一般化できる話じゃないとは思うけど。
88 :名無しさん@お腹いっぱい。 :2014/11/28(金) 12:08:04.77 .net 改行って^Mですよね? echo "1^M2"で2しか表示されません何故ですか? echo "1\r2"もそうでした echo "1\n2"はちゃんと改行されて1と2が表示されました ^M \r \nってどう使い分けるものですか? ^MはCTRL+V CTRL+Mで入力しました
89 :名無しさん@お腹いっぱい。 :2014/11/28(金) 12:22:58.74 .net \rと^Mは同じでCR。 \nと^Jは同じでLF。 CRとLFの違いは自分で調べろ。
90 :名無しさん@お腹いっぱい。 :2014/11/28(金) 12:35:54.36 .net CRはコンデンサと抵抗による時定数回路、 LFは低周波であることはわかりましたが、 そこから先がわかりません、よろしく女教授ください。
91 :名無しさん@お腹いっぱい。 :2014/11/28(金) 12:50:56.72 .net >>90 CRとLFやタブストップなどは 機械式タイプライター由来なので、一度現物を見れば忘れない ヤフオクで1000円くらいで手に入るから買ってみるといいよ 私女だけど
92 :名無しさん@お腹いっぱい。 :2014/11/28(金) 13:03:16.65 .net Macのテキストファイルの改行コードは CR ひとつなんだっけ
93 :名無しさん@お腹いっぱい。 :2014/11/28(金) 13:54:56.36 .net OSによって開業コード違いますよね。 Linuxは0xJで改行、BSDは0xMで改行しますよね。 どうしてこういう違いができたんでしょう? 簡単に返還する方法はありますか?
94 :名無しさん@お腹いっぱい。 :2014/11/28(金) 14:34:44.34 .net dos2ux これってHP依存コマンドだっけ?
95 :名無しさん@お腹いっぱい。 :2014/11/28(金) 14:46:02.61 .net >>93 ある ちょっとは調べろよ
96 :名無しさん@お腹いっぱい。 :2014/11/28(金) 15:13:15.53 .net >>95 改変コピペにかまうな
97 :88 :2014/11/28(金) 20:10:29.27 .net CRだと最後の文字しか表示しないってことですか? 例えば a<CR> b<CR> だったらbしか表示されないってことですか?
98 :名無しさん@お腹いっぱい。 :2014/11/28(金) 20:11:01.93 .net aを表示した後に行頭に戻ってbを表示している
99 :名無しさん@お腹いっぱい。 :2014/11/28(金) 20:12:58.92 .net http://ja.wikipedia.org/wiki/%E6%94%B9%E8%A1%8C%E3%82%B3%E3%83%BC%E3%83%89 http://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%A3%E3%83%AA%E3%83%83%E3%82%B8%E3%83%BB%E3%83%AA%E3%82%BF%E3%83%BC%E3%83%B3 この辺の話ね。
100 :名無しさん@お腹いっぱい。 :2014/11/28(金) 20:20:08.06 .net CRだとQを上げられないから、ボルフォロで正帰還かけるか、LCRにするべきだな。
101 :名無しさん@お腹いっぱい。 :2014/11/28(金) 20:30:52.68 .net >>92 組み込みでもCR改行の場合がある。 LFで良いだろうぜぇ…といつも思うわ
102 :名無しさん@お腹いっぱい。 :2014/11/28(金) 21:00:51.14 .net なんでこんな反応してんの?
103 :名無しさん@お腹いっぱい。 :2014/11/28(金) 21:47:52.95 .net 反応したら行けない理由は? >>102 に許可が射るのか?
104 :名無しさん@お腹いっぱい。 :2014/11/28(金) 22:03:40.21 .net 改行コードは初心者のころに誰でも一度は通る道だからねえ その次に通る道はBOM…だったけど最近はWindows触ってないから今どうなってるのか分からん
105 :名無しさん@お腹いっぱい。 :2014/11/28(金) 22:38:41.11 .net >>102 こんな反応じゃダメ?
106 :名無しさん@お腹いっぱい。 :2014/11/28(金) 23:06:22.07 .net 少し前に某サイトの解析スクリプト作ったときちょっと改行が面倒だった HTMLはWindowsで作ってるらしくgrepとsedで抽出したあとCRのごみがついてることに気がついた なのでCR削除したんだけどsambaで共有してるディレクトリに置いていたファイルを メモ帳で開くことがあってまたぐちゃぐちゃに、まあTeraPadとかで開けばいいんだけど 環境に依存してしまうので再度CRくっ付けて解決したな
107 :名無しさん@お腹いっぱい。 :2014/11/28(金) 23:11:48.20 .net 改行法師ンフフ
108 :名無しさん@お腹いっぱい。 :2014/11/28(金) 23:48:34.23 .net Macの標準がCRなんだよね
109 :102 :2014/11/29(土) 00:39:08.93 .net 質問内容稚拙だったり、回答後に更に質問したり、 そのあたりから定期的に張られる改変コピペだろうと思っただけなんだが 今回やたらみんな親切だから気になっただけだ
110 :名無しさん@お腹いっぱい。 :2014/11/29(土) 00:48:29.81 .net いまのとこ改変コピペっぽいのは>>93 だけだな
111 :名無しさん@お腹いっぱい。 :2014/11/29(土) 01:05:04.71 .net 改変コピペって・・・いつもこのスレに張り付いてんのかよ
112 :名無しさん@お腹いっぱい。 :2014/11/29(土) 01:37:27.48 .net $ echo "1\r2" 1\r2
113 :名無しさん@お腹いっぱい。 :2014/11/29(土) 01:49:55.58 .net $ echo -e "1\r2"
114 :名無しさん@お腹いっぱい。 :2014/11/29(土) 01:50:33.86 .net $ echo $'1\r2'
115 :名無しさん@お腹いっぱい。 :2014/11/29(土) 06:46:31.93 .net >>109 おそらくいつものコピペ荒らし http://peace.2ch.net/test/read.cgi/unix/1413122189/276
116 :名無しさん@お腹いっぱい。 :2014/11/29(土) 09:29:20.23 .net >>115 その後誘導されてこっちに移動してきた
117 :名無しさん@お腹いっぱい。 :2014/11/29(土) 10:00:47.02 .net 誘導も移動も自作自演
118 :名無しさん@お腹いっぱい。 :2014/11/29(土) 10:56:38.77 .net たぶんVimスレで誘導した奴==>>102 ==>>115
119 :名無しさん@お腹いっぱい。 :2014/11/29(土) 11:00:44.61 .net >>112-114 これいやらしくて自分も引っかかったんだけど >>112 はshで目的の動作をしてbashだとだめなんだよな 自分はシェルがbashでスクリプトはshなんだけど 実行結果が違うから引っかかって結構悩んだ
120 :名無しさん@お腹いっぱい。 :2014/11/29(土) 12:05:12.75 .net ひどい言いがかりだ
121 :名無しさん@お腹いっぱい。 :2014/11/29(土) 12:07:01.30 .net まだbashなんか使ってたのかよw
122 :名無しさん@お腹いっぱい。 :2014/11/29(土) 12:12:50.64 .net 鉄腕bash
123 :名無しさん@お腹いっぱい。 :2014/11/29(土) 12:27:45.78 .net 大腕硬爆衝
124 :名無しさん@お腹いっぱい。 :2014/11/29(土) 13:00:19.16 .net >>119 printfを使うか>>114 のように展開するのがいいみたいね https://fumiyas.github.io/2013/12/08/echo.sh-advent-calendar.html http://mattintosh.hatenablog.com/entry/2013/12/11/201503
125 :名無しさん@お腹いっぱい。 :2014/12/04(木) 14:50:44.76 .net Xpath形式のデータを整形式にするスクリプト知りませんか?
126 :名無しさん@お腹いっぱい。 :2014/12/05(金) 07:55:18.64 .net コマンドだけど xmllint http://stackoverflow.com/questions/15461737/how-to-execute-xpath-one-liners-from-shell http://stackoverflow.com/questions/4680143/how-to-parse-xml-using-shellscript
127 :名無しさん@お腹いっぱい。 :2014/12/07(日) 12:25:15.01 .net 1点ご質問させてください。 現在下記のようなシェルスクリプトを書いています。 trap 'echo "ERROR!!" ; exit 1' ERR hoge 2>&1 | tee test.log hoge2 2>&1 | tee test.log hoge3 2>&1 | tee test.log hoge4 2>&1 | tee test.log コマンド結果の標準出力と標準エラー出力の両方を ログファイルに残したいのですが この場合、最初のコマンドで戻り値に1が返されても 次のteeコマンドで戻り値が0になってしまうため trapで適切にエラーハンドリングできない状態です。 pipestatus使えば何とかなりそうなのですが その場合コマンドを実行するたびにif文で pipestatusを評価する必要があるため、冗長に感じてしまいます。 そのためもしより良い解決方法がありましたらご教授いただけませんか。
128 :名無しさん@お腹いっぱい。 :2014/12/07(日) 12:45:10.31 .net function にしてみるとか err_and_exit () { trap 'echo "ERROR!!" ; exit 1' ERR eval "$@" } err_and_exit 'hoge' 2>&1 | tee test.log
129 :名無しさん@お腹いっぱい。 :2014/12/07(日) 13:35:25.85 .net >>127 全部まとめて tee して、コマンドは && でつなげばエラーがあれば途中で打ち切ってくれるよ。 ( hoge && hoge2 && hoge3 && hoge ) 2>&1 | tee test.log
130 :129 :2014/12/07(日) 13:37:42.00 .net amp化けやだー 全角&で書き直すわ ( hoge && hoge2 && hoge3 && hoge4 ) 2>&1 | tee test.log
131 :名無しさん@お腹いっぱい。 :2014/12/07(日) 17:01:01.11 .net set -eじゃダメなのか?
132 :名無しさん@お腹いっぱい。 :2014/12/07(日) 17:03:41.55 .net >>127 #!/bin/bash exec > >(tee test.log) 2>&1 trap 'echo "ERROR!!" ; exit 1' ERR hoge hoge2 hoge3 hoge4
133 :名無しさん@お腹いっぱい。 :2014/12/07(日) 17:16:16.20 .net >>131 set -e false | true echo 'set -e してもパイプ下流が真だと終了しないよw'
134 :名無しさん@お腹いっぱい。 :2014/12/07(日) 21:22:56.83 .net >>128 >>129 >>132 お礼が遅くなりましたが、ご回答ありがとうございました。 今回用途としてはコマンドを実行してエラーが発生した段階で スクリプトを終了させたかったため、下記のような記述に変更しました。 (hoge && hoge2 && hoge3 && hoge4 ) 2>&1 | tee test.log [ ${PIPESTATUS[0]} - ne 0 ] && exit 1 hoge5 hoge6 >>127 と比べると「tee test.log」の重複した記述もなくなったので 少しすっきりしたように感じます。 良い解決方法を教えていただき、ありがとうございました。
135 :名無しさん@お腹いっぱい。 :2014/12/11(木) 09:38:51.84 .net >>86 なんだか勇気づけられた ありがとう
136 :名無しさん@お腹いっぱい。 :2014/12/12(金) 12:07:03.36 .net もう1週間も悩んでいるのに解決せず、ぜひ皆さんのお知恵を かしてください。 テキストの処理で、数千kBほどのテキストファイルをスクリプト で処理したいと思っています。環境はCENTOS6.5(i686,32ビット) で、シェルはBASHです。 シェルスクリプトの最初の方で得られた変数があり、これは動的に変化 します。 START="`grep start`"(←実際はgrepのあとにも処理あり) END="`grep end`" 二つには行番号が入っており、これをsedのアドレスの指定に使って START行からEND行までを削除させたいのです。この段階でデバグ のため、START、ENDともスクリプト途中にechoで表示させて値が きちんと入っているのを確認しています。 具体的には sed -e "$START,$ENDd" /dir/file を実行させても、sedは「,」が未知のコマンドです、と言ってき ます。 sed -e "${START},${END}d" /dir/file でも sed -e '"${START}","${END}"d' /dir/file でも駄目でした。sedが$を最終行と勘違いしているのかと sed -e "\$START,\$ENDd" /dir/file としてみても、これも駄目でした。 そもそも、sedのパラメータには変数は使えないのでしょうか? 同じ事がスクリプト中でできれば、sedでなくても構いませんが。 他におもいつきません。 ネットを検索すると、sedの置換(sed 's/$A/$B/'とか)ではそ ういう例もあるようですが。よろしくお願いします。
137 :名無しさん@お腹いっぱい。 :2014/12/12(金) 12:30:40.72 .net >>136 sed ${START},${END}d /dir/file で行けるよ。 変数 START ENDに余分なスペースが入ってないか注意。 スペース取るには、 START=`echo $START` END=`echo $ECHO` で、代入し直す。
138 :名無しさん@お腹いっぱい。 :2014/12/12(金) 12:34:18.14 .net ダブルクォートで囲っちゃえばいいんじゃない sed "${START},${END}d" /dir/file
139 :名無しさん@お腹いっぱい。 :2014/12/12(金) 12:39:48.69 .net START=1 END=2 printf "foo\nbar\nbaz\n" | sed "${START},${END}d" => baz printf "foo\nbar\nbaz\n" | sed " ${START} , ${END} d" => baz
140 :名無しさん@お腹いっぱい。 :2014/12/12(金) 12:44:39.31 .net >>136 > sedは「,」が未知のコマンドです、と言ってき これ、START 変数が undef か空っぽ("")なんじゃない? set -x してからスクリプトを実行してみて確かめたほうがいいよ。
141 :名無しさん@お腹いっぱい。 :2014/12/12(金) 12:45:54.06 .net エスパーすると $START とかに 全角スペース が入ってるw
142 :名無しさん@お腹いっぱい。 :2014/12/12(金) 12:55:10.57 .net なるほどw
143 :名無しさん@お腹いっぱい。 :2014/12/12(金) 13:05:14.93 .net $ printf "foo\nbar\nbaz\n" | sed ",2d" sed: -e 表現 #1, 文字数 1: 未知のコマンドです: 「,」
144 :名無しさん@お腹いっぱい。 :2014/12/12(金) 14:02:50.73 .net >>136 です。 やさしきみなさん、コメントありがとうございます。 これからいじくってみて、あとで結果報告いたします。
145 :名無しさん@お腹いっぱい。 :2014/12/12(金) 14:35:13.48 .net >>136 です。 デバグ用の echo $START echo $END の直後に、 START=`echo $START` START=`echo $END` を追加して実行したところ、な、な、なんと! 思い通りの結果が得られました。この一週間悩んだのが たった2行の追加でクリアされました。なんかポカーン状態 ですが。。。 画面上では空白が入ってないように見えただけかもしれま せん。>>137 さん助かりました。ありがとうございます。 >>139 さんの書かれたprintf文、参考になりました。まずこ れを試してみるべきでしたね。
146 :名無しさん@お腹いっぱい。 :2014/12/12(金) 14:52:02.24 .net たぶん後ろに改行が入ってたんじゃないかな ^Mのやつ
147 :名無しさん@お腹いっぱい。 :2014/12/12(金) 15:06:40.30 .net ^Mですか。結構、ネット上には^Mを消すという記事がありますね。 これのことだったのか、がてんいきました。
148 :名無しさん@お腹いっぱい。 :2014/12/12(金) 15:38:25.84 .net ^M だと、 START=`echo $START` やっても^Mは取れないから、違うと思うぞ
149 :名無しさん@お腹いっぱい。 :2014/12/12(金) 18:17:01.24 .net シェルスクリプトはXMLのDOM操作のようなことはできないんですか? あいだに要素を追加したりとか
150 :名無しさん@お腹いっぱい。 :2014/12/12(金) 19:08:12.46 .net 要素って具体的に何?
151 :名無しさん@お腹いっぱい。 :2014/12/12(金) 19:58:42.72 .net >>149 やればできると思うが、結構面倒だしな >>150 テキスト要素とかタグ要素とか
152 :名無しさん@お腹いっぱい。 :2014/12/12(金) 20:44:30.25 .net >>149 xslt使えよ
153 :名無しさん@お腹いっぱい。 :2014/12/13(土) 00:48:34.76 .net シェルスクリプトで、XMLのDOM操作をしたいってことなのか 「のようなこと」ってあるから別の何かかと思った 使ったことは無いんだけど、XMLgawkが便利そう
154 :名無しさん@お腹いっぱい。 :2014/12/13(土) 03:47:01.58 .net XML Starletとか
155 :名無しさん@お腹いっぱい。 :2014/12/15(月) 19:52:22.36 .net dashってのがあったんだ。 知らなかった。。。ash系なのか、ダッシュ島系なのか
156 :名無しさん@お腹いっぱい。 :2014/12/15(月) 20:11:02.18 .net 農家専用プログラミング言語
157 :グールドの著作を読むなら原書で :2014/12/16(火) 15:34:56.67 .net 1993年に慶応藤沢で書いたc shellプログラムです。fingerの結果から名字を省いて名前だけローマ字表示で取り出しHi xoxo!とするプログラム #!/bin/csh -f ### Compact wise program that extracts user's first name only from result of "finger" command on UNIX without any Admin rights ### set who = `finger -m $user` echo -n ' Hi '"$who[7]" echo '\!' (= Hi YOURNAME!) # First name comes at 7th place divided by spaces 当時の基準で採点してみてください。当時はこういうユーザフレンドリなプログラム見かけなかったんだけど。環境が違えばあったのかな?
158 :名無しさん@お腹いっぱい。 :2014/12/16(火) 17:02:19.69 .net >>157 1993年ってもうSVR4とかある時代だからそんなに古くないし、スクリプト内容も見所がない。 何を採点して欲しいやら。 強いて言うと、 cshスクリプト - 大減点 echoコマンドを2回に分ける必要ない - 減点 echoコマンドのところ改行のコピペミス? fingerコマンドの出力って環境によってたぶん違うよ。 ちなみにこちらの環境では finger の 4番目の位置にファーストネームが入る。 #!/bin/sh set `finger -m $USER` echo ' Hi '"$4"'!'
159 :グールドの著作を読むなら原書で :2014/12/16(火) 17:23:03.61 .net >>158 echoコマンドはこういう遣り方じゃないと勝手に改行が入って苦労しました。 !も特殊文字扱いだったということでしょう。 それはさておきいちいちwhoとか名前付けてsetしなくてよいということですね。 こういうプログラムって当時からやってました? sfcって遅れたキャンパスだったので、他大学の工学部などでは常識でも あのキャンパスでは非常識ということも多々あるかと思います。 とにかくHi [first name]っていうプログラムを動かしてたのは学内で自分だけでした。 プログラムの全体はLaTeXをエクステンション除いたファイル名だけ打ち込めば 任意のプリンタから自動印刷できるという内容なんですがね。
160 :名無しさん@お腹いっぱい。 :2014/12/16(火) 17:28:04.57 .net 昔話がしたいの?
161 :グールドの著作を読むなら原書で :2014/12/16(火) 17:38:54.20 .net 他キャンパスでは当時どうだったか知りたいだけ。これってアドミン権限除いた 基本的な構造はAmazon.comなどで金になってる商売だから。
162 :名無しさん@お腹いっぱい。 :2014/12/16(火) 17:51:39.82 .net 1993年ならUNIXとしては遅い方。 どこにでも普通に転がってるスクリプトだし、なんの変哲もないヘボスクリプトの何を評価しろとw
163 :グールドの著作を読むなら原書で :2014/12/16(火) 17:54:06.78 .net このスクリプトの特許持っている人ってどの国の何ていう人で取得年は何年?
164 :名無しさん@お腹いっぱい。 :2014/12/16(火) 17:54:28.41 .net なんで特許持ってる前提になってんの?
165 :グールドの著作を読むなら原書で :2014/12/16(火) 17:58:23.52 .net 金になるアイデアには特許が付き物でしょう。Amazon.comだって誰かに金払ってるでしょ。
166 :名無しさん@お腹いっぱい。 :2014/12/16(火) 18:23:54.80 .net もしかして、root権限がなくても/etc/passwdのフルネームフィルドが読める手法がすごい、って言ってるの? /etc/passwdは一般ユーザーでももともと読めるし、(たとえshadowでもパスワード部分以外は) NIS使ってるならypcat passwdは一般ユーザーでもできるし。 何の新規性もない。
167 :グールドの著作を読むなら原書で :2014/12/16(火) 18:38:28.60 .net >>166 そうではなくて、大したことの無いアイデアが金になることがある、ということを強調している。 Amazon.com等々が誰かに金を払っているのは事実の筈だし。無論アドミン権限の中のプログラム であってもデータから抜き出す作業は同じ。で、Amazonとかできた当初はHi某とか言ってこなかった 筈なので、そこら辺の経緯を知りたいわけ。日本語では英語名で抜き出すのは日本語名で抜き出す よりは厄介な筈。他に方法いくらでもあるから。
168 :名無しさん@お腹いっぱい。 :2014/12/16(火) 18:43:25.43 .net スレ違い。
169 :名無しさん@お腹いっぱい。 :2014/12/16(火) 20:12:06.60 .net 「俺が始めてだ、すげーだろー」は、その時点で主張しなけりゃ何の意味もない ちなみにBBSにおいてユーザーの識別子として一方向ハッシュを表示する手法を、提唱したのは俺だ。
170 :名無しさん@お腹いっぱい。 :2014/12/16(火) 21:46:14.47 .net >>167 そこまで知りたいなら調べて報告してくれ おしえてクンじゃなければね
171 :名無しさん@お腹いっぱい。 :2014/12/17(水) 00:10:11.34 .net >>167 > Amazon.com等々が誰かに金を払っているのは事実の筈だし。 まず、このソースを出してくれ
172 :名無しさん@お腹いっぱい。 :2014/12/19(金) 14:14:12.27 .net mksh; MirBSD Korn Shell ってのがあったんだ。 知らなかった。。。ash系なのか、ダッシュ島系なのか
173 :名無しさん@お腹いっぱい。 :2014/12/23(火) 07:08:11.72 .net おっさんそんな調子で年越せんのか しっかりしろ
174 :名無しさん@お腹いっぱい。 :2014/12/25(木) 17:52:08.23 .net さあ、クリスマスだよ。 学生さんは冬休みに、買ってもらった Mac, iPhone, android でシェルスクリプトを書いて遊ぼう!
175 :名無しさん@お腹いっぱい。 :2014/12/25(木) 18:54:27.87 .net 買ってもらった? 学生なら自分で買うわ。 生徒や児童なら買ってもらうかも知れんが。
176 :あ :2014/12/25(木) 19:32:27.25 .net /:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヽ /:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://ヽ:::::::::::::::| l:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::// ヽ::::::::::::::l l:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::/:::「'ヽ:::::::::::// ヽ:::::::::::| |::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ノl:::ノ l:::::::/ ヽ::::::::| ノ:::::::::::::::::::::::::::::::::::::::::::::::::::::/ ゙゙ ノ:::/ ,,;;;;;;,, ,,,,ヽ:::::l ):::::::::::::::::::::::::::::::::::::::::::::::/ ノ/ __,'''i: ('''__):::l )::::::::::::::::::::::::::::::::::::::::::::::::::/  ̄ ̄ン:. :「 ̄`ヾ 1:::::::::::::::::::::::「 `┤l:::::::::::::::::l  ̄ , ヽ ̄ l `l:::::::::::::::::::::ヽ :l li:::::::::::::/ ヽ /´ `l | ヽ::::::::::::::::::::::\_」 lヽ::::/ .l !:-●,__ ノ / ノ:::::::::::::::::::::::::::ノ | l `゙゙ i ,,;;;;;;;;;;;;;;;;;;;;, /ヽ ,/ ヽ::::::::::::::::::::::( l l::::::::.. /.:''/´ ̄_ソ / `ヽ ヽ:::::::::::::::ヽ | l:::::::::::... /::// ̄ ̄_ソ / \ ヴッ!! ヽ:::::::\| l::::::::::::::::... / :::.ゝ` ̄ ̄/ / ヽ ヽ:::l l:::::::::::::::::::..  ̄ ̄;;'' / ヽ l l;;;;;;:::::::::::::::.....;;;;............;;;;;;''ノ l l l '''''''''''''''''''''''''''''''''''''' ̄l | | http://www.youtube.com/watch?v=z2qK2lhk9O0
177 :名無しさん@お腹いっぱい。 :2014/12/26(金) 09:25:20.89 .net スレ違いかもだけど。。。 cronでスクリプト最速で回すとすると * * * * * /home/user/hoge.sh だけど、これ以上の頻度というか速度で実行できないのかな。 無限ループ覚悟で、hoge.shの最後に自分自身をコールするとか。
178 :名無しさん@お腹いっぱい。 :2014/12/26(金) 09:36:37.85 .net 自分自身でまわすならcronからは1回でいいじゃん
179 :名無しさん@お腹いっぱい。 :2014/12/26(金) 09:36:40.46 .net >>177 何かの待ち受けイベントチェックか? 普通にsleep 1とかしながらループすればいいじゃん。cron必要なし。 自分自身をコールするするのは無駄だからwhile :; do hoge; sleep 1; done で無限ループな。
180 :名無しさん@お腹いっぱい。 :2014/12/26(金) 09:55:10.70 .net *じゃなく*だ。
181 :名無しさん@お腹いっぱい。 :2014/12/26(金) 10:01:04.07 .net >>179 そうです、自宅鯖で、smtpからweb、ssh、イベント監視まで 全部やらせてるマシン。あんまとっぴなことすると、落ちそう なので。sleep入れれば、変な挙動はなくなりそうですね。 感謝!
182 :名無しさん@お腹いっぱい。 :2014/12/26(金) 12:23:03.31 .net >>179 さんの助言をそのまんまパクリ、 さっそくcronをやめて、do while ( `nantoka` ) done方式に変更。 前にcase文をつけてstart、stop、resartで起動、停止 できるようにした。sleep_secは10秒。これで様子みます。 しかし、良スレですね、ここは。いつも助けていただき感謝です。
183 :名無しさん@お腹いっぱい。 :2014/12/26(金) 12:27:53.31 .net ここの住人のかたがたは皆さん知ってるだろうけど 今浦島な私には、pgrep、pkillというコマンドが使える のが素晴らしいと思いました。(最近知った) なんか昔は、kill -9 `pidof nantoka`とかやってたのが なつかしいというか。
184 :名無しさん@お腹いっぱい。 :2014/12/26(金) 13:13:19.56 .net 話続けるなら名前欄にレス番入れてよ。
185 :名無しさん@お腹いっぱい。 :2014/12/27(土) 13:16:10.86 .net >>179 conky使ったりatに登録したりしてまわさなくても、 単純にそれで良かったんだなあ。
186 :名無しさん@お腹いっぱい。 :2014/12/31(水) 06:28:21.74 .net さあ、大晦日だよ。 学生さんは冬休みに、買ってもらった Mac, iPhone, android でシェルスクリプトを書いて遊ぼう!
187 :名無しさん@お腹いっぱい。 :2014/12/31(水) 13:02:42.92 .net iPhoneでどうやって書けるの?
188 :名無しさん@お腹いっぱい。 :2014/12/31(水) 13:58:30.05 .net http://ideone.com
189 :名無しさん@お腹いっぱい。 :2014/12/31(水) 19:47:38.53 .net 書くだけでなく、走らせて結果を見れるやり方 ただ調べた結果だけなので自己責任で * インターネットブラウザーのjavascript上で走るLinuxで http://bellard.org/jslinux/ * もしくは、インターネットブラウザーでwebアプリ http://ideone.com/ http://www.tutorialspoint.com/codingground.htm * もしくは、sshで他マシンにアクセス 試した事はないけど、学習用のFree UNIX Shell Accountsとかもある http://freeshell.org/ * Jailbreak
190 :名無しさん@お腹いっぱい。 :2015/01/01(木) 17:27:22.86 .net ggl 検索文字列 でw3mを使って検索文字列でググる要にしているのを拡張したい 具体的には コピーしてクリップボードの中に入ってる文字で検索しようと思う それ自体は簡単なのだけど、問題は --clipboard や -c のオプションを付けた時に実行されるのか、(ggl -c) それとももっとルーズに (ggl) と引数無しの状態で実行するか悩んでいる オプションとかのガイドラインてある? 例えば -l はリスト(at -l など)で使うとか、多くのコマンドは 引数がない時は -h オプションと同じように簡単な説明がでるとかのメジャーなガイドライン
191 :名無しさん@お腹いっぱい。 :2015/01/01(木) 18:19:12.95 .net GNUにはあった気がする
192 :名無しさん@お腹いっぱい。 :2015/01/01(木) 18:26:54.79 .net 引数ないときは「クリップボードから」なんて慣習は存在しない。
193 :名無しさん@お腹いっぱい。 :2015/01/01(木) 18:29:20.31 .net 興味があったのでちょっと検索してみた。 ガイドラインというのはわからないが、こんな感じで使われてるね〜みたいのなら、 http://catb.org/~esr/writings/taoup/html/ch10s05.html > The -a to -z of Command-Line Options > > Over time, frequently-used options in well-known Unix programs have established a loose sort of semantic standard > for what various flags might be expected to mean. The following is a list of options and meanings that should prove > usefully unsurprising to an experienced Unix user: http://www.gnu.org/prep/standards/html_node/Option-Table.html > 4.9 Table of Long Options > > Here is a table of long options used by GNU programs. It is surely incomplete, but we aim to list all the options that > a new program might want to be compatible with. If you use names not already in the table, please send > bug-standards@gnu.org a list of them, with their meanings, so we can update the table.
194 :名無しさん@お腹いっぱい。 :2015/01/01(木) 20:15:18.38 .net >>191-193 サンキュー URL先の情報にぴったりのオプション見つからないから -h を少し書いて後々忘れた時に備えて、 デフォルトでクリップボードで検索、 引数あるときはそれで検索にする
195 :名無しさん@お腹いっぱい。 :2015/01/01(木) 22:28:20.83 .net 両方用意すればいいんじゃない? 自分の名前がgglかgglcかで動作が変わるのも面白そう。
196 :名無しさん@お腹いっぱい。 :2015/01/01(木) 22:31:09.64 .net 名前同じで動作変わるとmanの括弧書きの数字が増えてややこしいみたいな?
197 :名無しさん@お腹いっぱい。 :2015/01/03(土) 21:18:53.70 .net そういやgetopt(3)ってPOSIXで規定されてるんだね。いまどきの *BSD, Linuxならlibcで持ってるものなんだな。 とあるソフトがGNUのgetopt.cを同梱しているので消してやりたいと思って いたんだけど、configureでgetoptの存在チェックしてlibcの方を優先して 使わせるようにするのがいいのかな。
198 :名無しさん@お腹いっぱい。 :2015/01/08(木) 11:56:42.54 .net 「とあるソフト」がGPLなら、一部を削除するのはライセンス違反。
199 :名無しさん@お腹いっぱい。 :2015/01/08(木) 12:01:18.92 .net >>198 なんで?
200 :名無しさん@お腹いっぱい。 :2015/01/08(木) 12:15:36.60 .net GPL V3 4. Conveying Verbatim Copies. 5. Conveying Modified Source Versions.
201 :名無しさん@お腹いっぱい。 :2015/01/08(木) 13:17:19.27 .net >>200 詳しく
202 :名無しさん@お腹いっぱい。 :2015/01/08(木) 18:53:35.81 .net 質問です 22, 32, 33, 45, 12, 47, 78, 44, 32, ... 数字がカンマで区切って700個書いてあるファイルがあります。 一行に数字が何個あるか規則性はありません。 このファイルを読み込んで数字を100個ずつ出力して7枚のファイルを 作りたいと思っています。シェルスクリプトでうまくできますでしょうか。 出力されたファイルには数字が一列で入っているほうがいいです。 お願いします。
203 :名無しさん@お腹いっぱい。 :2015/01/08(木) 19:41:16.46 .net GNU awk 限定 awk -v RS='' -v FPAT='( *[0-9]+, *\n?){1,100}' \ '{ for(i=1;i<=NF;i++){ gsub(" *\n"," ",$i); gsub(", *$","",$i); print $i > i ".txt"; } }' a.txt 上手く行けば 1.txt ... 7.txt というファイルができるはず
204 :名無しさん@お腹いっぱい。 :2015/01/08(木) 20:20:07.70 .net gawk じゃなくてふつーの awk で。 awk -v RS=, '{print $0+0 > int(NR/100)+1 ".txt" }'
205 :名無しさん@お腹いっぱい。 :2015/01/08(木) 20:36:37.66 .net int((NR-1)/100)+1 じゃないとダメだった。
206 :203 :2015/01/08(木) 20:51:41.18 .net あ、カンマはいらないのね
207 :203 :2015/01/08(木) 20:56:03.24 .net なおかつ1列を1行と読み間違えていた(´・ω・`)ショボーン
208 :名無しさん@お腹いっぱい。 :2015/01/08(木) 21:09:50.76 .net ファイル分割が有るし、awkでやる方が良いだろうけど、sedで 見易さの為-r付けてます #!/bin/sh sed -re ' :loop; $! { N; b loop; } s/,[ \n]+/, /g; s/([0-9]+, ){100}/&\n/g; ' | { i=1 while read line do echo "$line" > "$(( i++ )).txt" done }
209 :名無しさん@お腹いっぱい。 :2015/01/08(木) 21:43:46.83 .net awkもsedも出ちまったか tr -d '\r\n' < file
210 :名無しさん@お腹いっぱい。 :2015/01/08(木) 21:52:48.42 .net set -- `sed 's/,/ /g' input.txt` i=1 while [ $i -le 7 ]; do (j=1; while [ $j -le 100 ]; do echo "$1"; shift; done) > $i.txt
211 :209 :2015/01/08(木) 21:57:31.95 .net ミス tr -d '\r\n' < file | tr ',' '\n' | split -l 100
212 :名無しさん@お腹いっぱい。 :2015/01/08(木) 21:58:20.67 .net 考えてる途中で送っちゃった。やり直し set -- `sed 's/,/ /g' input.txt` i=1 while [ $i -le 7 ]; do (j=1; while [ $j -le 100 ]; do echo "$1"; shift; j=$((j + 1)); done) > $i.txt shift 100 i=$((i + 1)) done
213 :209 :2015/01/08(木) 22:01:45.08 .net >>212 お前は俺か
214 :名無しさん@お腹いっぱい。 :2015/01/08(木) 23:07:34.58 .net / *, */を改行に変換してhead
215 :名無しさん@お腹いっぱい。 :2015/01/09(金) 00:45:24.74 .net #!/bin/sh file=`cat "$1"` for i in `seq 1 7`; do for j in `seq 1 100`; do echo -n ${file%%,*}, >>$i.txt file=${file#*,} done done
216 :名無しさん@お腹いっぱい。 :2015/01/09(金) 01:53:20.06 .net GNU grep and GNU parallel $ grep -Po '[0-9]+' data.txt | parallel --pipe -L 100 -n 1 -k 'cat - > {#}.txt'
217 :名無しさん@お腹いっぱい。 :2015/01/09(金) 01:59:25.49 .net 211と216を足して $ grep -o '[0-9]\+' data.txt | split -l 100
218 :名無しさん@お腹いっぱい。 :2015/01/10(土) 02:47:23.50 ID:xezKGq2J7 .net が書き込めなくなったな とりあえずscから見ているが
219 :202 :2015/01/11(日) 18:59:23.53 .net >>203-217 ありがとうございます。本当に助かりました。 勉強不足を痛感。向上心を刺激されました。
220 :名無しさん@お腹いっぱい。 :2015/01/14(水) 13:42:56.50 .net $SEARCH に入れても awkが動いてくれません {}が引っかかってしまったのだろうか? どうすればよいのだろうか? while true do read SEARCH awk 'BEGIN{RF="---"}/${SEARCH}/' $save_to done
221 :名無しさん@お腹いっぱい。 :2015/01/14(水) 13:55:03.85 .net シングルクォートで囲まれてるから置換されないのよ
222 :名無しさん@お腹いっぱい。 :2015/01/14(水) 14:41:45.54 .net >>221 多少書き換えてみました しかし、まだ動きません clp.sh do read SEARCH export SEARCH awk -f ~/sbin/h_Searher.awk $save_to done ~/sbin/h_Searher.awk BEGIN{RF="---"}/$SEARCH/
223 :名無しさん@お腹いっぱい。 :2015/01/14(水) 17:08:45.99 .net perlで書いてしまった たった1行のためにつまずくとは悔しい do perl ~/Perl_instance/clp.pl done ~/Perl_instance/clp.pl open FH, '<', '$save_toと同じファイル'; my @LOG = <FH>; close FH; my $sentence = join ' ', @LOG; my @field = split /---/, $sentence; # my $search = "Ano"; chomp(my $search = <STDIN>); for my $lines (@field) { if ( $lines =~ m/${search}/ ) { print "---\n"; print "$lines\n"; } }
224 :名無しさん@お腹いっぱい。 :2015/01/15(木) 10:05:06.27 .net >>220 awk 'BEGIN{RF="---"}/'${SEARCH}'/' $save_to
225 :名無しさん@お腹いっぱい。 :2015/01/15(木) 12:37:55.02 .net >>224 thanks!
226 :名無しさん@お腹いっぱい。 :2015/01/15(木) 13:19:56.10 .net そして、$SEARCHにインジェクションされましたとさ。
227 :名無しさん@お腹いっぱい。 :2015/01/15(木) 18:30:18.23 .net GNU awk ならこんなのも awk -v SEARCH="$SEARCH" 'BEGIN{RF="---"}/SEARCH/' $save_to
228 :名無しさん@お腹いっぱい。 :2015/01/20(火) 01:40:59.45 .net こんな雑誌があることを初めて知った。 なんと月刊で20号以上出ているということにも驚いた。 シェルスクリプトマガジン vol.21 http://www.amazon.co.jp/dp/4904807154/ https://www.usp-lab.com/pub.magazine.html
229 :名無しさん@お腹いっぱい。 :2015/01/20(火) 05:22:18.17 .net その雑誌の半分はシェルスクリプト関係ない内容だから相当ネタがないんだろなって思った
230 :名無しさん@お腹いっぱい。 :2015/01/21(水) 01:45:14.76 .net ツールドフランスの実況が森の景色の解説になってるようなもんか
231 :名無しさん@お腹いっぱい。 :2015/01/22(木) 16:29:19.37 .net コマンドラインから手入力するとちゃんと動くスクリプトが、cronからだと動かない。 数日悩んだ結果。。。原因はLANGだった
232 :名無しさん@お腹いっぱい。 :2015/01/22(木) 16:32:53.58 .net ルンゲの罠
233 :名無しさん@お腹いっぱい。 :2015/01/22(木) 16:48:29.41 .net >>231 まれによくある。 スクリプトの先頭付近でLANGを設定しちゃうことも多いんだけど、Unix的でクールな ポータビリティのある手法を紹介してくれる偉い人が出てくるのを正座して待ちたい。
234 :名無しさん@お腹いっぱい。 :2015/01/22(木) 17:14:56.12 .net LANG=C
235 :名無しさん@お腹いっぱい。 :2015/01/23(金) 06:42:51.72 .net 偉い人が 共通したものは crontab 先頭で、タスク毎のは env NAME=VALUE COMMAND と答えるか、もうまるっきり答えないと予想した
236 :名無しさん@お腹いっぱい。 :2015/01/23(金) 10:00:16.40 .net 共通したものは crontab 先頭で、タスク毎のは env NAME=VALUE COMMAND
237 :名無しさん@お腹いっぱい。 :2015/01/23(金) 16:52:05.70 .net 偉い人のコピペ北ー! 自演っぽくて、コメントしづらい輪
238 :名無しさん@お腹いっぱい。 :2015/01/23(金) 17:30:03.53 .net この話はここで終わりって暗に言ってるんだろう
239 :名無しさん@お腹いっぱい。 :2015/01/24(土) 10:11:24.87 .net LANG=C sl 的な書き方ってどこまで有効なのかな? bashだけ?
240 :名無しさん@お腹いっぱい。 :2015/01/24(土) 10:23:49.81 .net >>239 bourne shell でも使える
241 :名無しさん@お腹いっぱい。 :2015/01/24(土) 15:26:45.88 .net 配列の命名規則ってある?
242 :名無しさん@お腹いっぱい。 :2015/01/24(土) 15:41:53.70 .net ない
243 :240 :2015/01/25(日) 04:39:03.74 .net みんなはどうしてる? しっくりくる表記法がないんだけど
244 :名無しさん@お腹いっぱい。 :2015/01/25(日) 05:18:01.83 .net しっくりこない表記がワカラナイ
245 :名無しさん@お腹いっぱい。 :2015/01/25(日) 11:18:23.60 .net 配列は邪教 使わないので規則などない
246 :名無しさん@お腹いっぱい。 :2015/01/25(日) 11:45:02.72 .net >>245 同意
247 :名無しさん@お腹いっぱい。 :2015/01/25(日) 12:36:31.55 .net 配列って変数名に連番を入れたりして使うことかと思ってたw
248 :名無しさん@お腹いっぱい。 :2015/01/25(日) 13:47:36.00 .net >>245 ,245 じゃあ代わりにどうすればよいのだ? まさかコピペ?
249 :名無しさん@お腹いっぱい。 :2015/01/25(日) 17:38:43.45 .net ポインタとか言い出すと見た
250 :名無しさん@お腹いっぱい。 :2015/01/25(日) 19:40:14.84 .net あほらし > じゃあ代わりにどうすればよいのだ? > ポインタとか言い出すと見た いかにも、めんどくさそう
251 :名無しさん@お腹いっぱい。 :2015/01/25(日) 19:46:57.10 .net 会話するネタがないんだなぁ……
252 :名無しさん@お腹いっぱい。 :2015/01/25(日) 21:21:36.60 .net じゃあおれからネタ xargsコマンドが好き。無理だと思ってた処理がワンライナーになる いっそ、powershellみたいにjsonパイプラインみたいなのがあればいいのにって思う
253 :名無しさん@お腹いっぱい。 :2015/01/25(日) 22:41:49.00 .net 俺がよく使うのはfind ... | xargs grep だったかな 他どんな場面で使うっけ
254 :名無しさん@お腹いっぱい。 :2015/01/25(日) 23:37:38.84 .net \ls -1t *.* |head -3|xargs head
255 :名無しさん@お腹いっぱい。 :2015/01/26(月) 12:06:00.33 .net >>236 *.*の3行が、headへの標準入力じゃなくて、引数として与えられるのか。 おもしろいなあ。
256 :名無しさん@お腹いっぱい。 :2015/01/26(月) 20:35:10.75 .net xargs で何か面白い事は無いかと、あれこれ考えた結果 ループになる xargs loop で検索したら結構見つかるので 珍しくは無いんだろうが、まあ、一応 <<EOF xargs -I i sh -c 'seq 3 | xargs -I j echo i j' foo bar baz qux quux corge grault EOF
257 :名無しさん@お腹いっぱい。 :2015/01/27(火) 02:26:05.37 .net xargs は並列処理でもよく使うかな 例えば find ... | xargs -P 12 -n 16 gzip とすると12プロセスがファイルの圧縮を行う
258 :名無しさん@お腹いっぱい。 :2015/01/27(火) 03:09:32.08 .net \nをファイル名に仕込まれて爆死する
259 :名無しさん@お腹いっぱい。 :2015/01/27(火) 06:47:01.92 .net find ... -print0 | xargs ... -0 ... ってしとけばええやん…
260 :名無しさん@お腹いっぱい。 :2015/01/27(火) 07:02:05.92 .net \0をファイル名に仕込まれて(ry
261 :名無しさん@お腹いっぱい。 :2015/01/27(火) 07:38:50.39 .net 仕込めるんだっけ?
262 :名無しさん@お腹いっぱい。 :2015/01/27(火) 08:17:49.81 .net find ‥ -print0 を知らん奴もいるんだな w
263 :名無しさん@お腹いっぱい。 :2015/01/27(火) 08:20:05.07 .net >>261 API だと思い付かない ディスクを直接バイナリ編集すれば可能かも
264 :名無しさん@お腹いっぱい。 :2015/01/27(火) 08:25:13.28 .net >>262 実装によってはないのよ
265 :名無しさん@お腹いっぱい。 :2015/01/27(火) 08:28:26.16 .net solarisにはまだない
266 :名無しさん@お腹いっぱい。 :2015/01/27(火) 12:18:24.66 .net >>264 移植すりゃいいじゃん
267 :名無しさん@お腹いっぱい。 :2015/01/27(火) 12:56:34.51 .net 大抵は -exec {} + で用が足りる
268 :名無しさん@お腹いっぱい。 :2015/01/27(火) 13:01:19.27 .net >>263 カーネル内でもファイル名は0終端で扱ってるから無理だね 実際のサイズと異なる事でカーネルクラッシュなどまずいことが発生する可能性は あるけど、それは普通にカーネル内バグ
269 :名無しさん@お腹いっぱい。 :2015/01/27(火) 13:29:38.19 .net >>266 そういう話じゃないよ
270 :名無しさん@お腹いっぱい。 :2015/01/27(火) 13:41:29.10 .net >>269 半分冗談だよ、いちいち気にしてたら禿げるぞ
271 :名無しさん@お腹いっぱい。 :2015/01/27(火) 13:43:51.02 .net 冗談に見えないし、 冗談だとしても面白くないよ
272 :名無しさん@お腹いっぱい。 :2015/01/27(火) 15:15:56.23 .net 大抵は -exec \{\} + とエスケープなりクォートで囲むなりするのを忘れる
273 :名無しさん@お腹いっぱい。 :2015/01/27(火) 16:27:07.47 .net {}をquoteしなきゃならないカタワ専用シェルって何?
274 :名無しさん@お腹いっぱい。 :2015/01/27(火) 21:10:27.07 .net -execはなんか怖いんだよなぁ 理由はないんだけど
275 :DAEMON :2015/01/27(火) 21:45:21.58 .net >>273 シ タッ・・(Φ Φ+)・・・ 恐らく Perl です
276 :DAEMON :2015/01/27(火) 22:02:58.78 .net 続 >>275 シ タッ・・(Φ Φ+)・・・ 例えば、基礎公文で… while (test) { open test-file.txt(filehandle) , ">test-file.pl" print test-file.txt close test-file.txt } 斯様な様にですか…
277 :名無しさん@お腹いっぱい。 :2015/01/28(水) 00:14:24.97 .net >>272 で、{}をクォートする必要があるシェルって何?
278 :名無しさん@お腹いっぱい。 :2015/01/30(金) 19:56:12.76 .net wait入れるsleepだが、引数が整数だけだろと思ってたら、整数じ ゃなくてもいいというので、0.1入れてやってみたら、ほんとに動 作してるっぽい。manには何も書いておらん。つかえねーman
279 :名無しさん@お腹いっぱい。 :2015/01/30(金) 20:00:01.61 .net うちのsleepはGNUだけど man sleep すると info 見ろって書いてあって、info 見たら: Historical implementations of `sleep' have required that NUMBER be an integer, and only accepted a single argument without a suffix. However, GNU `sleep' accepts arbitrary floating point numbers (using a period before any fractional digits).
280 :名無しさん@お腹いっぱい。 :2015/01/30(金) 21:57:35.82 .net >>279 おお、サンクス
281 :名無しさん@お腹いっぱい。 :2015/01/31(土) 12:09:54.06 .net >>274 客先環境での操作なんかだとおおいにある xargsなら、-pとか-tがあるので安心
282 :名無しさん@お腹いっぱい。 :2015/01/31(土) 13:19:36.31 .net >>281 同意が得られて異端じゃないと安心出来た 尚就職してから今まで客先環境でしか働いたことがない模様
283 :名無しさん@お腹いっぱい。 :2015/01/31(土) 17:47:20.57 .net こうじゃなくて v=${v:-default} こうでしょ : ${w:=default} っていうの有りますか?皆さんの、そういうの教えて下さい
284 :名無しさん@お腹いっぱい。 :2015/02/01(日) 00:46:16.74 .net こうじゃなくて echo -e 'hoge\nfuga' こうでしょ printf 'hoge\nfuga\n'
285 :名無しさん@お腹いっぱい。 :2015/02/01(日) 00:47:04.51 .net 俺はecho派
286 :名無しさん@お腹いっぱい。 :2015/02/01(日) 07:05:52.05 .net 公文い公文
287 :名無しさん@お腹いっぱい。 :2015/02/01(日) 13:49:52.79 .net echo は -e が必要だったり不要だったりモノによってバラバラなんで printf だなぁ。 OSX の /bin/sh は bash だけど、同じ bash のはずなのに bash -c "echo -e 'hoge\nfuga'" と sh -c "echo -e 'hoge\nfuga'" で 結果が違うとかめんどくさすぎる。
288 :名無しさん@お腹いっぱい。 :2015/02/01(日) 18:28:40.97 .net 似た様なのだけど、 こうじゃなくて function f () { echo hoge hoge } こうでしょ f () { echo hoge hoge }
289 :名無しさん@お腹いっぱい。 :2015/02/01(日) 19:10:32.63 .net 個人的には上なんだけど 最近やってるのがjavascriptだからかな
290 :名無しさん@お腹いっぱい。 :2015/02/02(月) 10:43:19.51 .net 変数は大文字か小文字か。 個人的には環境変数と区別するために小文字なんだけど、 社内の他の人が書いたのを見ると大文字ばっかりなんだよな。
291 :名無しさん@お腹いっぱい。 :2015/02/02(月) 12:18:06.01 .net いつexportしても問題が出ないような命名規則なら問題無しw
292 :名無しさん@お腹いっぱい。 :2015/02/02(月) 21:56:58.79 .net 質問です。 linux mint 17.1 でコマンドの練習してるのですが、 % ls -l だと色々ずらーっと出るんですけど、本に書いてあるとおり、 ソートコマンドを練習しようとして % ls -l | sort +4 と打ち込んでファイルサイズで降順ソートしたかったのですが sort: cannot read: +4: そのようなファイルやディレクトリはありません と出てしまいます。 bashですが、シェルの種類によってはこのオプション使えないんでしょうか。 -r等は正常に動作します。
293 :名無しさん@お腹いっぱい。 :2015/02/02(月) 22:04:13.81 .net sort -k4 sort -k4r
294 :名無しさん@お腹いっぱい。 :2015/02/02(月) 22:34:00.27 .net で、できました!有り難うございます!
295 :名無しさん@お腹いっぱい。 :2015/02/03(火) 03:09:11.93 .net >>292-294 sort +4と同じ指定はsort -k5 たぶんls -lでファイルの所有者が全て同じで、できたと勘違いしてる --debugオプションをつけるとわかりやすい https://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html > On older systems, sort supports an obsolete origin-zero syntax ‘+pos1 [-pos2]’ for specifying sort keys. > The obsolete sequence ‘sort +a.x -b.y’ is equivalent to ‘sort -k a+1.x+1,b’ if y is ‘0’ or absent, > otherwise it is equivalent to ‘sort -k a+1.x+1,b+1.y’. sort +4という古いオプションの扱いはPOSIXのバージョンによるってことかな https://www.gnu.org/software/coreutils/manual/html_node/Standards-conformance.html#Standards-conformance
296 :名無しさん@お腹いっぱい。 :2015/02/03(火) 06:48:02.67 .net Linux だったら ls コマンドは GNU coreutils の ls だろうから、 $ ls -l --sort=size or $ ls -lS でええじゃまいか
297 :名無しさん@お腹いっぱい。 :2015/02/03(火) 08:37:05.99 .net ( 検索結果で上位に上がると期待して ) 日本語訳を貼り付けておきます http://linuxjm.sourceforge.jp/info/GNU_coreutils/coreutils-ja.html http://linuxjm.sourceforge.jp/info/GNU_coreutils/coreutils-ja_15.html#Standards-conformance
298 :確認不足だった orz :2015/02/03(火) 08:40:20.78 .net 訂正 ( 検索結果で上位に上がると期待して ) 日本語訳を貼り付けておきます http://linuxjm.sourceforge.jp/info/GNU_coreutils/coreutils-ja_15.html#Standards-conformance http://linuxjm.sourceforge.jp/info/GNU_coreutils/coreutils-ja_43.html#sort-invocation
299 :名無しさん@お腹いっぱい。 :2015/02/04(水) 22:55:20.92 .net >>298 おお、infoの日本語訳できたんだ man on WWWのように検索できるとさらにいいね
300 :名無しさん@お腹いっぱい。 :2015/02/08(日) 15:04:24.54 .net よく使うワンライナーなどはどうやって呼び出すものなんですか? 何か簡単に管理する方法がありませんかね?
301 :名無しさん@お腹いっぱい。 :2015/02/08(日) 15:06:57.37 .net zshならzawから vimのUnite historyの様なgrep効くから、それで呼ぶか 編集して完成させる
302 :名無しさん@お腹いっぱい。 :2015/02/08(日) 16:40:17.45 .net >>301 anything.elみたいなヒストリーサーチみたいですね。 bashなのでどうしたものか。
303 :名無しさん@お腹いっぱい。 :2015/02/09(月) 09:34:08.43 .net >>300 aliasじゃないの?
304 :名無しさん@お腹いっぱい。 :2015/02/09(月) 10:04:38.99 .net 自分で書いたスクリプトはいつでも、一見、間違いのないように見えるw
305 :名無しさん@お腹いっぱい。 :2015/02/09(月) 18:00:27.27 .net まったくだ(´・ω・`) ぼくの書いたスクリプトが動かないなんてけしからん(´・ω・`) シェルの方を治したまえ
306 :名無しさん@お腹いっぱい。 :2015/02/09(月) 18:21:02.80 .net cygwinからLinuxに移植したシェルスクリプトが,ping部分で成功しなかった declare -A URL URL=( ["Vim_part24"]="http://peace.2ch.net/test/read.cgi/unix/1413122189/" ["vim_part5"]="http://anago.2ch.net/test/read.cgi/software/1379912425/" ) # ping for download ping_error=0 for i in ${!URL[@]} do # ping ${URL[$i]} > /dev/null ping -n 1 `echo ${URL[$i]} | awk -F"/" '/http/{print $3}'` > /dev/null if [ "$?" -ne 0 ]; then echo "${i} : can not contact ${URL[$i]}" ping_error=1 fi done
307 :名無しさん@お腹いっぱい。 :2015/02/09(月) 18:41:13.94 .net ping -c 1 ... にするべきじゃないの? pingのコマンドオプションって統一されてないよなぁ
308 :名無しさん@お腹いっぱい。 :2015/02/09(月) 19:27:08.45 .net 配列を使うのはダサいと思うのです。 #!/bin/sh url_list=' Vim_part24 http://peace.2ch.net/test/read.cgi/unix/1413122189/ vim_part5 http://anago.2ch.net/test/read.cgi/software/1379912425/ ' ping="ping -w 3 -c 1" echo "$url_list" | while read thr url __; do case "$url" in https?://*) host=`echo $url | cut -d/ -f3` if ! $ping $host >/dev/null; then echo "$thr: cannot contact $url" err=1 fi ;; esac done exit $err
309 :名無しさん@お腹いっぱい。 :2015/02/09(月) 19:28:49.19 .net ああ、case の条件部分がおかしい。 http://*|https://*|ftp://*) だな。
310 :名無しさん@お腹いっぱい。 :2015/02/09(月) 19:33:01.27 .net わざわざpingするのがわからん
311 :名無しさん@お腹いっぱい。 :2015/02/09(月) 19:34:49.22 .net pingしなくても wget -T でタイムアウトできるしな
312 :名無しさん@お腹いっぱい。 :2015/02/09(月) 19:39:42.45 .net 俺んところの現場でも、ssh する前に ping するスクリプトを書いてる人がいたな。 これって、どこかに由来する文化なのかな? (cronを「くーろん」と呼ぶみたいな?いや、これは違うかな……)
313 :名無しさん@お腹いっぱい。 :2015/02/09(月) 19:43:34.71 .net >>307 サンキュー windowsのsystem32/ping.exeが呼ばれてた そりゃ移植性がないわけだ >>308-309 コードありがとう >>311 -Tオプションなんてあったのか >>310 pingで鯖落ちてないか検査した後w3mで複数のURLから取ってきて スレの上下の不要な広告など取り除いてから git commit して その差分見るから 全部安全に通信できるか見てからやらないと、差分の時にちょっと問題になる 通信できなかったスレがマイナス差分で大量表示されたり、 次回は大量追加されたり git reset hard HEAD~ するぐらいならあらかじめ通信検査してからやろうと思った
314 :名無しさん@お腹いっぱい。 :2015/02/09(月) 19:45:19.02 .net >>311 それもあるし、どれかひとつでもエラーでping_error=1だからサーバの状態を確認してる感じがしない
315 :名無しさん@お腹いっぱい。 :2015/02/09(月) 19:47:43.57 .net もうひとつバグってた。こうしないと常に0で終了しちゃう。 echo ... | { while read ... do ... done exit $err }
316 :名無しさん@お腹いっぱい。 :2015/02/09(月) 20:32:51.35 .net >>313 > -Tオプションなんてあったのか 通信系のコマンドで、タイムアウトが指定できないものはスクリプトからは利用しないとか、 そういうことは考えないで作っちゃうタイプの方ですか? ちなみに、大抵の通信系コマンドはタイムアウトが指定できるような気がする。
317 :名無しさん@お腹いっぱい。 :2015/02/09(月) 20:46:31.70 .net Windows 7 からだっけか? デフォルト設定では ICMP echo をフィルタリングしてるのって
318 :名無しさん@お腹いっぱい。 :2015/02/09(月) 21:22:03.82 .net >>303 > >>300 > aliasじゃないの? 長いワンライナーは場面ごとに手直しする必要のあることが多いから、 それだと融通がきかないことがありませんか?
319 :名無しさん@お腹いっぱい。 :2015/02/09(月) 22:07:20.56 .net 2chのスレが更新されてるかどうか(新しいレスがあるかどうか)チェックするのは自分もやってる いろいろやり方はあるだろうけど、自分の場合は libwww-perl(debian系)に入ってるHEADコマンドで.datファイルのLast-Modifiedフィールドみたいなのを見てる
320 :名無しさん@お腹いっぱい。 :2015/02/10(火) 06:45:24.43 .net >>312 ここに書いてる奴本人じゃね?w
321 :名無しさん@お腹いっぱい。 :2015/02/10(火) 06:59:04.70 .net >>317 XP じゃね? 毎回設定してたような気がする 2K は忘れた
322 :名無しさん@お腹いっぱい。 :2015/02/10(火) 07:03:40.32 .net >>312 ダイヤルアップとかで最初の接続に時間がかかるから ping でネットワーク接続してから、おもむろに目的のアプリケーションで接続するって言うのがあったような気がする
323 :名無しさん@お腹いっぱい。 :2015/02/10(火) 10:03:19.02 .net スクリプト化してると問題があったとききりわけが必要だから ping打っているかどうか確認してるんじゃ? >>322 ちょっと違うけど自動切断有効にしてて切れてほしくないときに ping打ちっぱなしにしてたな
324 :名無しさん@お腹いっぱい。 :2015/02/10(火) 10:06:07.01 .net >>319 差分は取得しないのか
325 :名無しさん@お腹いっぱい。 :2015/02/10(火) 10:12:53.45 .net 皆、同じようなことやってるんだなw
326 :名無しさん@お腹いっぱい。 :2015/02/10(火) 10:32:51.28 .net >>323 切り分けといっても、pingが成功したらネットワーク的に問題ないとは言えないわけで…… 対話環境で作業している時だったら、お手軽だから「まずping打ってみるか」というのは 分かる気がするけど、スクリプトの場合では中途半端なように思えます。 「ICMPは通るね」というのをスクリプト中から確認できても、それほど嬉しくはないよね?
327 :名無しさん@お腹いっぱい。 :2015/02/10(火) 10:41:38.26 .net そういえばhttps対応とかが面倒で結局wget丸投げ取り込みとかに逃げてたりするけど 正しい汚染チェックってどうするべきなんだろう?
328 :名無しさん@お腹いっぱい。 :2015/02/10(火) 11:00:13.65 .net >>326 ネットワークよりむしろ、ローカル的な問題がない事が確認できるんじゃないかな?
329 :名無しさん@お腹いっぱい。 :2015/02/10(火) 11:05:04.42 .net >>328 どういうこと?
330 :名無しさん@お腹いっぱい。 :2015/02/10(火) 11:07:57.10 .net >>322 なるほど。 自分ではそういう環境でスクリプトを走らせたこと無いけど、必要性は理解できる気がする。
331 :名無しさん@お腹いっぱい。 :2015/02/10(火) 11:11:26.56 .net でも今どきそんな環境あんまりないよなぁ
332 :名無しさん@お腹いっぱい。 :2015/02/10(火) 11:11:41.05 .net >>329 ネットワークの問題:待つ ローカルの問題:別の方法を試す
333 :名無しさん@お腹いっぱい。 :2015/02/10(火) 11:21:02.15 .net >>332 すみません、日本語でお願いします
334 :名無しさん@お腹いっぱい。 :2015/02/10(火) 11:23:49.29 .net 自力で何とかなる問題とならない問題を切り分ける。
335 :名無しさん@お腹いっぱい。 :2015/02/10(火) 11:41:25.85 .net pingで切り分けになるか?
336 :名無しさん@お腹いっぱい。 :2015/02/10(火) 11:43:10.44 .net F5アタック状態でいいならどうでもいいかもしれないな。
337 :名無しさん@お腹いっぱい。 :2015/02/10(火) 12:28:31.34 .net pingはじくところもあるから URL次第
338 :名無しさん@お腹いっぱい。 :2015/02/10(火) 12:55:57.86 .net >>312 ベテランなら、サーバ自体死んでるか、sshdが動いてない(かfirewall等) の切り分けを考慮してるんだろう。実際に使うスクリプトとしては正しい
339 :名無しさん@お腹いっぱい。 :2015/02/10(火) 13:20:41.45 .net >>324 差分は専ブラで取得です^^;
340 :名無しさん@お腹いっぱい。 :2015/02/10(火) 13:36:06.53 .net >>339 差分なんて git 以外にも diff や vimdiff 等あるからやってみたら?
341 :名無しさん@お腹いっぱい。 :2015/02/10(火) 14:15:44.40 .net いやレンジ指定じゃないかと?
342 :名無しさん@お腹いっぱい。 :2015/02/10(火) 19:43:43.25 .net >>300 alias も出たから、ついでに... 自分は ${HOME}/bin に、スクリプトとして書いているが、場所はどこでもいいから どこかにまとめて保存しておけばいいのでは?例えば、~/bin/oneliner/ 等 それらのファイルは、grep で検索も出来るし、それで見つかった script を編集するなら history -r script で履歴に読み込んで、コマンドライン上で編集が出来る (あと、あんまり使わないけど) bash zsh で、Ctrl-x Ctrl-e で editor を呼び出して 読み込んで実行とか
343 :名無しさん@お腹いっぱい。 :2015/02/10(火) 22:45:11.06 .net >>342 > (あと、あんまり使わないけど) bash zsh で、Ctrl-x Ctrl-e で editor を呼び出して > 読み込んで実行とか Ctrl+rでヒストリ検索でいいんじゃない?
344 :名無しさん@お腹いっぱい。 :2015/02/10(火) 23:29:41.64 .net history -r script を bash の話と断って無かった。失礼しました >>343 スクリプトファイルから履歴に読み込むと、行毎に履歴の最後に追加されるから previous-history Ctrl-p (もしくは↑)で十分だけどね
345 :名無しさん@お腹いっぱい。 :2015/02/14(土) 04:53:42.98 .net ^string1^string2^ !n:gs/string1/string2/ !-n 等 bash で履歴を利用するものは shopt -s histverify すれば確認・編集が出来て便利だよね
346 :名無しさん@お腹いっぱい。 :2015/02/16(月) 18:20:07.18 .net スレ違いスマソ どうなっちゃうの、2ちゃん? なんか、ツイッターとかFBみたくなるのか? 極端に利用者減ると思うけどな。 1 :ニライカナイφ ★ 転載ダメ©2ch.net:2015/02/16(月) 16:24:24.83 ID:???* ◆2ちゃんねるがdatを近日廃止、さらにウェブスクレイピングを用いた専用ブラウザ開発・ 公開は禁止して2015年3月3日以降はAPI経由の許諾制に 「2015/3/3以降、2ch.net専用ブラウザ(以下「専用ブラウザ」)を開発、 公開するには、2ch.netの所有者であるRaceQueen社の許諾を得て、 2ch.netが提供するAPI(以下「API」)を用いて開発する必要があります」 http://daily.2ch.net/test/read.cgi/newsplus/1424071464/
347 :名無しさん@お腹いっぱい。 :2015/02/16(月) 18:27:38.42 .net いざとなったらこれだな テキスト広告除去 w3m some_2ch_URL |sed '1,/^$/d'|sed -e '/^━━━*$/,$d'|sed '$d' 例えば w3m http://peace.2ch.net/test/read.cgi/unix/1415634843/ |sed '1,/^$/d'|sed -e '/^━━━*$/,$d'|sed '$d'
348 :名無しさん@お腹いっぱい。 :2015/02/16(月) 18:50:00.38 .net スレ違いだとわかってるならよそでやれ
349 :名無しさん@お腹いっぱい。 :2015/02/16(月) 19:15:37.65 .net スレ的にはxdotoolとかでブラウザ操作すれば問題ないのではないだろうか?
350 :名無しさん@お腹いっぱい。 :2015/02/21(土) 14:32:41.68 .net 【実況】向かいの部屋に住んでいる女子高生が窓を開けたままオナニーしているんだが http://hayabusa6.2ch.net/test/read.cgi/network/1387872458/
351 :名無しさん@お腹いっぱい。 :2015/02/24(火) 13:40:24.51 .net 質問です。 あるテキストの中に含まれる、特定のキャラクタの数を数え たいのですが、すごく簡単にできそうで、わからなくて 悩んでおります。grepでもwcでもできそうで、できません。 ご教授お願いします。
352 :名無しさん@お腹いっぱい。 :2015/02/24(火) 14:17:32.87 .net >>351 全キャラクタの後ろに改行を入れて、grep 'キャラクタ' | wc -lで数えられる 改行を入れるのはOSによって面倒だったりするが。。。
353 :名無しさん@お腹いっぱい。 :2015/02/24(火) 14:32:17.30 .net >>351 キャラクタ A を数える場合、 tr -dc A | wc -c >>352 すみませんが詳しい方のみ回答をお願いします
354 :名無しさん@お腹いっぱい。 :2015/02/24(火) 14:40:49.91 .net wwwww 全キャラの後ろ(要するに1文字ごと)に改行は必要なくて 数えたいワード単位に改行入れて(sed)、grep、wcだね sedあまり好きじゃないからperlならこう perl -pe ’s/foo/foo¥n/g’ file | grep foo | wc -l スクリプトにしてfooを引数にすりゃ汎用的に使える
355 :名無しさん@お腹いっぱい。 :2015/02/24(火) 17:15:08.03 .net 堂々とbashを使うお(´・ω・`)
356 :名無しさん@お腹いっぱい。 :2015/02/24(火) 17:53:14.61 .net >>353 で答は出てるけど、どーしても grep を使いたいなら grep -o foo | wc -l 351とか353とか無駄すぎ。 353は1行に1回しかマッチしないことが保証できるので grep | wc ではなく、grep -c でよい。
357 :名無しさん@お腹いっぱい。 :2015/02/24(火) 19:23:17.83 .net 2chMateで質問を見て、これはこのスレで学んだgrep -oを披露するしかないと 意気込んで帰宅してスレ開いたら>>356 に書かれていたでござる
358 :名無しさん@お腹いっぱい。 :2015/02/24(火) 19:55:49.20 .net >>356 "A" が抜けてるんじゃ? $ grep -o A foo | wc -l
359 :名無しさん@お腹いっぱい。 :2015/02/24(火) 20:01:41.72 .net せやな
360 :名無しさん@お腹いっぱい。 :2015/02/24(火) 20:07:04.10 .net せやろか
361 :名無しさん@お腹いっぱい。 :2015/02/24(火) 21:34:48.78 .net >>351 ネタ的な解答です echo $(( $( sed -e 's/[^で]//g; s/で/ + 1/g' data ) ))
362 :名無しさん@お腹いっぱい。 :2015/02/24(火) 22:11:45.11 .net >>358 >>354 ではfooが検索キーワードになっていることを受けてなんじゃね ファイル名なりパイプ入力は実際に実行するには必要だが 言いたいことに焦点を当てるためと解釈すればおk
363 :名無しさん@お腹いっぱい。 :2015/02/24(火) 22:42:20.20 .net 昔はWindowsが好きでUnixは嫌いだったが、最近、シェルプログラミングの真髄、Unixの真髄が 身に染みてきた。VBSを仕事でやってるが、何せ長い。シェルスクリプトだと数十行で済むようなことが 何千行とかになってしまう。 Unixのコマンド自体がワンライナーで済んでしまうことも多いが、 シェルスクリプトや正規表現、Unixのアプリを組み合わせて20行、30行もかけば かなりの処理ができるな。 ただし、VBSのすごいところは、GUIまでわりと自由に操作できることだな。 UnixもWindowsもそれなりに何かすばらしさを感じる。
364 :名無しさん@お腹いっぱい。 :2015/02/24(火) 22:43:45.95 .net 文字ではなく単語単位だと マッチ部分が重複するケースもあると思うけど そういう時はどう書けばいいんだろ $ echo ABC | grep -Po '..' AB $ echo ABC | grep -Po '.(?=.)' A B $ echo ABC | ? AB BC が欲しい
365 :名無しさん@お腹いっぱい。 :2015/02/24(火) 22:45:35.14 .net 真髄ねー
366 :名無しさん@お腹いっぱい。 :2015/02/24(火) 23:11:13.94 .net >>363 >>349 とかどうよ?
367 :名無しさん@お腹いっぱい。 :2015/02/25(水) 10:15:56.15 .net >>356 お前は4時間以上かけてそんな回答しかできないのか
368 :名無しさん@お腹いっぱい。 :2015/02/25(水) 10:36:23.41 .net 20時間以上かけた回答に期待
369 :名無しさん@お腹いっぱい。 :2015/02/25(水) 21:30:04.01 .net str='>>351 ネタ2です。 ところで、あるテキストや特定のキャラクタは utf-8 であると考える必要性は有りや無しや。 神に問う。信頼は罪なりや。 果たして、無垢の信頼心は、罪の源泉なりや。' echo "$str" | grep -o . | LC_COLLATE=C sort | uniq -c echo "$str" | perl -0777 -ne 'print s/。//g,"\n"'
370 :名無しさん@お腹いっぱい。 :2015/02/25(水) 22:36:30.27 .net >>366 楽しそうだね。でも、GUIの操作をすべてコマンドからやりたいよ。 オブジェクトでも作る?
371 :名無しさん@お腹いっぱい。 :2015/02/25(水) 22:47:56.06 .net xteじゃダメ? ドラッグの仕方はよくわからんが。
372 :名無しさん@お腹いっぱい。 :2015/03/02(月) 23:05:19.70 .net 明日以降は、ここを見る回数も減るかもしれない。みなさん一応さようなら ネタは不評だったけど、最後かもしれないし >>364 にも答えておこう。 perl と ruby で #!/bin/sh echo '商工会議所長' | perl -ne 'while( /(?=(会議所|所長))/g ){ print $1, "\n"; }' echo '商工会議所長' | ruby -Ku -ne 'puts $_.scan( /(?=(会議所|所長))/ ).join( "\n" )'
373 :名無しさん@お腹いっぱい。 :2015/03/02(月) 23:11:47.85 .net >>349 で落としてdat変換位、スクリプトで出来ないかな?
374 :名無しさん@お腹いっぱい。 :2015/03/03(火) 03:08:17.32 .net >>372 何がなんだか…w
375 :名無しさん@お腹いっぱい。 :2015/03/03(火) 08:07:50.39 .net >>372 って問題がわかってないよな 「aaaaaaaaaa」に対して「aa」が どうマッチするかってことなんだけど なんで会議所と所長になっちゃうんだろうかw 脳味噌足りてなさそう
376 :名無しさん@お腹いっぱい。 :2015/03/03(火) 17:30:06.70 .net $ echo 'ABC' | perl -ne 'while( /(?=(AB|BC))/g ){ print $1, "\n"; }' AB BC じゃまずいのかな。
377 :371 :2015/03/04(水) 06:55:50.72 .net >>376 >>375 に対しての発言の様にも取れるけど、>>372 に対しての発言ならば... それも試した上で、書いてる 無反応だったけど >>369 で utf-8 である事を考えていないものが有る事を指摘したので 引き続き、>>364 のお題 > 単語単位だとマッチ部分が重複するケース に沿って、日本語に入れ替えただけ
378 :名無しさん@お腹いっぱい。 :2015/03/04(水) 13:23:38.19 .net >>364 は任意のテキストに使える記述を期待してるんじゃないだろうか 所長と会議所限定じゃなく
379 :363 :2015/03/04(水) 22:12:28.21 .net >>378 いや… スレタイ的にLL言語に頼らないやり方を期待してた
380 :名無しさん@お腹いっぱい。 :2015/03/04(水) 22:57:35.29 .net スレとあんま関係ないんだけど、 みんなどんな時も/bin/sh縛りなの(´・ω・`)? それとも割と躊躇なく、bashとかzsh使うの(´・ω・`)? 使う人はどういう線引きで/bin/shと高機能シェルを使い分けてるの(´・ω・`)?
381 :名無しさん@お腹いっぱい。 :2015/03/04(水) 23:04:13.67 .net スレと関係ないからよそでやってくれる?
382 :371 :2015/03/06(金) 06:31:41.84 .net >>354 でも perl は使われているのだが、ワンライナーも許されませんか wikipedia で LL言語を見ると、awk も AUTO だけど、sed は入っていなかったので sed を使って無理やり書いてみよう .*? が使えないので .. みたいな正規表現への対応は思いつけなかったけど、単語を抜き出すだけならこれで #!/bin/sh re1=${1:-会議所\|所長} str=$re1 while re2=$re2$( echo "$str" | sed -e 's/^\(.\).*/\1/' ) length=${#str} str=${str#*|} [ "${#str}" -ne "$length" ] do : done # ここから sed -ne ' : loop /'"$re1"'/ { s/^[^'"$re2"']*\('"$re1"'\)/\1\n/ P s/^.\(.*\)\n/\1/ b loop } '
383 :名無しさん@お腹いっぱい。 :2015/03/06(金) 06:33:59.92 .net bash でも #!/bin/bash re1=${1:-会議所\|所長} str=$re1 while re2=$re2${str:0:1} length=${#str} str=${str#*|} [ "${#str}" -ne "$length" ] do : done while IFS= read -r line do while [[ "$line" =~ ^[^${re2}]*((${re1}).*) ]] do echo "${BASH_REMATCH[2]}" line=${BASH_REMATCH[1]} line=${line#?} done done
384 :名無しさん@お腹いっぱい。 :2015/03/06(金) 06:36:18.16 .net 使用例 $ echo 'abc' | ./testsed 'ab\|bc' ab bc $ echo 'abc' | ./testbash 'a.|b.' ab bc
385 :371 :2015/03/06(金) 07:34:31.86 .net 訂正 全般的に変数代入の箇所のクォート var="var" と #!/bin/bash re1="${1:-会議所|所長} "
386 :名無しさん@お腹いっぱい。 :2015/03/06(金) 08:05:27.13 .net 読む気もおきないです本当にありがとうございました
387 :名無しさん@お腹いっぱい。 :2015/03/06(金) 09:15:28.00 .net 371って問題が理解できてない残念な子だな
388 :名無しさん@お腹いっぱい。 :2015/03/08(日) 00:18:10.47 .net >>380 個人用とか、そのマシンに特化したスクリプトならbashだろうがzshだろうが何でもアリだけど 普段から/bin/sh縛りにしておくと、違うマシンでもスクリプトが書けるようになるぞ
389 :名無しさん@お腹いっぱい。 :2015/03/08(日) 03:45:15.37 .net と思うだろ。 でも実際は変な癖がそれぞれついてるんで、あまり役に立たない。
390 :名無しさん@お腹いっぱい。 :2015/03/08(日) 05:35:53.00 .net bash拡張を使うなら#!/bin/bash
391 :名無しさん@お腹いっぱい。 :2015/03/08(日) 05:57:27.23 .net >>390 bashが/bin/にない環境もあるで
392 :名無しさん@お腹いっぱい。 :2015/03/08(日) 07:00:32.87 .net /bin/tcsh縛りで書いてるw
393 :名無しさん@お腹いっぱい。 :2015/03/08(日) 08:29:58.08 .net busyboxのsh縛りが実用的。 #!/sbin/busybox sh と書くこと。
394 :名無しさん@お腹いっぱい。 :2015/03/09(月) 01:03:57.32 .net >>392 害悪。 君個人しか絶対使わないマシン以外は触らないで。
395 :前スレ119 :2015/03/11(水) 18:57:08.87 .net 前スレ119です。その節はお世話になりました。 さて、プレーンテキスト中の hoge_01_bar.pdf hoge_01_foo.pdf hoge_02_bar.pdf hoge_02_foo.pdf 。。。 hoge_58_foo.pdf hoge_59_bar.pdf hoge_59_foo.pdf hoge_60_bar.pdf hoge_60_foo.pdf を hoge_{01..60}_bar.pdf hoge_{01..60}_foo.pdf に置換したいのですがどうすればできますか? よろしくお願いします。
396 :前スレ119 :2015/03/11(水) 19:13:00.82 .net 追加で申し訳ないです。hoge部はhoge1、hoge2、piyo00_piyo01など入り乱れてるのが 同じtree.txt中に混在している状況です。 数字の部分も 01_{01..07} #(実際は7行ある)、 ... 04_{01..04} #(これも4行ある) になっているブロックもあったりしてかなりヤヤコシイのですが、 [(連番になっている数字)以外のところが同じ行]を検出して数字を{}でまとめたい感じです。 3000行あって手作業は泣きそうなので、エレガントな方法をご教授いただければ幸いです。 {01..04}_{01..07}とする必要は無いです。 よろしくお願いします。
397 :名無しさん@お腹いっぱい。 :2015/03/11(水) 19:16:18.16 .net そういうのはシェルで書きたくないな
398 :名無しさん@お腹いっぱい。 :2015/03/11(水) 19:54:30.56 .net とりあえずソートしようぜ
399 :名無しさん@お腹いっぱい。 :2015/03/11(水) 20:19:19.48 .net >>397 何で書くの(´・ω・`)?
400 :名無しさん@お腹いっぱい。 :2015/03/11(水) 20:27:02.77 .net perlでもrubyでもpythonでも好きなのでいいよ
401 :名無しさん@お腹いっぱい。 :2015/03/11(水) 20:48:55.55 .net >>395 ,395 ご自分が言っているように、まず >[(連番になっている数字)以外のところが同じ行]を検出して これをする。たとえば次のように sed -e 's/_[0-9][0-9]_/_%%_/' tree.txt | sort | uniq これで「連番になっている数字以外のところが同じ行」をパターン化できる そしたら、そのそれぞれのパターンで grep tree.txt して、sort -n し、 head -n 1 と tail -n 1 で連番の最初と最後の値を切り出す こんな感じで行けないかな
402 :名無しさん@お腹いっぱい。 :2015/03/11(水) 20:58:26.70 .net なんのアイデアもなくすまんが、連番かどうか見るのがめんどくさそうですね
403 :名無しさん@お腹いっぱい。 :2015/03/11(水) 23:14:35.24 .net すまん 問題が全然理解出来ない 誰か問題を解説してくれ
404 :名無しさん@お腹いっぱい。 :2015/03/11(水) 23:20:28.51 .net もともとは韓国領だったが、 日本の植民地支配から、 日本が勝手に領有権を主張しだした。 現在は国際的にも韓国領と認識されている。
405 :名無しさん@お腹いっぱい。 :2015/03/11(水) 23:54:15.14 .net 北朝鮮のことか。
406 :名無しさん@お腹いっぱい。 :2015/03/12(木) 00:03:26.06 .net 理解できないなら無理に答えようとしなくていい
407 :名無しさん@お腹いっぱい。 :2015/03/12(木) 01:56:20.20 .net 独島は韓国領だよ。 やつらの主張の誤りは、独島=竹島だと言張ってるところ。 独島は竹島だとは別の島だよ。
408 :名無しさん@お腹いっぱい。 :2015/03/12(木) 02:02:58.54 .net 石島とか言ってたソビエトみたいな島の事?
409 :名無しさん@お腹いっぱい。 :2015/03/12(木) 02:46:00.10 .net >>403 Bashのブレース展開の逆がやりたいってことかと
410 :名無しさん@お腹いっぱい。 :2015/03/12(木) 03:03:37.86 .net perlのモジュールで http://search.cpan.org/~vvu/Compress-BraceExpansion-0.1.7/lib/Compress/BraceExpansion.pm てのがあった このままじゃ使いものにならんけどね
411 :名無しさん@お腹いっぱい。 :2015/03/12(木) 16:01:30.66 .net ちょっとお知恵を拝借したい テキストファイルを検索して見つけた行数を取得したいときって grep -nで行数出力させて取得するのが一番シンプルかな? マッチする最終行にしたい場合はtailと組み合わせてさ ちなみにシェル知らなかったころってreadで1行ずつ読み込んで判断してたw
412 :名無しさん@お腹いっぱい。 :2015/03/12(木) 16:32:34.70 .net 「一番」って難しいこと聞くね
413 :名無しさん@お腹いっぱい。 :2015/03/12(木) 18:00:51.55 .net >>411 grep -c
414 :名無しさん@お腹いっぱい。 :2015/03/12(木) 18:40:40.82 .net >>413 オマエいつも問題の意味取り違えて回答して点数もらえないタイプだろw
415 :名無しさん@お腹いっぱい。 :2015/03/12(木) 20:35:27.12 .net >>414 ん? 質問:検索して見つけた行数を取得したい cオプション: 検索条件にマッチした行数を表示する
416 :名無しさん@お腹いっぱい。 :2015/03/12(木) 20:36:26.22 .net >>414 あ、わかった 質問は行番号のことを行数といっているのね
417 :名無しさん@お腹いっぱい。 :2015/03/12(木) 20:36:37.62 .net >>415 まだわかってないのか…重症?
418 :名無しさん@お腹いっぱい。 :2015/03/12(木) 21:26:36.04 .net ちょっとwc
419 :名無しさん@お腹いっぱい。 :2015/03/12(木) 22:07:04.23 .net >>418 オプションなしだと複数返すコマンドだよね
420 :名無しさん@お腹いっぱい。 :2015/03/13(金) 00:23:15.74 .net 行数と行番号じゃ、意味が違うな。 日本語に不自由してるのぅ
421 :名無しさん@お腹いっぱい。 :2015/03/13(金) 01:03:30.38 .net grep -nで出力されるのは行数ではないね
422 :名無しさん@お腹いっぱい。 :2015/03/13(金) 01:16:54.86 .net なんかgrep -c言ってる人がバカにされてるけど >grep -nで行数出力させて取得するのが一番シンプルかな? >マッチする最終行にしたい場合はtailと組み合わせてさ これから察するに、行数と書いてはいるが、実際は行数じゃなくて行番号のこと言ってるんじゃないの? マッチした行数が知りたいなら最終行の話なんて出てこないだろ つまり本当にバカなのは>>417 と推測 まぁ質問主から続きがなければ有耶無耶だが
423 :421 :2015/03/13(金) 01:17:57.58 .net 俺何言ってんだ? すまん眠かったってことで何も見なかったことにしてくれ……死ぬ……
424 :名無しさん@お腹いっぱい。 :2015/03/13(金) 04:43:04.00 .net 行数、直訳すると line number
425 :名無しさん@お腹いっぱい。 :2015/03/13(金) 07:28:39.51 .net line countじゃないの?
426 :名無しさん@お腹いっぱい。 :2015/03/13(金) 07:40:15.74 .net 直訳、と言ってるだろ。 natural number = 自然数 complex number = 複素数 number = 数
427 :名無しさん@お腹いっぱい。 :2015/03/13(金) 08:04:07.16 .net >number = 数 ちがう。
428 :名無しさん@お腹いっぱい。 :2015/03/13(金) 08:20:54.53 .net 違うの知ってて言ってんでしょ
429 :名無しさん@お腹いっぱい。 :2015/03/13(金) 11:04:35.04 .net 順序数?
430 :名無しさん@お腹いっぱい。 :2015/03/13(金) 13:12:27.06 .net 行番号を行数と呼ぶ人がいるとして、その人は行数を何と呼ぶのでしょうかね。行の数?
431 :名無しさん@お腹いっぱい。 :2015/03/13(金) 17:11:36.57 .net 行回数
432 :名無しさん@お腹いっぱい。 :2015/03/14(土) 01:06:12.05 .net 行数はnumber of linesだろ Fランもたいがいにせいよ
433 :名無しさん@お腹いっぱい。 :2015/03/14(土) 02:26:16.92 .net >>411 まあgrepでいいと思う grep -n regexp FILE | tail -n1 | cut -d: -f1 awk /regexp/'{print NR}' FILE | tail -n1 sed -n /regexp/= FILE | tail -n1
434 :名無しさん@お腹いっぱい。 :2015/03/14(土) 04:57:44.74 .net >>432 行数は line count (だからこそ grep -c )
435 :名無しさん@お腹いっぱい。 :2015/03/14(土) 05:17:25.87 .net count number of lines じゃね てかどーでもいいよ 行数にしろ行番号にしろ質問者が具体例を明示してる時点で誤解しようがないだろ 早がってんしたエスパースキルゼロのうっかりさんが 早漏の言い訳をぐだぐだぐだぐだぐだぐだぐだぐだぐだぐだ くだらねー
436 :名無しさん@お腹いっぱい。 :2015/03/14(土) 05:44:10.73 .net それは「行数を数えろ」だろ 中卒もたいがいにしとけ
437 :名無しさん@お腹いっぱい。 :2015/03/14(土) 07:03:54.77 .net >>436 countは動詞だけじゃなく名詞にもなるんだよ、知らなかった?
438 :名無しさん@お腹いっぱい。 :2015/03/14(土) 08:50:28.21 .net へー
439 :名無しさん@お腹いっぱい。 :2015/03/14(土) 18:41:01.09 .net >>437 名詞が連続してるが、それはどう言い訳するんだ?
440 :名無しさん@お腹いっぱい。 :2015/03/14(土) 21:16:03.47 .net http://www.gnu.org/software/grep/manual/grep.html#General-Output-Control -c --count Suppress normal output; instead print a count of matching lines for each input file. With the -v (--invert-match) option, count non-matching lines. (-c is specified by POSIX.)
441 :名無しさん@お腹いっぱい。 :2015/03/15(日) 00:27:31.56 .net 一行の中に、 bbbbaaa124iiiiiccccaaaa456lllllddddaaa789と書いてあった場合に、 特定の文字列の後に続いている数字を、スペース空けて抜き出す書き方はないでしょうか うえの場合だとaaaの後にあるものを抜き出すように、124 456 789のような・・ 素人質問ですいませんがよろしくお願いします
442 :名無しさん@お腹いっぱい。 :2015/03/15(日) 01:12:54.15 .net GNU grep が使えるなら $ echo "bbbbaaa124iiiiiccccaaaa456lllllddddaaa789" | grep -Po '(?!aaa)[[:digit:]]+' | tr '\n' ' '
443 :名無しさん@お腹いっぱい。 :2015/03/15(日) 02:09:05.45 .net >>442 できました! 使わせていただきます。ご親切にありがとうございました。
444 :名無しさん@お腹いっぱい。 :2015/03/15(日) 03:20:18.84 .net 追加で質問したいのですが、 上の例でbbbbaaa124iiiiicccc222aaaa456lllllddddaaa789とあった場合に、 aaaの直後でない222は省いて124 456 789だけ方法はないでしょうか 何度もすいません
445 :名無しさん@お腹いっぱい。 :2015/03/15(日) 03:27:09.47 .net grep -Po '(?<=aaa)\d+'
446 :名無しさん@お腹いっぱい。 :2015/03/15(日) 03:50:51.90 .net >>445 完璧にできました! この時間に回答いただけるとは思いませんでした。 大変助かりました。ありがとうございました。
447 :名無しさん@お腹いっぱい。 :2015/03/15(日) 13:29:40.91 .net 何度もすいません 上の例で、bbbbaaa0.24iiiiicccc2.22aaaa456lllllddddaaa7.89 など 小数点も含む数字が混じっている場合に、同様の条件で0.24 456 7.9を抜き出す方法はないでしょうか あまりにも聞きすぎなので最後にしようと思います。
448 :名無しさん@お腹いっぱい。 :2015/03/15(日) 14:11:57.45 .net こうかなぁ… grep -Po '(?<=aaa)\d+(\.\d+)? でもこれだと、".01" とかにはマッチしないけどね。 それと、"1.2.3" なんて文字列があると、"1.2" にマッチしちゃう。
449 :名無しさん@お腹いっぱい。 :2015/03/15(日) 14:12:54.78 .net ちったぁ自分で考えな 過去2回の答えがなぜそうなるのかを考えれば応用でいけるはずだ
450 :名無しさん@お腹いっぱい。 :2015/03/15(日) 14:15:07.46 .net grep -o 'aaa[0-9\.][0-9\.]' | tr '\n' ' '
451 :名無しさん@お腹いっぱい。 :2015/03/15(日) 14:16:19.36 .net ミス grep -o 'aaa[0-9\.][0-9\.]*' | sed 's/aaa//g' | tr '\n' ' '
452 :名無しさん@お腹いっぱい。 :2015/03/15(日) 14:37:30.13 .net >>448 grep -Po '(?<=aaa)\d+(\.\d+)?(?=[^\d.]|$)'
453 :名無しさん@お腹いっぱい。 :2015/03/15(日) 14:52:31.67 .net >>448 >>450 >>451 再度ありがとうございました。 私のファイルのケースですと450さんのやり方で完全にできました! 大変助かりましたし、勉強になりました。ありがとうございました。 >>449 本当そうしようと思います。 それ以前にgrepやsedは簡単な文字抜き出しぐらいにしか使ったことがなかったのですが、 こんなに便利だとは驚きました。学習して次は自分で解決できるようにしたいと思います
454 :448 :2015/03/15(日) 14:55:28.70 .net これは私見だが grepの-PはPerlの正規表現として扱うためのオプションだ Perlを知ってるなら問題ないが、知らないなら>>451 のが多分勉強対象としては正しい
455 :名無しさん@お腹いっぱい。 :2015/03/15(日) 15:09:05.03 .net >>452 投稿した後でレス確認しました。すいません。 こちらのやり方でもできました!ありがとうございました。 書き方の意味を勉強してみたいと思います。 >>454 ありがとうございます。perlも知らないので、 教えていただいたオプションの意味も含めて調べてみようと思います。
456 :395 :2015/03/16(月) 22:22:07.74 ID:iYLKElrbV >>401 なんとか出来ました!ありがとうございました! sed -e 's/_[0-9][0-9]_/_%%_/' tree.txt | uniq #sortするとls -Rの構造が崩れる awk '!a[$0]++' tree.txt #fooとbarが交互になっている行をuniq uniq tree.txt #空行(改行?)が全部消えてまう sed -i "/:$/i \n" tree.txt #?わからん しっぽが:の行の前に空行を挿入 sed "/:$/i \n" tree.txt #? sed -e "s/^n//" tree.txt #なんとかできた。あとは%%を数字に戻すのだけ手打ちでがんばる
457 :395 :2015/03/16(月) 22:22:55.63 ID:iYLKElrbV >>401 何とか出来ました!ありがとうございました! sed -e 's/_[0-9][0-9]_/_%%_/' tree.txt | uniq #sortするとls -Rの構造が崩れる awk '!a[$0]++' tree.txt #fooとbarが交互になっている行をuniq uniq tree.txt #空行(改行?)が全部消えてまう sed -i "/:$/i \n" tree.txt #?わからん しっぽが:の行の前に空行を挿入 sed "/:$/i \n" tree.txt #? sed -e "s/^n//" tree.txt #なんとかできた。あとは%%を数字に戻すのだけ手打ちでがんばる
458 :395 :2015/03/16(月) 22:24:14.07 ID:iYLKElrbV 連投申し訳ない
459 :名無しさん@お腹いっぱい。 :2015/03/25(水) 06:56:05.87 .net 専用コマンド使わずに実用的な強度の暗号復号フィルタとか誰か書ける?
460 :名無しさん@お腹いっぱい。 :2015/03/25(水) 12:51:41.84 .net >>459 専用コマンドってのは、gpg とか openssl みたいなのを指してるの? python とか perl とかを使っていいのならライブラリ次第で何とでもなりそうだけど、 それも NG なのかな?
461 :名無しさん@お腹いっぱい。 :2015/03/25(水) 15:07:14.94 .net rot13でよければ tr A-Za-z N-ZA-Mn-za-m
462 :名無しさん@お腹いっぱい。 :2015/03/25(水) 18:11:12.12 .net それはさすがに「実用的な強度」とは言えないのでは……
463 :名無しさん@お腹いっぱい。 :2015/03/27(金) 22:26:36.44 .net 会社でシェルスクリプト(awkやsed)いじる必要があるんですが 何かおすすめの本ないですか?
464 :名無しさん@お腹いっぱい。 :2015/03/28(土) 00:47:40.73 .net ttp://www.goggle.co.jp/
465 :名無しさん@お腹いっぱい。 :2015/03/28(土) 11:31:55.66 .net 後ろからn文字目のみを削除する方法ってある? 1234567890 なら 123456780 12345 なら 1235 になるような。
466 :名無しさん@お腹いっぱい。 :2015/03/28(土) 14:11:41.06 ID:gf0XqcquF >>465 nawkのsubstrでできない
467 :名無しさん@お腹いっぱい。 :2015/03/28(土) 15:17:24.35 ID:shU+BQtVu >>465 rev, cut -c, head -c, tail -c などでいけるのでは? $ echo 12345 | rev | cut -c1,3- | rev 1235 $ echo 1234567890 | rev | cut -c1,3- | rev 123456780
468 :名無しさん@お腹いっぱい。 :2015/03/28(土) 14:36:27.39 .net sed -e 's/.\(.\{n-1\}\)$/\1/' 後ろから2文字目なら echo 12345 | sed -e 's/.\(.\{1\}\)$/\1/' 1235
469 :名無しさん@お腹いっぱい。 :2015/03/28(土) 15:15:24.11 .net >>460 LL言語呼び出すにしても拡張ライブラリの専用コマンドに依存するのはNGじゃない? nkfでrot13読むのは専用コマンドとは言えない気がするけど>>462 だよなあ。 バイナリ法辺りを実装すればとりあえずなんとかなるんだろうか?
470 :名無しさん@お腹いっぱい。 :2015/03/28(土) 15:18:54.26 .net >>465 rev, cut -c, head -c, tail -c などでいけるのでは? $ echo 12345 | rev | cut -c1,3- | rev 1235 $ echo 1234567890 | rev | cut -c1,3- | rev 123456780
471 :名無しさん@お腹いっぱい。 :2015/03/29(日) 05:16:26.01 .net >>465 >後ろからn文字目のみを削除する方法ってある? a=1234567890; echo "${a%??}${a#?????????}"
472 :名無しさん@お腹いっぱい。 :2015/03/29(日) 08:10:35.43 .net >>471 それ、n文字目と言うのが $n 変数に入ってる場合のこと聞いてるんでは? 固定数値ならいろいろ方法あるよ。
473 :名無しさん@お腹いっぱい。 :2015/03/29(日) 13:30:23.41 .net >>472 可変でも同じことはできるけど。 a=1234567890; n=4; f(){ r=$1; while [ ${#r} != $2 ]; do eval r=\${r$3?}; done; echo $r; }; echo $(f $a $((${#a} - $n)) %)$(f $a $(($n - 1)) \#);
474 :名無しさん@お腹いっぱい。 :2015/03/29(日) 13:51:13.01 .net もっとエレガントな方法がいいなぁ
475 :名無しさん@お腹いっぱい。 :2015/03/29(日) 14:10:10.11 .net 467が他の回答に勝っている点って何があるのかなあ
476 :名無しさん@お腹いっぱい。 :2015/03/29(日) 14:39:04.14 .net bash + GNU coreutils の cut コマンド限定 範囲チェックはしていない ncut () { declare str="$1" declare -i idx="$2" declare -i len=$(expr length "$str") echo $str | cut --complement -b$((len - idx + 1)) } $ ncut 1234567890 2 123456780 $ ncut 12345 2 ncut 12345 2
477 :名無しさん@お腹いっぱい。 :2015/03/29(日) 14:40:32.78 .net >>476 おっと、s/delcare/local/ でお願い
478 :名無しさん@お腹いっぱい。 :2015/04/06(月) 20:37:17.61 .net $ N=1; echo 1234567890 | rev | sed 's/\(.\{'"$((N-1))"'\}\)./\1/' | rev
479 :名無しさん@お腹いっぱい。 :2015/04/06(月) 23:05:32.98 .net xyzあいうえおabc xyzかきくけこabc というファイルがあったときに あいうえお かきくけこ と抜き出す方法にはどうすればよいでしょうか grepなどを使うとおもったのですがうまくいきません。 よろしければご教示おねがいします
480 :名無しさん@お腹いっぱい。 :2015/04/07(火) 01:08:35.80 .net ファイル名変更じゃ無くて抜き出しなら lsのオプション弄ってパイプでsedに繋げばいい 変更ならrename使おう
481 :名無しさん@お腹いっぱい。 :2015/04/07(火) 01:19:37.06 .net sed 's/xyz\(.*\)abc/\1/g'
482 :名無しさん@お腹いっぱい。 :2015/04/07(火) 23:44:39.59 .net 例えば、 親ディレクトリ /小ディレクトリA/photo/ /小ディレクトリB/photo/ /小ディレクトリC/photo/ みたいなディレクトリ構造があった時photo3つをpictureに 変更するにはどうすればよいのでしょうか for文にmv入れ込めばできると思ったのですができませんでした 初歩的な質もう申し訳ありませんがよろしくお願いします。
483 :名無しさん@お腹いっぱい。 :2015/04/07(火) 23:56:55.05 .net 最後にスラッシュつけなきゃできると思うが
484 :名無しさん@お腹いっぱい。 :2015/04/08(水) 00:23:18.58 .net for i in *; do cd $i; mv photo picture; done なんとか自己解決しましたそして>>483 有難う
485 :名無しさん@お腹いっぱい。 :2015/04/08(水) 00:30:06.79 .net って違う for i in *; do cd $i; mv photo picture; cd ..;done こうだ!!一つしか変わってなかったぜ
486 :名無しさん@お腹いっぱい。 :2015/04/08(水) 05:44:31.48 .net cdが無駄です。 for i in *; do mv "$i"/photo "$i"/picture; done ディレクトリ名等にスペースが含まれていてもいいように $i は "$i" としておく。
487 :名無しさん@お腹いっぱい。 :2015/04/09(木) 06:55:16.58 .net サブシェルとすればいいだけじゃね?
488 :名無しさん@お腹いっぱい。 :2015/04/09(木) 08:37:12.98 .net サブシェルが無駄です。
489 :名無しさん@お腹いっぱい。 :2015/04/09(木) 19:49:27.51 .net 効率求めてshellなんか使っていない。
490 :名無しさん@お腹いっぱい。 :2015/04/09(木) 22:21:14.40 .net その返しは馬鹿っぽいと思います
491 :名無しさん@お腹いっぱい。 :2015/04/09(木) 23:52:38.50 .net >>482 http://x68000.q-e-d.net/~68user/unix/pickup?rename util-linuxのrenameコマンドの場合 rename -v photo picture */photo Debian系だと正規表現指定、できるかは不明 https://wiki.ubuntulinux.jp/UbuntuTips/FileHandling/RenameCommand FreeBSDだとsysutils/renameで正規表現指定、できるかは不明 http://www.freshports.org/sysutils/rename/
492 :名無しさん@お腹いっぱい。 :2015/04/15(水) 08:31:50.31 .net $> TIME="2015/04/15 08:25:16" $> printf ${TIME:5:11} 04/15 $> echo ${TIME:5:11} 04/15 08:25 $> printf "${TIME:5:11}" 04/15 08:25 罠だ、はまった。。。
493 :名無しさん@お腹いっぱい。 :2015/04/15(水) 08:45:36.46 .net 何が罠なの? シェル変数の展開時には " " でかこんで "${HOGE...}" にするのが基本。
494 :名無しさん@お腹いっぱい。 :2015/04/15(水) 08:48:00.87 .net 最初から、 date '+%m/%d %H:%M' にした方がいいのでは?
495 :名無しさん@お腹いっぱい。 :2015/04/15(水) 08:48:10.66 .net >>492 $ printf "${TIME:5:11}" 04/15 08:25 $ printf "%s %s\n" ${TIME:5:11} 04/15 08:25
496 :名無しさん@お腹いっぱい。 :2015/04/15(水) 09:13:38.03 ID:uEYnIocSI $ TIME="2015/04/15 08:25:16" $ printf ${TIME:5:11} 04/15 $ /usr/bin/printf ${TIME:5:11} 04/15/usr/bin/printf: warning: ignoring excess arguments, starting with `08:25' $ type printf printf is a shell builtin
497 :名無しさん@お腹いっぱい。 :2015/04/15(水) 09:14:12.79 .net $ TIME="2015/04/15 08:25:16" $ printf ${TIME:5:11} 04/15 $ /usr/bin/printf ${TIME:5:11} 04/15/usr/bin/printf: warning: ignoring excess arguments, starting with `08:25' $ type printf printf is a shell builtin
498 :名無しさん@お腹いっぱい。 :2015/04/15(水) 13:25:09.88 .net $ TIME="2015/04/15 13:30:16" $ printf ${TIME:5:11} 04/15 $ IFS="wanada" $ printf ${TIME:5:11} 04/15 13:30
499 :名無しさん@お腹いっぱい。 :2015/04/15(水) 13:48:45.04 .net bash依存をやめよう $ TIME="2015/04/15 08:25:16" $ printf ${TIME:5:11} sh: Bad substitution $ IFS='/ :' $ set $TIME $ echo $2/$3 $4:$5 04/15 08:25
500 :名無しさん@お腹いっぱい。 :2015/04/16(木) 23:26:24.70 .net GNU date $ TIME="2015/04/15 08:25:16" $ date '+%m/%d %H:%M' --date="${TIME}" 04/15 08:25
501 :名無しさん@お腹いっぱい。 :2015/04/30(木) 23:24:48.53 .net 今月のsoftware designはgrepsedawk入門で面白かったな
502 :名無しさん@お腹いっぱい。 :2015/05/07(木) 20:52:12.51 .net シェルスクリプトを最近使うようになりffmpegなどにファイルを投げて一括処理できるようになりました。 でも、エラー処理に困っています。例えば、ffmpegで作ったファイルが壊れているかどうかわからないのです。 ffmpegはファイルとログを出してくれるのでログの特定の文字(たとえば、bad header、skip)が出てきたときに、 その時のログを書き出し、そのログを使って処理を分岐させることは可能なのでしょうか? このときffmpegは終了コードは0を返してきました。プログラムによっては終了コード1を返してしてくるものもありました。
503 :名無しさん@お腹いっぱい。 :2015/05/07(木) 20:53:06.51 .net grep君でうまく抽出したら正規表現で検索すればできるのでは?
504 :名無しさん@お腹いっぱい。 :2015/05/07(木) 21:54:28.34 .net >>502 ffmpegは最後に 2>&1 を付ける 付ければログをgrepとかできる
505 :名無しさん@お腹いっぱい。 :2015/05/08(金) 20:35:13.72 .net grepをどう使えばいいのですか?
506 :名無しさん@お腹いっぱい。 :2015/05/08(金) 22:13:16.56 .net manくらい見た?
507 :名無しさん@お腹いっぱい。 :2015/05/08(金) 22:36:52.79 .net うーんこの man見てくれよせめて--helpとかググるとかしろよ
508 :名無しさん@お腹いっぱい。 :2015/05/09(土) 12:39:02.61 .net こんな感じでエラー処理するんだよ 書き込みの内容見てる限りは無理だと思うけど ffmpeg xxxx > xxxx.log 2>&1 cat xxxx.log | grep "bad header" if [ $? -ne 0 ] then # エラー処理 fi
509 :名無しさん@お腹いっぱい。 :2015/05/09(土) 12:42:06.41 .net catは無駄だな。
510 :名無しさん@お腹いっぱい。 :2015/05/09(土) 13:01:23.55 .net if [ も無駄だな
511 :名無しさん@お腹いっぱい。 :2015/05/09(土) 13:11:39.85 .net >>509 判定が1種類だと思ってるアホ発見
512 :名無しさん@お腹いっぱい。 :2015/05/09(土) 13:25:48.27 .net >>511 二種類あるとどうなるわけ?w
513 :名無しさん@お腹いっぱい。 :2015/05/09(土) 13:26:22.67 .net 無駄だなw
514 :名無しさん@お腹いっぱい。 :2015/05/09(土) 13:32:28.84 .net >>511 わかった、こいつ馬鹿だから、catがどう無駄なのかわかってないんだ。 なるほどなー、馬鹿だなーw
515 :名無しさん@お腹いっぱい。 :2015/05/09(土) 15:56:32.15 .net ffmpeg xxxx > xxxx.log 2>&1 if ! grep "bad header" <xxxx.log then # エラー処理 fi
516 :名無しさん@お腹いっぱい。 :2015/05/09(土) 18:51:16.11 .net if [ -n "$(grep 'bad header' xxxx.log)" ]; then fi
517 :名無しさん@お腹いっぱい。 :2015/05/09(土) 20:08:36.31 .net grep -qs "bad header" xxxx.log case $? in 0) echo "Match";; 1) echo "No match";; *) echo "Error";; esac
518 :名無しさん@お腹いっぱい。 :2015/05/11(月) 21:15:37.13 .net >>515 これだと判定のたびにログを全部読み直すから無駄無駄
519 :名無しさん@お腹いっぱい。 :2015/05/11(月) 22:56:21.16 .net >>518 どう直せばいいと思う?
520 :名無しさん@お腹いっぱい。 :2015/05/12(火) 18:27:59.13 .net bashで for i in $@ do command echo ○○中××番目を処理中です。 done としたいのですが、○○と××はどうすれば表示できるようになりますか?
521 :名無しさん@お腹いっぱい。 :2015/05/12(火) 19:54:49.92 .net もう一つ聞きたいことがありました for i in $@にカレントディレクトリだけじゃなく そのサブディレクトリのファイルを送るにはどう書けばよいのですか?
522 :名無しさん@お腹いっぱい。 :2015/05/12(火) 19:59:27.57 .net >>520 count=1 for i in $@ do echo "$#中${count}番目を処理中です。" command count=$(($count + 1)) done
523 :名無しさん@お腹いっぱい。 :2015/05/12(火) 20:00:20.69 .net コピペから脱却すればその答えはおのずと見つかるであろう
524 :名無しさん@お腹いっぱい。 :2015/05/12(火) 20:18:46.18 .net わざわざ指摘させる流れですか?もうひとつは残しておいた in $@ は無駄だな
525 :名無しさん@お腹いっぱい。 :2015/05/13(水) 06:35:40.84 .net $count の $ は無駄だな。 count=$(($count + 1)) の行自体も無駄とは言わないけどbashなら不要だな。 echo "$#中$(( count++ ))番目を処理中です。"
526 :名無しさん@お腹いっぱい。 :2015/05/13(水) 07:02:23.50 .net >>525 可読性・保守性が悪いから却下
527 :名無しさん@お腹いっぱい。 :2015/05/13(水) 07:23:59.83 .net for ((i=1;i<=$#;i++)); do echo "${#}中${i}番目を処理中"; done
528 :名無しさん@お腹いっぱい。 :2015/05/13(水) 07:39:14.30 .net >>527 それだと肝心の $@ の処理ができないじゃん、本末転倒。
529 :名無しさん@お腹いっぱい。 :2015/05/13(水) 08:39:25.96 .net $@ をどう処理したいの? 例えばこんな感じ? for ((i=1;i<=$#;i++)); do eval item=\${$i};echo "${#}中${i}番目($item)を処理中"; done
530 :名無しさん@お腹いっぱい。 :2015/05/13(水) 13:58:41.25 .net curlでメールチェックできないかと思ったんだけど、どうも参考コードが見当たらないなあ。 もしかしてtelnetのような感じの方法になってスマートには無理なのだろうか?
531 :名無しさん@お腹いっぱい。 :2015/05/13(水) 17:11:23.00 .net こういうことではなくて? http://blog.sarabande.jp/post/88910085203
532 :名無しさん@お腹いっぱい。 :2015/05/13(水) 17:26:02.42 .net 送信と受信の違いがわからない男おことわりw
533 :名無しさん@お腹いっぱい。 :2015/05/13(水) 17:49:35.48 .net ああなるほど、送信がわかれば受信もできるのがわかるから 調べればいいのにと思ったのに 実装されてるコードそのものが欲しかったのね キミのレベルに合わせられなくてごめんね
534 :名無しさん@お腹いっぱい。 :2015/05/13(水) 17:52:16.16 .net マニュアル見れば受信できることなんて一目瞭然だよ
535 :名無しさん@お腹いっぱい。 :2015/05/13(水) 19:45:16.01 .net カウントありがとうございます サブディレクトリのほうは無理のでしょうか?
536 :名無しさん@お腹いっぱい。 :2015/05/14(木) 01:27:00.37 .net >>535 $ hogehoge.sh * カレントディレクトリのファイルだけ $ hogehoge.sh $(find) カレントとサブディレクトリ全部
537 :名無しさん@お腹いっぱい。 :2015/05/14(木) 02:06:32.75 .net >>534 できないなんて話は最初からどこにもないしなあ。 送信と受信の違いというかプロトコル自体が違うんだから参考になるかどうか。
538 :名無しさん@お腹いっぱい。 :2015/05/14(木) 05:00:09.66 .net マニュアルにPOP3の記載とかあると思うんだが 脳内で>>531 =>>534 って妄想でもしたか?
539 :名無しさん@お腹いっぱい。 :2015/05/14(木) 06:30:49.15 .net >>535 IFS=$'\n' set -- $( find . -type f ) count=0 for i もしくは、 IFS=$'\n' fileList="$( find . -type f )" fileLength=$( echo "$fileList" | wc -l ) count=0 for i in ${fileList} ところで、v="$( )" のダブルクォートって無駄かな?
540 :名無しさん@お腹いっぱい。 :2015/05/14(木) 07:13:26.75 .net v= のように直接代入する場合はダブルクォートは無駄。 それより、findでスペース入りファイル名が見つかった場合とかの対応ができてない。
541 :名無しさん@お腹いっぱい。 :2015/05/14(木) 07:25:46.50 .net findで苦労してスペース入りファイル名の対処するより、 for f in * */* */*/* */*/*/* って書いちゃった方が早いんだよな。どうせ階層は何段階か有限だし、 アスタリスクならスペース入りでも無問題。
542 :名無しさん@お腹いっぱい。 :2015/05/14(木) 07:27:50.46 .net > findでスペース入りファイル名が見つかった場合とかの対応 IFS=$'\n'
543 :名無しさん@お腹いっぱい。 :2015/05/14(木) 07:35:52.80 .net findで改行入りファイル名が見つかった場合とかの対応ができてない
544 :名無しさん@お腹いっぱい。 :2015/05/14(木) 07:44:29.36 .net > 改行入りファイル名が それは IFS=$'\n' と書いてある時点で、自明じゃない? 指摘自体が無駄だな
545 :名無しさん@お腹いっぱい。 :2015/05/14(木) 07:46:27.90 .net 自明ならバグを作り込んでもいいのかよw 結局使いものにならない
546 :名無しさん@お腹いっぱい。 :2015/05/14(木) 07:49:42.88 .net シェルなどのコマンドラインの入力に再利用可能な方法でちゃんとエスケープしてファイル名出力できるようなオプションが findに欲しいな。(スペースも改行もその他記号もちゃんとクォートして、シェルで評価すると元のファイル名に戻る形式) (-print0 は xargs 用にしか使えないし)
547 :名無しさん@お腹いっぱい。 :2015/05/14(木) 08:06:46.69 .net やるならこんな感じかな。 $ find . -print0 | while read -r -d $'\0' f; do echo $f; done それから bash の組み込み関数 printf にある %q が使えるかも bash$ help printf : %q quote the argument in a way that can be reused as shell input
548 :名無しさん@お腹いっぱい。 :2015/05/14(木) 09:04:56.24 .net while read -rd ''
549 :名無しさん@お腹いっぱい。 :2015/05/14(木) 09:46:33.11 .net >>538 なぜそういう話になるのかよくわからんが、記載があるならぐだぐだ言うよりコピペで一発なんじゃないか?
550 :名無しさん@お腹いっぱい。 :2015/05/14(木) 10:26:05.55 .net 誰も相手してないのになぜその質問に触れるかなあ・・・
551 :名無しさん@お腹いっぱい。 :2015/05/14(木) 10:28:14.98 .net read -rd '' とかはbash依存なんだよなぁ。。 read: 1: Illegal option -d
552 :名無しさん@お腹いっぱい。 :2015/05/14(木) 10:36:47.40 .net >>550 どの質問の話?
553 :名無しさん@お腹いっぱい。 :2015/05/14(木) 11:21:47.00 .net コマンド置換とシェル関数の違いがピンとこないのですけど どう違うのでしょか?
554 :名無しさん@お腹いっぱい。 :2015/05/14(木) 11:31:29.33 .net 記載がある筈 なんてはっきりしない話は要らないんだよなあ。 このスレのネタなんて大抵記載がある筈だから。
555 :名無しさん@お腹いっぱい。 :2015/05/14(木) 12:13:05.97 .net どう勘違いしたらコマンド置換とシェル関数が同じようなものに思えるんだ??
556 :名無しさん@お腹いっぱい。 :2015/05/14(木) 12:15:56.28 .net >>553 使う分には ・コマンド置換は再利用ができない ・シェル関数は再利用ができる の違いがある
557 :名無しさん@お腹いっぱい。 :2015/05/14(木) 12:19:07.87 .net それこそ置き換えの効かない例でも出せば理解するだろ。
558 :名無しさん@お腹いっぱい。 :2015/05/14(木) 12:21:29.00 .net ll(){ ls -l;} ll ってのがシェル関数。 hoge=`ls` echo "$hoge" ってのがコマンド置換。 どこも似てない。
559 :名無しさん@お腹いっぱい。 :2015/05/14(木) 12:25:28.02 .net どう勘違いしたら言語的文法的に似てるかという話に思えるんだ?
560 :名無しさん@お腹いっぱい。 :2015/05/14(木) 12:45:56.98 .net むしろ似てると思うのは何か根本的な勘違いが原因
561 :名無しさん@お腹いっぱい。 :2015/05/14(木) 13:19:51.91 .net コマンド置換をaliasと勘違いしてるとか?
562 :名無しさん@お腹いっぱい。 :2015/05/14(木) 13:27:28.77 .net >>551 今回はbash限定でいい話しだよ。まあ、無駄じゃあないけど >>520 > bashで > bashで > bashで
563 :名無しさん@お腹いっぱい。 :2015/05/14(木) 14:08:51.71 .net 違いを聞くのは別に似てるからじゃないと思うぞ。 単にとある使い方では等価に思えたってだけだろう。 重箱の隅が知りたいみたいな話だな。
564 :名無しさん@お腹いっぱい。 :2015/05/14(木) 14:28:51.82 .net どう勘違いしたらコマンド置換とシェル関数が等価に思えるような使い方があるんだ??
565 :名無しさん@お腹いっぱい。 :2015/05/14(木) 14:47:51.26 .net ageてる人が等価に思えるような話だろう。
566 :名無しさん@お腹いっぱい。 :2015/05/14(木) 18:12:58.96 .net おっしゃる通り、使い方が同じに見えたので どんな使い分けをしたらいいのだろうと思っていました
567 :名無しさん@お腹いっぱい。 :2015/05/14(木) 19:43:10.96 .net >>563 いや、その気持ちが分かるなら答えてやれよ。 さっぱり分からん人間には答えようがないんだから。
568 :名無しさん@お腹いっぱい。 :2015/05/14(木) 20:08:14.55 .net 使い分けとか考えなくていいんじゃないの? 期待通りの動作をしない場合がないのかだけ考えれば。
569 :名無しさん@お腹いっぱい。 :2015/05/14(木) 20:38:06.69 .net >>567 わからなきゃ聞くしかなかろ。 気持ちの想像すらできなければ回答役なんて荷が重いから 黙って見守るべきだと思う。
570 :名無しさん@お腹いっぱい。 :2015/05/14(木) 20:54:02.91 .net >>569 は?だからお前が適任だろ?って話をしてるんだが? さてはお前どえらい馬鹿だな?
571 :名無しさん@お腹いっぱい。 :2015/05/14(木) 21:13:48.75 .net 聞こうとしている時にそんな暴言を言うから 気持ちの想像すらできないなんて言われるんですよ。
572 :名無しさん@お腹いっぱい。 :2015/05/14(木) 21:20:34.11 .net >>571 なんか壮大な勘違いをしてるようだから言っとくけど お前かなり性格悪そうに見えてるぞ
573 :名無しさん@お腹いっぱい。 :2015/05/14(木) 21:25:29.94 .net >>568 以外になにか言う事でもあるの?
574 :名無しさん@お腹いっぱい。 :2015/05/15(金) 06:21:18.71 .net echo $(a=A;echo $a) echo $a b () {a=A;echo $a;} b echo $a unset a (a=A) echo $a a=A echo $a unset a # 以下zsh。 () {typeset a=A;} echo $a () {a=A;} echo $a
575 :名無しさん@お腹いっぱい。 :2015/05/15(金) 07:08:32.05 .net 色々言ってたけど結局メールチェックは誰も試してないの?
576 :名無しさん@お腹いっぱい。 :2015/05/15(金) 08:03:24.42 .net curlでやってるよ IMAPもPOP3も普通に使える
577 :名無しさん@お腹いっぱい。 :2015/05/15(金) 08:50:33.60 .net ./test.sh: 行 5: 予期しないトークン `{a=A' 周辺に構文エラーがあります b () (a=A;echo $a)
578 :名無しさん@お腹いっぱい。 :2015/05/15(金) 11:06:13.53 .net ここ見てると昔書いたスクリプトについて あのコマンドはああするべきだったとか思うことはあるけど 曲がりなりにも期待した動作はしてたから問題ないと思い直した
579 :名無しさん@お腹いっぱい。 :2015/05/15(金) 13:23:55.72 .net >>577 そう。そこに違いがある事が言いたかった。
580 :隼人新聞社 :2015/05/15(金) 17:26:05.10 .net ★サヨクを応援して1票入れた人は強く反省してください ★民主 枝 野 は殺人を平気で行う極左テロ暴力団と親密交際があった!!!親密交際!テロの手先!北朝鮮の手先(安倍総理の談話) ★ 菅 直 人 は朝鮮人と親密交際、献金があった!!朝鮮韓国の傀儡手先(TVで報道!) ★民主は日教組の巣窟。極めて危険な団体、危険な政権だった!北朝鮮を熱烈に支援するのが日教組(信頼できる情報スジの話)!!北朝鮮の手先! 民主の基本姿勢は死刑廃止!!だから自民の安倍総理を支援してください! サヨクと公明創価を応援するは地獄行き サヨクを応援して1票入れた人は反省してください
581 :名無しさん@お腹いっぱい。 :2015/05/16(土) 18:18:52.70 .net キー入力を受け付けを待って止まっているコマンドを 何らかの方法で次のコマンドに行かせる方法はありますか?
582 :名無しさん@お腹いっぱい。 :2015/05/16(土) 18:38:27.01 .net zshだとzpty tclだとexpect ただ単純な事なら command<<EOF y y n EOF とかこんなんで処理できるよ。
583 :名無しさん@お腹いっぱい。 :2015/05/16(土) 18:41:48.45 .net マウスつかってどうのこうのの話なら、xdotoolとかいうのが使えそう。 plamolinuxのこじま氏の2015/1/8の日記に少し使い方が書いてある。
584 :名無しさん@お腹いっぱい。 :2015/05/17(日) 09:38:15.41 .net >>582 , >>583 ありがとう 早速、調べてみます 今までできないものと思って諦めていたから感動
585 :名無しさん@お腹いっぱい。 :2015/05/17(日) 18:06:01.98 .net freebsdのスレッドの人なのかなと思ったので以下でできたよ。詳しい事は知らない。 最近はbashのほうが強力なのかもしれないし、おそらく似た機能はあると思う。 ただexpectが定番だと思う。ただ構文はtclだけど、 たぶん他のshellを使うのって嫌な部分があるだろうし。 # まず以下のpasswordの部分を書いて、試して、感じる。 expect -c ' spawn su expect Password: send "your password\r" interact ' # passwordとpromptの指定の部分を書換える必要があると思う。 expect -c ' spawn su ;# expectで制御できるようにsuを起動する。 expect Password: ;# promptにPassword:が来るまで待機。 send "your password\r" ;# 来たら引数で指定されたpasswordを入力する。 expect -re {(%|#|\\$) $} ;# Password:が来るまで待機になってたものを、 ;# promptの入力受け付け画面に変える。 ;# -reは正規表現。ここはmanpageそのまま写しました。 ;# 各々によって変える必要があるでしょう。 send "whoami\r" send "exit\r" expect eof '
586 :名無しさん@お腹いっぱい。 :2015/05/19(火) 17:38:24.79 .net forやwhileとかの中でコマンドを実行するとき そのコマンドをforやwhileに直接書いて実行させるか 変数扱いさせてのforやwhile上にコマンドを書いて実行させるか 関数として定義してやってforやwhileの中で実行させてやるか どれが効率的で高速に実行することができるようになるんだろう? コマンドの呼び出しや実行や終了の重複を考えるとどうなんだろう? シェルスクリプトを自分で書けるようになってきて、こんな疑問を持つようになりました 皆さんの意見を聞かせて下さい
587 :名無しさん@お腹いっぱい。 :2015/05/19(火) 17:45:28.31 .net 高速っていうなら直接コマンド記述が高速。 for/whileループであっても、ループ内をキャッシュしたりせず、 毎回コマンド行とか変数とか関数を評価し直しながら実行してる。 しかしシェルスクリプトに高速性なんて求めてはいけない。
588 :名無しさん@お腹いっぱい。 :2015/05/19(火) 20:08:13.54 .net そもそも高速化ってそういう事じゃないしな。 何回そのプログラムを実行すれば、そんな間違った高速化の為に費した時間を取り戻せると思う?
589 :名無しさん@お腹いっぱい。 :2015/05/19(火) 21:29:44.56 .net 高速化したいならプログラム書くしかない プロセスを起動するコストは莫大だから
590 :名無しさん@お腹いっぱい。 :2015/05/19(火) 21:54:05.59 .net iniファイルを読み書きして、ファイル名をキーにしてすでに処理済みのファイルかどうかを条件判定、 みたいなことをbusyboxに内包された汎用コマンドだけでやるには、どうしたらいい? 決められたディレクトリの中に、リサイズしたいjpg画像群があって、 処理済みかどうかを条件分岐したかったんだけど、時間が無くて別のツールで 間に合わせてしまった。再びやりたくて調べてみたけど、実装事例を見つけられず。
591 :名無しさん@お腹いっぱい。 :2015/05/19(火) 22:48:04.62 .net busyboxでやりたいならそちらでどうぞ ちなみにシェルスクリプトでやるならlsでリスト作って ループしながら処理すればいいと思う 処理済はどこかのファイルにファイル名を書き出して ループでの処理前にその中にファイルがあるかどうかgrepなどで見て 無ければ処理すればいい あとなんとなく579=583臭がするけど気のせいか
592 :名無しさん@お腹いっぱい。 :2015/05/19(火) 22:58:05.98 .net ありがと。大きなヒントをもらえたので、作ってみる。 ちなみに同一人物じゃないよ。
593 :名無しさん@お腹いっぱい。 :2015/05/20(水) 11:34:26.93 .net >>588 , >>589 ドツボにはまりかけてました d >>591 妄想、乙
594 :名無しさん@お腹いっぱい。 :2015/05/20(水) 13:31:28.02 .net なんだコイツ
595 :名無しさん@お腹いっぱい。 :2015/05/20(水) 17:55:29.75 .net よう、ネット番長
596 :名無しさん@お腹いっぱい。 :2015/05/20(水) 18:12:52.71 .net こんな>>586 何言いたいか曖昧な事にまともに答えてくれた人に感謝する事だね。 私は何も答えなかったよ。それこそ妄想、乙と感じたしね。
597 :名無しさん@お腹いっぱい。 :2015/05/20(水) 18:24:21.97 .net × 答えなかった ○ 答えられなかった(コミュ能力不足)
598 :名無しさん@お腹いっぱい。 :2015/05/20(水) 18:27:39.23 .net まぁある意味答えられなかったとは言えるな。 認めよう。
599 :名無しさん@お腹いっぱい。 :2015/05/20(水) 18:33:19.73 .net 少なくとも、ほかの人はある程度の要求仕様をくみ取るところまでは出来たわけだから、 コミュ能力であることは明白。キミさー、これじゃ仕事できないよ。
600 :名無しさん@お腹いっぱい。 :2015/05/20(水) 18:38:02.12 .net そうだねバファリンの半分が優しさでできているのだとしたら、 彼等は九割方優しさで出来てるといえるね。
601 :名無しさん@お腹いっぱい。 :2015/05/20(水) 19:11:05.53 .net 追っ払っといた。以降スルーで。 あいつはおたくらが汚いレスする値打ちも無い。だからこそ俺の様な男がいるのさ。
602 :名無しさん@お腹いっぱい。 :2015/05/21(木) 06:15:13.14 .net -gt の利点について教えてください。 [ HOGE -gt 123 ] は、 ((HOGE > 123)) とも記述できますよね? なら -gt の必要性はあるのでしょうか?
603 :名無しさん@お腹いっぱい。 :2015/05/21(木) 10:47:36.25 .net >>576 一体どういう書式のどんな結果をどうやって受け取っているのか、参考までに見せて欲しい。
604 :名無しさん@お腹いっぱい。 :2015/05/21(木) 13:10:57.30 .net >>602 前者はbourne shellから使える一般的な方法 後者は一部のシェルの拡張機能で、使えない場合がある。 使えるならどっちでもいい。上で出てたbusyboxのshだと使えないんじゃないかな多分
605 :名無しさん@お腹いっぱい。 :2015/05/21(木) 15:22:40.17 .net >>602 数値比較だから16進や8進表現が使える
606 :名無しさん@お腹いっぱい。 :2015/05/21(木) 16:10:57.08 .net >>605 -gt の利点として??
607 :名無しさん@お腹いっぱい。 :2015/05/21(木) 16:34:31.27 .net 利点欠点というより 数値比較と文字列比較で機能が異なるので 比べるものじゃない
608 :名無しさん@お腹いっぱい。 :2015/05/21(木) 17:02:11.38 .net [ -gt ] も (( > )) も、数値としての比較だが、、
609 :名無しさん@お腹いっぱい。 :2015/05/21(木) 17:12:42.96 .net ごめ、誤解してたわ
610 :名無しさん@お腹いっぱい。 :2015/05/21(木) 22:58:30.82 .net >>603 いくら?
611 :名無しさん@お腹いっぱい。 :2015/05/22(金) 10:22:56.55 .net まず自分なりに作ったサンプル出してからうまくいかないと相談すればいいのに はなから見せろとか無いわ〜
612 :名無しさん@お腹いっぱい。 :2015/05/22(金) 11:00:25.39 .net #/bin/sh curl ほい
613 :名無しさん@お腹いっぱい。 :2015/05/22(金) 11:11:39.20 .net すみませんが詳しい方のみ回答をお願いします
614 :名無しさん@お腹いっぱい。 :2015/05/22(金) 11:19:33.89 .net >>612 ドキュメント読んで出直してこい
615 :名無しさん@お腹いっぱい。 :2015/05/22(金) 11:36:29.05 .net やだね (echo USER hoge; echo PASS pass; echo STAT) | nc server 110
616 :名無しさん@お腹いっぱい。 :2015/05/22(金) 11:38:38.49 .net >>612 そこまでして欲しいのかwww 頭が無いなら金を払えよ
617 :名無しさん@お腹いっぱい。 :2015/05/22(金) 11:41:25.48 .net >>616 >>613
618 :名無しさん@お腹いっぱい。 :2015/05/22(金) 11:52:29.57 .net DOC嫁なんて言う奴に限って自分は読んでいないのもよくある話。
619 :名無しさん@お腹いっぱい。 :2015/05/22(金) 12:14:11.32 .net 読むのは質問者で回答者じゃない
620 :名無しさん@お腹いっぱい。 :2015/05/22(金) 12:15:28.97 .net >>619 >>613
621 :名無しさん@お腹いっぱい。 :2015/05/23(土) 00:45:24.32 .net >>613 そら違うだろ 回答してくれる気のある方のみレスしてくださいだろ
622 :名無しさん@お腹いっぱい。 :2015/05/23(土) 07:23:22.41 .net コピペ荒らしにマジレスしてもねぇ
623 :名無しさん@お腹いっぱい。 :2015/05/23(土) 07:57:47.77 .net 利点とかより互換性だけじゃね?
624 :名無しさん@お腹いっぱい。 :2015/05/23(土) 09:04:23.16 .net >>621 自分では回答しているつもりになっている半可通が居るからじゃないの? >>532 とかは回答なんだろうけど、回答者からは質問者だと錯覚されるから回答がこなくなる。
625 :名無しさん@お腹いっぱい。 :2015/05/23(土) 09:53:03.52 .net 100レス近く前の書き込みを引っ張る質問者も 相当な意気込みで実装したいらしいな いじってやるからまた書き込みなよ
626 :名無しさん@お腹いっぱい。 :2015/05/23(土) 11:20:44.87 .net ほら居るし。
627 :名無しさん@お腹いっぱい。 :2015/05/23(土) 11:26:14.78 .net これだけの時間があればCででも実装できたろうにw
628 :名無しさん@お腹いっぱい。 :2015/05/23(土) 11:31:28.73 .net 教えてやるから結果を見せろというべきだな。 それが正当な対価だろう。
629 :名無しさん@お腹いっぱい。 :2015/05/23(土) 12:58:15.22 .net 他人の結果に興味はないだろ普通。 「できましたー!!」←これが対価なの? 馬鹿にしてるの?
630 :名無しさん@お腹いっぱい。 :2015/05/23(土) 14:47:50.85 .net 興味がないのに口出す訳ないだろう。
631 :名無しさん@お腹いっぱい。 :2015/05/23(土) 14:55:03.12 .net >>613 ですが、ロム容量が極小の組み込み機器に入れる予定で、 シェルスクリプトじゃないとダメです。 繰り返しますがわかる方のみ回答してください。 わからない方は技術力がないと同一ですので(認めたくないでしょうけど)、 素直に黙るのが賢明です。
632 :名無しさん@お腹いっぱい。 :2015/05/23(土) 15:29:15.99 .net >>631 極小ならアセンブラだろ
633 :名無しさん@お腹いっぱい。 :2015/05/23(土) 15:32:43.77 .net 偽者の>>631 は消えろ まあこれぶっちゃけ200万レベルの仕事だね
634 :名無しさん@お腹いっぱい。 :2015/05/23(土) 15:50:06.27 .net アセンブラでも構いません。ARMでお願いします。 繰り返しますがわかる方のみ回答してください。
635 :名無しさん@お腹いっぱい。 :2015/05/23(土) 15:58:55.20 .net >>633 シェルスクリプトで暗号通貨のウォレットでも作れば?
636 :名無しさん@お腹いっぱい。 :2015/05/23(土) 16:04:25.94 .net それはもうできています。 すみませんが質問にだけ回答してください。
637 :名無しさん@お腹いっぱい。 :2015/05/23(土) 16:39:09.77 .net できてるならみせてよ
638 :名無しさん@お腹いっぱい。 :2015/05/23(土) 16:52:36.76 .net 繰り返しますがわかる方のみ、質問にだけ回答してください。
639 :名無しさん@お腹いっぱい。 :2015/05/23(土) 17:05:15.19 .net >>638 回答者以外はご遠慮下さい。
640 :名無しさん@お腹いっぱい。 :2015/05/23(土) 17:07:20.51 .net こっちは仕事でやってるんです。 趣味で遊んでるアナタ方とは違うんです。
641 :名無しさん@お腹いっぱい。 :2015/05/23(土) 17:09:47.01 .net そういうネタをやられては困ります。
642 :名無しさん@お腹いっぱい。 :2015/05/23(土) 17:43:32.85 .net 仕事でやってるのにまさかただとは...
643 :名無しさん@お腹いっぱい。 :2015/05/23(土) 17:56:45.03 .net 仕事とかいうネタはやめましょうねボク。
644 :名無しさん@お腹いっぱい。 :2015/05/23(土) 18:22:50.65 .net 仕事=質量×距離
645 :名無しさん@お腹いっぱい。 :2015/05/23(土) 18:27:23.08 .net >>644 仕事=力×距離 ネタぐらい正しく書こうね
646 :名無しさん@お腹いっぱい。 :2015/05/23(土) 18:57:31.97 .net >>645 仕事=速度²×質量 だろ
647 :名無しさん@お腹いっぱい。 :2015/05/23(土) 19:02:04.07 .net 電子工学系の者にとっては 仕事=電圧×電流×時間
648 :名無しさん@お腹いっぱい。 :2015/05/24(日) 08:36:07.43 .net 仕事=電界×磁界×断面積×時間
649 :名無しさん@お腹いっぱい。 :2015/05/24(日) 09:10:55.86 .net 金=仕事x時間
650 :名無しさん@お腹いっぱい。 :2015/05/24(日) 09:16:37.72 .net ∂金/∂t = ∇×仕事
651 :名無しさん@お腹いっぱい。 :2015/05/24(日) 09:43:16.72 .net ∇・金=0 (金は湧いてこない)
652 :名無しさん@お腹いっぱい。 :2015/05/24(日) 11:40:16.08 .net >>644-652 もういいんじゃない?
653 :名無しさん@お腹いっぱい。 :2015/05/24(日) 11:47:41.07 .net 仕事×2ch=解雇
654 :名無しさん@お腹いっぱい。 :2015/05/24(日) 13:06:10.39 .net シェルスクリプトで計算式記述してみてよ
655 :名無しさん@お腹いっぱい。 :2015/05/24(日) 13:18:01.71 .net 物理量の仕事じゃなくて、こっちは本当の仕事でやってるんです。 趣味で遊んでるアナタ方とは違うんです。
656 :名無しさん@お腹いっぱい。 :2015/05/24(日) 13:29:57.13 .net まあどうみても>>631 は趣味だけどな。
657 :名無しさん@お腹いっぱい。 :2015/05/24(日) 18:19:02.96 .net まちがって、 cd // ってやったら、エラーにならずに、pwdが//になったw どこにいたんだ?ww
658 :名無しさん@お腹いっぱい。 :2015/05/24(日) 18:24:05.92 .net ネットワークのトップか そんなとこにも移動できるのか
659 :名無しさん@お腹いっぱい。 :2015/05/24(日) 18:58:32.27 .net >>657 bashの仕様です。今ごろ気が付いたの?
660 :名無しさん@お腹いっぱい。 :2015/05/24(日) 21:43:39.35 .net 知らなかった
661 :名無しさん@お腹いっぱい。 :2015/05/25(月) 12:23:11.70 .net > bashの仕様す。 というよりは、POSIX かな http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html 3.267 Pathname Multiple successive <slash> characters are considered to be the same as one <slash>, except for the case of exactly two leading <slash> characters. 4.12 Pathname Resolution If a pathname begins with two successive <slash> characters, the first component following the leading <slash> characters may be interpreted in an implementation-defined manner, although more than two leading <slash> characters shall be treated as a single <slash> character.
662 :名無しさん@お腹いっぱい。 :2015/05/25(月) 12:36:39.43 .net 英語よめんけどなんか違う
663 :名無しさん@お腹いっぱい。 :2015/05/25(月) 14:37:48.45 .net 知識無いのに 「bashの仕様です。今ごろ気が付いたの?」 とか恥ずかしくないのだろうか
664 :名無しさん@お腹いっぱい。 :2015/05/25(月) 16:59:21.87 .net script書いたらすぐ行き当たる問題だし、 pwdで//が二つ出るのはbashやdashの仕様だよ。 zsh rc tclsh tcshどれも/だよ。
665 :名無しさん@お腹いっぱい。 :2015/05/25(月) 19:39:52.69 .net >>663 の人生に暗黒の1ページが加えられた瞬間に立ちあえたことに感謝w
666 :名無しさん@お腹いっぱい。 :2015/05/25(月) 20:31:48.30 .net ご質問です。 コマンドライン引数の数字を順番に四則演算するシェルプログラミングを 作りたいのですが、うまくいきません。 演算の順番は+(加算)−(減算)*(乗算)/(除算)です。 #!/bin/sh total=0 a=("$@") n=${#a[@]} n=$((n - 1)) while [ $n -ge 0]; do total=$((a[$n] + $total)) n=$((n-1)) done echo "total = $total" 自分でできたのはコマンド引数を加算のみ繰り返す処理です。 もしよい解決方法がおありでしたらご教授お願いします。
667 :名無しさん@お腹いっぱい。 :2015/05/25(月) 21:12:27.93 .net 学校の宿題か?だったら自分でやれ
668 :659 :2015/05/25(月) 21:36:30.45 .net シェルプログラミングの教本で学び始めた、IT土方目指してるニートです。 教本に応えが載ってなくて、序盤のページで行き詰ってしまいました。
669 :名無しさん@お腹いっぱい。 :2015/05/25(月) 21:46:27.07 .net # こんな感じで動くけどzshじゃないと動かない。後は直してね。 total=0 r=0 until test $#@ -eq 0 do case $(( r % 4 == 0 ? 1 : (r + 3) % 4 == 0 ? 2 : (r + 2) % 2 == 0 ? 3 : 4 )) in 1) total=$(( total + $1 ));; 2) total=$(( total - $1 ));; 3) total=$(( total * $1 ));; 4) total=$(( total / $1 ));; esac shift (( ++r )) done
670 :名無しさん@お腹いっぱい。 :2015/05/25(月) 21:53:31.12 .net # bashで動いた。そっかzshでも$#だけでいいのか。 r=0 until test $# -eq 0 do case $(( r % 4 == 0 ? 1 : (r + 3) % 4 == 0 ? 2 : (r + 2) % 2 == 0 ? 3 : 4 )) in 1) total=$(( total + $1 ));; 2) total=$(( total - $1 ));; 3) total=$(( total * $1 ));; 4) total=$(( total / $1 ));; esac shift (( ++r )) done
671 :名無しさん@お腹いっぱい。 :2015/05/25(月) 21:55:32.99 .net 他にもzshだと for a b c in 1 2 3 do echo $a $b $c done みたいな処理もできる。
672 :名無しさん@お腹いっぱい。 :2015/05/25(月) 22:08:26.16 .net 最初のr=0も無くて動くか。
673 :名無しさん@お腹いっぱい。 :2015/05/25(月) 22:21:07.68 .net ifとelseでも書けるよ。 baseの後に何が書いてあるのか分らない時は 三項演算子というのを調べると良い。
674 :名無しさん@お腹いっぱい。 :2015/05/25(月) 22:21:52.93 .net baseじゃなくてcaseね。
675 :名無しさん@お腹いっぱい。 :2015/05/25(月) 22:37:26.67 .net total=$(echo "$1+$2-$3*$4/$5" | bc) echo "total = $total"
676 :名無しさん@お腹いっぱい。 :2015/05/25(月) 23:22:22.44 .net 自分の行為に「ご」をつけるとか、 どれだけ偉いんだって話だよな。
677 :名無しさん@お腹いっぱい。 :2015/05/26(火) 01:08:45.37 .net busyboxだとbcよりdcの方が都合がいいのだろうか? まあawkでいいような気もするけど。
678 :659 :2015/05/26(火) 06:28:38.16 .net 遅くなりましたが、複数の例を挙げてもらって大変勉強になりました!!三項演算子を使う発想はなかった…
679 :名無しさん@お腹いっぱい。 :2015/05/26(火) 14:02:41.07 .net お世話になります。 PROMPT_COMMANDの設定について教えて下さい。 ターミナルのタイトルバーに現在のディレクトリ名"だけ"を表示したいのですが、 プロンプトの設定でやる PS1=\w のような \w がPROMPT_COMMANDの設定では使えないんですね? どうやったらいいのでしょうか?
680 :名無しさん@お腹いっぱい。 :2015/05/26(火) 15:34:18.87 .net PROMPT_COMMAND="pwd"はできるから好きにやればいい
681 :名無しさん@お腹いっぱい。 :2015/05/26(火) 15:43:42.53 .net PROMPT_COMMAND='RSET=$(tput sgr0); B=$(tput setf 1); echo "$USER ${B}${PWD}${RSET} $"'
682 :名無しさん@お腹いっぱい。 :2015/05/26(火) 15:53:38.10 .net ターミナルでしたか。勘違いしていた PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"' PROMPT_COMMAND='echo -ne "\033]0;${PWD/$HOME/~}\007"'
683 :名無しさん@お腹いっぱい。 :2015/05/26(火) 20:32:22.47 .net >>678 ごめん。三項演算子に間違いがあった。 (r + 2) % 2 == 0 ? 3 : 4 )) in じゃなくて (r + 2) % 4 == 0 ? 3 : 4 )) in だった。 以下楽しくなって、もう一つ書いといた。zshでしか動かないけれど。 a=(+ - \* /) b () { (( $# == 1 )) || b $@[1,-2] total=$(( total $a[$(( ($# + 3) % 4 == 0 ? 1 : ($# + 2) % 4 == 0 ? 2 : ($# + 1) % 4 == 0 ? 3 : 4 ))] $@[-1] )) echo $total } b $@ じゃあ勉強頑張って。
684 :659 :2015/05/26(火) 21:00:09.14 .net なぜか2で割ってるのはif文でつくり直してるときに気付きました!! sh、zsh、bashの違いが何やら…
685 :名無しさん@お腹いっぱい。 :2015/05/26(火) 22:22:51.71 .net >>684 そんなあなたにbusybox
686 :名無しさん@お腹いっぱい。 :2015/05/27(水) 08:32:10.49 .net bashもzshも、shの機能を包括した上で拡張していて、shの構文なら共通して動くと捉えてれば良い と思う。だからbashとzshは配列の扱いなど雑多な違いがある。以下昨日のbash版。 たぶんもっと簡素に書けるのだろうけど私も全然詳しくない。 a=(+ - \* /) b () { declare -a c=( $@ ) (( $# == 1 )) || b $( echo ${c[@]} |cut -d ' ' -f -$(( $# - 1 )) ) total=$(( total ${a[$(( ($# + 3) % 4 == 0 ? 0 : ($# + 2) % 4 == 0 ? 1 : ($# + 1) % 4 == 0 ? 2 : 3 ))]} ${c[$# - 1]} )) echo $total } b $@ 以下みたいな書き方も簡易な条件文。何が起こるのかは(( 1 ))した後にecho $?とかして 値を確認できる。c言語は0が偽だけどshellだと0が真なので注意。cでreturnで0返すでしょ。 さらに(( 0 ))などは、echo $?した時に0として返っていない事に注目。 (( 1 )) && echo true (( 0 )) || echo true 自ら自らを呼ぶ、再帰関数は調べればすぐ出てくる。 declareは、再帰関数ゆえ、変数名が同じになってしまうから、関数を呼んだ側の変数の値を、 呼ばれた側が変える事が無いようにしている。ローカル変数とか、スコープとか調べると出てくる。
687 :名無しさん@お腹いっぱい。 :2015/05/27(水) 10:46:37.27 .net シェルスクリプトに関するご質問です。 コマンドライン引数で指定されたキーワードに一致する部分を持つ、カレントディレクトリ配下のファイルをそのディレクトリ階層をそのままにコピーしたいのですが、何かよい方法はありますでしょうか。 何かよい方法はありますでしょうか。 実行環境はCentOSをTera Term とSSH接続している状態です。 実行例として [user@portal ~]$ ./sample.sh A copyTo 第1引数はキーワード、第2引数はコピー先のディレクトリ これでコピーができたことをTera Term上で確認できることが望ましいです。
688 :名無しさん@お腹いっぱい。 :2015/05/27(水) 11:05:38.31 .net ワイルドカード
689 :名無しさん@お腹いっぱい。 :2015/05/27(水) 13:08:06.76 .net >>687 #!/bin/sh find . -name "*$1*" | cpio -oc | (cd "$2" && cpio -ivdc)
690 :名無しさん@お腹いっぱい。 :2015/05/27(水) 13:41:16.73 .net ワイルドカード使って自分で書いてみたらこんなのに… #!/bin/sh cp -Rv ["$1"] "$2" >>689 はビット演算子使っててよくわからないですが、目的の動作は確認致しました! ありがとうございます!
691 :名無しさん@お腹いっぱい。 :2015/05/27(水) 16:04:06.52 .net わざとトンチンカンなこと言ってんのかな
692 :名無しさん@お腹いっぱい。 :2015/05/28(木) 10:32:09.00 .net >>670 のやつ整数しか計算できないし、第1引数を0に足してるで 第1 + 第2 - 第3 * 第4 / 第5 + 第6 - … って処理が正しい
693 :名無しさん@お腹いっぱい。 :2015/05/28(木) 12:07:05.77 .net # こうすると動くよ。後は引数を実数にしてね。 total=$1; shift a=(+ - \* /) b () { (( $# == 1 )) || b $@[1,-2] total=$(( total $a[$(( ($# + 3) % 4 == 0 ? 1 : ($# + 2) % 4 == 0 ? 2 : ($# + 1) % 4 == 0 ? 3 : 4 ))] $@[-1] )) echo $total } b $@
694 :名無しさん@お腹いっぱい。 :2015/05/28(木) 12:23:47.19 .net そっか、%つかってるんだった。 まぁ本人じゃないだろうし引かせてもらおう。
695 :名無しさん@お腹いっぱい。 :2015/05/28(木) 12:25:16.28 .net おそらく663のcodeに total=$1; shift だけでいいんじゃないかな。急ぎなので、確認して無いけど。
696 :名無しさん@お腹いっぱい。 :2015/05/28(木) 12:32:06.05 .net いや%と関係ないか。$#にたいしてだったね。
697 :名無しさん@お腹いっぱい。 :2015/05/28(木) 12:32:46.85 .net >>666 自分も、参考までに考えておいた 初期値は 0、引数の数は不定で、加算、減算、乗算、除算を繰り返すと解釈した #! /bin/sh -x while total=$( echo "( ${total:-0} ${1:++ $1} ${2:+- $2} ) ${3:+* $3} ${4:+/ $4}" | bc ) [ 4 -lt $# ] && shift 4 do : done echo "ANSWER: ${total}" exit #! /bin/sh -x while [ 0 -lt $# ] do total=$( echo "( ${total:-0} + ${1:- 0} - ${2:- 0} ) * ${3:- 1} / ${4:- 1}" | bc ) shift $(( $# > 4 ? 4 : $# )) done echo "ANSWER: ${total:-0}" exit
698 :名無しさん@お腹いっぱい。 :2015/05/28(木) 12:35:03.52 .net ああ、せっかく全角スペースで字下げしたのに、間違えてただのスペース打ち込んだか
699 :名無しさん@お腹いっぱい。 :2015/05/28(木) 18:17:15.57 .net # 他の人のレスは後で確認する。なんだか覚醒してきた。dashで動くように作った。 # 以下をtest.shで保存。 #!/bin/sh a='/+-*' test $# -eq 1 && { echo $1; exit; } || total=$( ./test.sh $( echo $@ |cut -d ' ' -f -$(( $# - 1 )) ) ) echo $(( $total $( echo $a |cut -b $(( ( $# + 3 ) % 4 + 1 )) ) $( eval echo \$$#) ))
700 :名無しさん@お腹いっぱい。 :2015/05/28(木) 21:33:17.29 .net 大きな数の余りの計算とかできる?
701 :名無しさん@お腹いっぱい。 :2015/05/28(木) 21:54:55.27 .net # 今その要求にshellだけで答えるように考えてる。 # 割り算部分はできたよ。もう疲れたからやめようかな。 # scaleの値を調整すれば何処まで計算するか指定できる。 # -の値を指定するとずっと計算し続けるので注意。 # dashで動くように書いてる。 #!bin/sh scale=8 total=$1; shift m () { test $(( $3 )) -eq 0 -o $(( $1 )) -eq 0 && return b=$1 a=$(( ${b}0 / $2 )) echo -n $a m $(( ${b}0 % $2 )) $2 $(( $3 - 1 )) # 余り、割る数、scale. } echo -n $(( total / $1 )). m $(( total % $1 )) $1 $scale
702 :名無しさん@お腹いっぱい。 :2015/05/28(木) 22:03:27.91 .net 使い方書いてなかった。 ./保存したfile 355 113 と引数二つです。
703 :名無しさん@お腹いっぱい。 :2015/05/28(木) 23:39:51.34 ID:4mhEJHtNx お題が不毛すぎ
704 :名無しさん@お腹いっぱい。 :2015/05/29(金) 02:54:31.46 .net よし諦めた。 >>697 本人じゃなくてわめいてる方ですけど、勉強になります。 一つ目書き方は知らないので勉強しておく事して二つ目ので見ると、 そっか、と思わされました。確かにその通りだと、コードも短いし理解もしやすいし。 >>666 は彼のを参考にしたほうが良かと。私のは今考えて見ると三項演算子も無駄だったし、 ただ>>699 は毒毒しい事をしているので、結構勉強になると思う。
705 :名無しさん@お腹いっぱい。 :2015/05/29(金) 13:11:54.28 .net #!/bin/sh # ごめん>>701 それ再帰してるから途中で計算できてなかった。 # 悪い所も無駄に関数な所も直して無いけど。以下でいける。 scale=-1 total=$1; shift m () { b=$1 # $1: 余り、$2: 割る数、$3: scale. until test $scale = 0 -o b = 0 do a=$(( ${b}0 / $2 )) echo -n $a b=$(( ${b}0 % $2 )) scale=$(( scale - 1 )) done } echo -n $(( total / $1 )). m $(( total % $1 )) $1 $scale
706 :名無しさん@お腹いっぱい。 :2015/05/29(金) 13:15:06.25 .net やば>>705 まさかの$3 scale意味ない説。
707 :名無しさん@お腹いっぱい。 :2015/05/29(金) 14:07:59.50 .net いやコメント内で使ってたか。
708 :名無しさん@お腹いっぱい。 :2015/05/29(金) 17:25:17.77 .net なるほどdo whileみたいに使えるだね。 while false true do echo test break done 前にfor分は以下で動くのになんでwhileは駄目なんだろうと思った、謎がとけました。 for r in * { echo $r }
709 :名無しさん@お腹いっぱい。 :2015/05/29(金) 17:41:57.11 .net ふむ、whileから最後の戻り値の間、do doneの間を回るわけだからdo whileとはまた違う。 離れ隠しとも名付けようかこの新手
710 :名無しさん@お腹いっぱい。 :2015/05/29(金) 19:43:00.94 .net >> 696 > >>697 本人じゃなくてわめいてる方ですけど、勉強になります。 意外な効果で驚くなあ。でも、役に立って良かった > 一つ目書き方は知らないので勉強しておく って言葉で改めて見直すと > 序盤のページで行き詰ってしまいました。 序盤で行き詰まっているんだよね。そんな人に対して適当な回答じゃあ無かったかもしれないなあ ( parameter substitution の機能とか使うべきではなかったか )と思い、妙なヒント入りでもう一度書いておきました 蛇足だけど、V7 Bourne Shell だと、:- でなく - なんだよね http://www.in-ulm.de/~mascheck/bourne/v7/ > ${parameter-word} > If parameter is set then substitute its value; otherwise substitute word. それでなのか、POSIX でも定義されていて http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02 bash や、dash でも echo ${HOGE-$HOME} が機能する >>709 man dash, man bash, man ksh, man zshmisc と確認してみたけど while list; do list; done 相当の事が書いてある 結構誰でも知っているて、新手では無いよ
711 :名無しさん@お腹いっぱい。 :2015/05/29(金) 19:44:12.32 .net #! /bin/sh -x total=0 while case $# in 0) break ;; 1) total=$( echo "${total} + $1" | bc ) break ;; 2) total=$( echo "( ${total} + $1 - $2 )" | bc ) break ;; 3) total=$( echo "( ${total} + $1 - $2 ) * $3" | bc ) break ;;
712 :名無しさん@お腹いっぱい。 :2015/05/29(金) 19:44:26.35 .net 4) total=$( echo "( ${total} + $1 - $2 ) * $3 / $4" | bc ) break ;; [5-9]|[0-9]*[0-9]) total=$( echo "( ${total} + $1 - $2 ) * $3 / $4" | bc ) shift 4 true ;; *) echo 'It never comes here and we know it.' >&2 exit 1 ;; esac do : 'Do nothing with list-2 of "while list-1; do list-2; done"' done echo "ANSWER: ${total}" exit
713 :名無しさん@お腹いっぱい。 :2015/05/30(土) 04:04:02.38 .net # おかげさまで、また少し成長できました。 #!/bin/zsh eval echo -n \${$#..1} \'$( yes '+-*/'|tr -d '\n' |dd bs=$(( $# - 1)) \ count=1 cbs=1 conv=unblock 2>/dev/null | sed 's#^#r#')\' p |dc #!/bin/sh { eval echo -n $( seq -f "$%g" $# |tac ); echo "$( yes '+-*/'|tr -d '\n' \ |dd bs=$(( $# - 1)) count=1 cbs=1 conv=unblock 2>/dev/null | sed 's#^#r#' )" p; } |dc
714 :名無しさん@お腹いっぱい。 :2015/05/30(土) 07:57:05.78 .net なんか凄いもの練り上げたね。なんか、スクリプトを書く 705 の楽しさが伝わってくるわw eval echo $( seq -f "$%g" $# | tac ) の部分は "$@" とか使えないものかと思い、しばらく考えたんだが... echo "$@ " | tac -s " "
715 :名無しさん@お腹いっぱい。 :2015/05/31(日) 07:18:32.49 .net # 書けて良かった。 #!/bin/sh eval echo 0 $( printf '$%d + $%d - $%d @ $%d /' $( seq $# ) | \ sed 's#+ $0#+ 0#g; s#- $0#- 1#g; s#@ $0#@ 1#g; a p' ) |tr '@' '*' |dc
716 :名無しさん@お腹いっぱい。 :2015/05/31(日) 08:54:03.31 .net >>713 後段も書き換えてみた echo "$( yes '+-*/'|tr -d '\n' \ |dd bs=$(( $# - 1)) count=1 cbs=1 conv=unblock 2>/dev/null | sed 's#^#r#' )" p #! /bin/sh # 何をするスクリプトかぱっと見で全くわからないので、一応書いておくけど、 # これも >>666 の回答 { echo "$@ " | tac -s " " yes 'r+r-r*r/' | tr -d '\n' | head -c $(( ( $# - 1 ) * 2 )) echo "p" } | dc >>715 アイデアが尽きないね。@は、エスケープ用かな?外しておいた #! /bin/sh eval echo 0 $( printf '$%d + $%d - $%d \\* $%d / ' $( seq $# ) | sed 's#+ $0#+ 0#g; s#- $0#- 1#g; s#* $0#* 1#g; a p' ) | dc
717 :名無しさん@お腹いっぱい。 :2015/05/31(日) 11:51:51.69 .net 大きな数の計算できるならRSA暗号化もできるんじゃないか?
718 :名無しさん@お腹いっぱい。 :2015/05/31(日) 12:23:30.92 .net 整形ついでに sed を整理してみた eval とかなるべく使いたくないけど、printf で展開するアイデアが面白いな #! /bin/sh { eval echo 0 $( printf '$%d + $%d - $%d \\* $%d / ' $( seq $# ) | sed -e 's/$0 [+/*\-]* //g' )p } | dc
719 :名無しさん@お腹いっぱい。 :2015/05/31(日) 18:16:33.13 .net ちょっと危なっかしいけど、これで eval も外せたかな? #! /bin/sh { echo 0 $( n=$(( $# % 4 )) printf '%d + %d - %d \\* %d / ' "$@" | sed -e 's/\([0-9]\{1,\} [+/*\-]* \)\{'"$(( n == 0 ? 0 : 4 - n ))"'\}$//' )p } | dc
720 :名無しさん@お腹いっぱい。 :2015/06/01(月) 06:34:30.80 .net エスケープを外す前の方で書き込んでいた 訂正 #! /bin/sh { echo "0 $( n=$(( $# % 4 )) printf '%d + %d - %d * %d / ' "$@" | sed -e 's/\([0-9]\{1,\} [+/*\-]* \)\{'"$(( n == 0 ? 0 : 4 - n ))"'\}$//' )p" } | dc
721 :名無しさん@お腹いっぱい。 :2015/06/02(火) 19:51:41.64 .net 連投スマソ。printf 見直した #! /bin/sh echo "0 $( printf '%s + %s - %s * %s / ' "$@" "END" | sed -e 's/END.*$//' )p" | dc
722 :名無しさん@お腹いっぱい。 :2015/06/02(火) 20:48:50.22 .net もうずいぶん前から計算違ってる
723 :名無しさん@お腹いっぱい。 :2015/06/04(木) 06:35:03.60 .net 解釈の違いだろ。echo も省いた printf '%s + %s - %s * %s / ' "$@" "END" | sed -e 's/^/0 /; s/END.*$/p/' | dc
724 :名無しさん@お腹いっぱい。 :2015/06/06(土) 17:40:55.66 .net 先生のcodeを勉強する前に作っておきました。 ここのpageを見て理解しながら作りました。 http://www.maitou.gr.jp/rsa/ 素数判定のアルゴリズムは以下のC言語のものを、冪乗の計算を一度に変えたものです。 http://ja.wikipedia.org/wiki/%E7%B4%A0%E6%95%B0%E5%88%A4%E5%AE%9A 今は一度コメントを全部消した状態で貼っておきます。 dcで書いてるので呪文っぽいので理解しようとしないほうが吉です。 そのうちbase64でコメントつけて貼るかもしれません。 factorにすぐやられますから、実用性は無いです。 dashで動くつもりでしたがzshでなければ動きません。 printf %d 010 とした時の挙動の違いに今気付きました。
725 :名無しさん@お腹いっぱい。 :2015/06/06(土) 17:42:57.23 .net # $1から$2の範囲の素数を出力します。$2が省略された場合は$1一つの数に対して判定します。 # 例: prime 10000 20000 prime () { dc -e "$( seq $1 ${2:-$1} )"' z sc 0 sr [S2 lr 1 + sr lr lc >!] s! l! x [[sg 3 Q] sk [p sg 3 Q] s.] sA [d 2 >k d 2 =. d 2 % 0 =k] sB [[sg 2 Q] sk [p sg 2 Q] s. d v s^ 3 s/] sC [l^ l/ >. d l/ % 0 =k l/ 2 + s/ lD x] sD 0 sr [L2 [lA x lB x lC x lD x]x lr 1 + sr lr lc >@] s@ l@ x ' } # 上記、prime関数から得られた適当な素数二つが引数です。 # そこから秘密鍵、公開鍵を出力します。 # 例: keygen 10243 19963 keygen () { dc -e "[$1 1 :a]x [$2 2 :a]x [$1 $2 * 3 :a]x"' [1 ;a]x 1 - [2 ;a]x 1 - * 2 / 1 + S2 [l2 lr [d la :k]x / [la :p]x la 1 + sa l. x] sA [[la 1 - ;k]x n [ ] n [la 1 - ;p]x n [ ] n [3 ;a]x p sg] s. 1 sa l2 v s^ 2 sr [l2 lr % 0 =A lr 1 + sr lr l^ !<B] sB lB x ' }
726 :名無しさん@お腹いっぱい。 :2015/06/06(土) 17:44:29.67 .net # 上記、keygenが出力した鍵から適当な一段を使い暗号化し、出力します。 # 例: # keygen 10243 19963 # > 7 14603629 204481009 # > 17 6013259 204481009 # > 119 859037 204481009 # encrypt 859037 204481009 暗号化するfile >暗号化した後のfile encrypt () { echo 8 o $( printf "8 i %d 12 i $1 $2 | n [ ] n " $( od -vt oC -A n $3 ) ) |dc } # 上記の公開鍵で暗号化したものを、秘密鍵で復号します。秘密鍵は上記の例で暗号化した場合、 # 以下の組み合わせになります。 # encrypt 119 204481009 暗号化されたfile >復号化した後のfile decrypt () { printf "8 i %d 12 i $1 $2 | P " $( cat $3 ) |dc }
727 :名無しさん@お腹いっぱい。 :2015/06/06(土) 20:13:54.61 .net ごめんなさい。素数と素数をかけた数が512以下だと復号に失敗します。
728 :名無しさん@お腹いっぱい。 :2015/06/06(土) 20:27:58.37 .net # 以下じゃなくて未満か。 # 他に、確認に使ったprogram. # ずるしてopensslを使っています。 # まず!!!!!!!!復号化するfileに値を入れて下さい!!!!!!!!!!!!!。小さいfileが良いと思います。 # mktempで作るfileは自動では削除しません。最初にechoで出力するので手動でお願いします。 # primeで適当な素数を二つ選択しkeygenを行い、そこで作られた鍵で暗号化したfileを # 復号できるかの確認です。 # 使い方。 # check_2 $( prime 10000 20000 ) # 出力は、出力した時に確認したkeygenに使った素数二つ,暗号化復号化に使える数字と法です。
729 :名無しさん@お腹いっぱい。 :2015/06/06(土) 20:29:33.71 .net file= file_encrypt=$( mktemp ) file_decrypt=$( mktemp ) echo 後で削除する事、$file_encrypt $file_decrypt check_2 () { test $# -lt 2 && return p1=$( echo $@ |tr ' ' '\n' |sed -n $(( $( openssl rand 2 \ |od -t u -A n ) % $# + 1 ))p ) while # 使いました!!! p2=$( echo $@ |tr ' ' '\n' |sed -n $(( $( openssl rand 2 \ |od -t u -A n ) % $# + 1 ))p ) test $p2 -eq $p1 do : done f () { test $# -eq 0 && return encrypt $(( $# % 2 ? $1 : $2 )) $3 $file >$file_encrypt decrypt $(( $# % 2 ? $2 : $1 )) $3 $file_encrypt >$file_decrypt diff $file $file_decrypt && echo 成功。keygen $p1 $p2, $1 $2 $3 \ || echo 失敗。keygen $p1 $p2, $1 $2 $3 1>&2 shift 3 f $@ } f $( keygen $p1 $p2 ) check_2 $( echo $@ |tr ' ' '\n' |grep -vE "($p1|$p2)" ) } # rm $file_encrypt $file_decrypt
730 :名無しさん@お腹いっぱい。 :2015/06/06(土) 20:36:41.36 .net もっと大きい値で確認する場合は、 opensslのrandの値も変える必要があったような気がします。もう忘れました。 現在対したコメント無くてごめんなさい。
731 :名無しさん@お腹いっぱい。 :2015/06/07(日) 19:13:41.49 .net >>723 から sed も取り除いてみました printf '%s + %s - %s * %s / ' '0 0' 0 1 1 "$@" 'p quit' | dc >>724-730 力作ですなぁ
732 :10人に1人はカルトか外国人 :2015/06/08(月) 17:47:19.33 .net ●マインドコントロールの手法● ・沢山の人が偏った意見を一貫して支持する 偏った意見でも、集団の中でその意見が信じられていれば、自分の考え方は間違っているのか、等と思わせる手法 ・不利な質問をさせなくしたり、不利な質問には答えない、スルーする 誰にも質問や反論をさせないことにより、誰もが皆、疑いなど無いんだと信じ込ませる手法 偏った思想や考え方に染まっていたり、常識が通じない人間は、頭が悪いフリをしているカルト工作員の可能性が高い 靖国参拝、皇族、国旗国歌、神社神道を嫌うカルト 10人に一人はカルトか外国人 「ガスライティング」で検索を!
733 :名無しさん@お腹いっぱい。 :2015/06/08(月) 21:12:33.56 .net forの中で find /foo -iname "123foo.txt" -o -iname "foo.txt" をしたくて、"123foo.txt" から"foo.txt"を 作りたいのですけどいい方法を教えていただけないでしょうか? 123は0桁から4桁あります。 よろしくお願いします。
734 :名無しさん@お腹いっぱい。 :2015/06/08(月) 22:27:29.53 .net 「シェル 数値 ゼロ梅」でぐぐれ
735 :名無しさん@お腹いっぱい。 :2015/06/08(月) 23:04:24.58 .net シェルっていうと、おじさんたちが激怒になるから気をつけな
736 :名無しさん@お腹いっぱい。 :2015/06/09(火) 00:33:36.94 .net 「シェルっていうと」じゃなくて「シェルクリプトのことをシェルっていうと」だ >>734 の場合は問題ない
737 :名無しさん@お腹いっぱい。 :2015/06/09(火) 01:25:54.94 .net $ filename1=123foo.txt $ filename2=$(echo $filename1 | tr -d [0-9]) $ echo $filename2 foo.txt
738 :名無しさん@お腹いっぱい。 :2015/06/09(火) 01:49:15.59 .net 数字の部分が必ずファイル名の先頭にかたまって出現するということなら $ filename=123foo.txt $ echo ${filename##*[0-9]} foo.txt
739 :名無しさん@お腹いっぱい。 :2015/06/09(火) 08:44:03.74 .net そうか trか変数展開をつかうのか 自分は今まで何考えてたんだ コマンド、変数展開を使いこなせてないことを痛感した ありがとう
740 :名無しさん@お腹いっぱい。 :2015/06/11(木) 16:47:01.72 .net いくつかのディレクトリにあるファイルすべてを一括処理してやろうと foundfiles=$(find /hoge/hoge1 /foo/foo1 -name -type f *.txt) for x in "${foundfiles}" do 処理 done としてみたのですが、うまくいきませんでした。 どこを直せばよいのでしょうか?
741 :名無しさん@お腹いっぱい。 :2015/06/11(木) 17:10:28.24 .net -nameの引数の位置
742 :名無しさん@お腹いっぱい。 :2015/06/11(木) 18:04:07.93 .net うわぁー、ばかなことやっちまってた foundfiles=$(find /hoge/hoge1 /foo/foo1 -name *.txt -type f) for x in "${foundfiles}" do 処理 done これでokですか?まだ、怪しいとこありますか?
743 :名無しさん@お腹いっぱい。 :2015/06/11(木) 18:13:25.03 .net findの結果と処理のところにecho入れて 気体通りになってるか確認して終わり かまう奴はアホか
744 :名無しさん@お腹いっぱい。 :2015/06/11(木) 19:55:03.20 .net 優しいんですね 豚
745 :名無しさん@お腹いっぱい。 :2015/06/12(金) 12:06:31.64 .net foundfiles=$(find /hoge/hoge1 /foo/foo1 -name *.txt -type f) for x in "${foundfiles}" do echo "$x" done とやると一見上手くいったように見えましたが、 foundfiles=$(find /hoge/hoge1 /foo/foo1 -name *.txt -type f) for x in "${foundfiles}" do echo "${x##*/}" echo "$x" done としてやると、初めのファイルのファイル名だけ出てきて、あとは検索結果が表示されるだけでした。 なにがまずかったのですか?直すことはできるのでしょうか? 👀 Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
746 :名無しさん@お腹いっぱい。 :2015/06/12(金) 13:33:39.96 .net ダブルクォートはどんなときに使えばいいのかどんなときに使わないのか そのあたりがわかってないみたい がんばれ
747 :名無しさん@お腹いっぱい。 :2015/06/12(金) 14:39:13.27 .net "${foundfiles}"のダブルクォートを外したらできました。 なんでなんだろう? for x in "$@" というのをよく見かけるからまねしてました。 "${foundfiles}"は検索結果を1つの文字列にする。 なら、"$@"は?あれれ? どういうことなのでしょうか?
748 :名無しさん@お腹いっぱい。 :2015/06/12(金) 14:43:19.06 .net シェルスクリプトの本でも一冊買ってきてまじめに勉強しろ そうしない身に付かない
749 :名無しさん@お腹いっぱい。 :2015/06/12(金) 14:49:36.84 .net find の結果を使って何かするなら、for while xargs findのexec 等を使うけど、 for で変数に入れて回す場合、IFSに改行をセットして、区切ってもらうために変数をクォートはしない #!/bin/sh -x var=' a b c d e 2OrMoreSpaces between the words x y z ' IFS=' ' # for i in "${var}" for i in ${var} do echo "=> $i <=" done 応援するよ。がんばって
750 :741 :2015/06/12(金) 15:27:47.27 .net >>6 E.1 を中心に、man bsh、man dash で学習 □E. 学習用テキスト 1. Bourne Shell自習テキスト ( 1993年 ) pdf お薦め 一応、引用しといた man dash @ Expands to the positional parameters, starting from one. When the expansion occurs within double-quotes, each posi‐ tional parameter expands as a separate argument. If there are no positional parameters, the expansion of @ generates zero arguments, even when @ is double-quoted. What this basically means, for example, is if $1 is “abc” and $2 is “def ghi”, then "$@" expands to the two arguments: "abc" "def ghi" $1 が "abc"で、$2 が "def ghi" のとき、"$@" は "abc" "def ghi" に展開される
751 :名無しさん@お腹いっぱい。 :2015/06/12(金) 15:31:58.73 .net 読みなおしてよかったよ man bsh なんて 訂正 man bash、man dash
752 :名無しさん@お腹いっぱい。 :2015/06/13(土) 13:45:25.05 .net ありがとう ネット上の記述とmanで今までなんとかこなせてたけど 基本がないとだめですね 早速、>>6 を読んでみます
753 :名無しさん@お腹いっぱい。 :2015/06/13(土) 20:52:58.13 .net >>747 foundfiles=( $(find /hoge/hoge1 /foo/foo1 -name *.txt -type f) ) ←配列にする for x in "${foundfiles[@]}" でおk
754 :名無しさん@お腹いっぱい。 :2015/06/15(月) 13:27:36.31 .net ありがとう それでできました ()はコマンド置換だけじゃないんですね
755 :名無しさん@お腹いっぱい。 :2015/06/15(月) 13:44:30.60 .net コマンド置換は $( )
756 :名無しさん@お腹いっぱい。 :2015/06/15(月) 23:58:45.64 .net $() で思い出したけど ----------------------- #!/bin/bash LAST=0 function test() { LAST=$1 echo $LAST } echo "LAST=$LAST" test 111 echo "LAST=$LAST" x=$(test 222) echo "LAST=$LAST x=$x" -------------------------- を実行すると LAST=0 111 LAST=111 LAST=111 x=222 ←なぜ LASTが 222に変更されないのか? 実際は関数のネストとかでもっと複雑だったんだが、 変な動作するようになってデバッグに苦労した・・・
757 :名無しさん@お腹いっぱい。 :2015/06/16(火) 00:33:43.81 .net えっ? 釣り?
758 :名無しさん@お腹いっぱい。 :2015/06/16(火) 00:48:56.39 .net サブシェルで実行されるから
759 :名無しさん@お腹いっぱい。 :2015/06/17(水) 12:27:35.75 .net >>753 スペース入りファイル名に未対応、失格。
760 :名無しさん@お腹いっぱい。 :2015/06/17(水) 13:55:31.31 .net >>759 では模範解答をどうぞ
761 :名無しさん@お腹いっぱい。 :2015/06/17(水) 20:41:26.36 .net IFS_tmp=$IFS; IFS=$’\n’
762 :名無しさん@お腹いっぱい。 :2015/06/17(水) 21:21:37.47 .net 改行入りファイル名に未対応、失格。
763 :名無しさん@お腹いっぱい。 :2015/06/17(水) 21:25:36.37 .net 最終模範解答 IFS_tmp=$IFS; IFS=$"\n"
764 :名無しさん@お腹いっぱい。 :2015/06/18(木) 05:55:23.84 .net 改行入りファイル名に未対応、失格。
765 :名無しさん@お腹いっぱい。 :2015/06/18(木) 07:35:13.14 .net スペース等だけじゃなく、アスタなどの特殊記号にも未対応、失格。
766 :名無しさん@お腹いっぱい。 :2015/06/18(木) 07:48:16.57 .net そんなファイルは作らなければ解決。
767 :名無しさん@お腹いっぱい。 :2015/06/18(木) 10:04:59.96 .net だったら全部""でくくっておけばいいでないの?
768 :名無しさん@お腹いっぱい。 :2015/06/18(木) 10:17:46.54 .net find ... -exec ... + を避ける理由は?
769 :名無しさん@お腹いっぱい。 :2015/06/23(火) 21:09:03.45 .net find -print0 | xargs -0 でスペースや改行の入ったファイル名もOKだよね unix仕様のファイル名の終端はNULLだったっけ?
770 :名無しさん@お腹いっぱい。 :2015/06/24(水) 07:32:33.60 .net >>769 パイプとプロセスが無駄 find ... -exec ... + を避ける理由は?
771 :名無しさん@お腹いっぱい。 :2015/06/24(水) 15:25:39.96 .net >>770 それ使うのは初心者で、逆に実行効率が悪くなる。
772 :名無しさん@お腹いっぱい。 :2015/06/24(水) 15:43:54.58 .net >>771 理由は?
773 :名無しさん@お腹いっぱい。 :2015/06/24(水) 15:44:35.63 .net -execだと見つかったファイルの数だけプロセスつくるんだよね? xargsだとexecシステムコールの引数個数制限までは1個のプロセス作ってその引数に見つかったファイル全部渡すのかな?
774 :名無しさん@お腹いっぱい。 :2015/06/24(水) 15:53:10.35 .net >>773 > find ... -exec ... + これの最後の+の意味調べないで、言いがかりつけてんの?
775 :名無しさん@お腹いっぱい。 :2015/06/24(水) 20:58:37.54 .net さすがに恥ずかしくて逃げ出したか。
776 :名無しさん@お腹いっぱい。 :2015/06/26(金) 03:14:09.55 .net mvとかで使えない中途半端なもの出されてドヤ顔されてもなあ
777 :名無しさん@お腹いっぱい。 :2015/06/26(金) 08:16:34.16 .net 逃げ出さなかったメンタルだけは褒めてあげよう。 find . -exec sh -c 'mv "$@" hoge' {} + 今度は逃げ出すかな?
778 :名無しさん@お腹いっぱい。 :2015/06/26(金) 08:48:53.03 .net >>777 それ、1番目に見つかったファイル(ディレクトリ)のみ取りこぼすバグあり。 find . -exec sh -c 'mv "$@" hoge' DUMMY {} + DUMMYが必要。
779 :名無しさん@お腹いっぱい。 :2015/06/26(金) 09:07:10.65 .net 何だよ、そのDUMMYって。意味ねーどころか、エラー出るし。 xargsと比べてって事だから、省略したけど、.を避けるのはfindでやるんだろ。 あえてやるなら find . -exec sh -c 'shift; mv "$@" hoge' {} + xargs押しのベテランさんはどうするんだろう? 初心者に教えてくださいな。
780 :名無しさん@お腹いっぱい。 :2015/06/26(金) 09:11:18.72 .net >>777 プロセスが無駄とか言っておきながらsh使うってバカなの? しかもファイル数に比例した分だけ起動するから、一つで済むxargs以下じゃん。やっぱりバカだろ。
781 :名無しさん@お腹いっぱい。 :2015/06/26(金) 09:21:57.94 .net >>779 オマエ、DUMMYの意味わかってないのか。 shiftしたら逆だぞ、引数「2個」取りこぼす。 shiftの逆(そんなのないけど)をやる必要があるんだよw
782 :名無しさん@お腹いっぱい。 :2015/06/26(金) 09:31:47.52 .net >>779 $ sh -c 'echo "$@"' 1 2 3 4 2 3 4 ↑なぜ 1 が消えるかわかるかな? $ sh -c 'echo "$@"' DUMMY 1 2 3 4 1 2 3 4 ↑DUMMYを入れると 1 を取りこぼさないねw
783 :名無しさん@お腹いっぱい。 :2015/06/26(金) 11:33:10.48 .net >>780 ベテラン(老害ともいう)登場。 おじいちゃんが現役時代のfindはそうだったらしいけど、今のfindはもっとお利口なんだよ。 おじいちゃんが現役だったころは find ... -exec ..... \; だっただろ。今は find ... -exec ..... + ってやるんだよ。 >>781-782 これはスマンかった。これだね | sh -c string [name [arg ...]] でも、shiftは$1以降に対して働くから > shiftしたら逆だぞ、引数「2個」取りこぼす。 キミもわかってないね。
784 :名無しさん@お腹いっぱい。 :2015/06/26(金) 11:51:05.26 .net エントリが沢山あって複数回起動されるかもしれないので、$1がカレントディレクトリの時だけshiftにした方が良いね。
785 :名無しさん@お腹いっぱい。 :2015/06/26(金) 11:55:14.50 .net あえて DUMMY を外すとしたら、こんな感じかな sh -c 'echo "${1:+"$0" "$@"}"' 1 2 3 4 煽りぎみの言葉(言いがかり、逃げ出した、メンタルだけは褒めてあげよう、バカ)を 無闇に使うのは止めてさあ、楽しくいこう これだけ知ってりゃあ良いでしょ 歴史的には -print0 は GNU find の、-exec + は他の多くの Unix での拡張で、 移植の際は注意が必要だったが、-exec + が 2001年版から POSIX に記載された事で GNU find でも 2005 年頃( ver 4.2.12 )から -exec + が使える様になった 新しく書くスクリプトでは xargs の別の機能を使う場合を除いて find -exec + の方が良いだろう ちなみに -exec + も SVR4 からあるようだよ http://www.in-ulm.de/~mascheck/various/find/ > Actually it originates from SVR4 ('88), where it was not documented yet (this feature implemented by > D.Korn, see two messages from the austin-group-list, local copies),
786 :名無しさん@お腹いっぱい。 :2015/06/26(金) 12:06:22.64 .net $0 だけしか無い際の考慮が足りなかったけど、下らないので訂正は省略します
787 :名無しさん@お腹いっぱい。 :2015/06/26(金) 12:11:39.69 .net 動作変わったら場合分けしないと使えないから長くなるな。
788 :名無しさん@お腹いっぱい。 :2015/06/26(金) 13:06:31.47 .net >>783 なにを指摘されたのかも理解していないようだ
789 :名無しさん@お腹いっぱい。 :2015/06/26(金) 13:08:31.26 .net >>785 >新しく書くスクリプトでは xargs の別の機能を使う場合を除いて find -exec + の方が良いだろう よくない、という指摘をしてるんだが...
790 :名無しさん@お腹いっぱい。 :2015/06/26(金) 17:04:27.96 .net >>788 なにを指摘されたのかも理解していないようだ
791 :名無しさん@お腹いっぱい。 :2015/06/26(金) 18:36:29.66 .net 念の為貼っておきますよ http://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=find&dir=jpman-5.4.0%2Fman§=0#sect3 > -exec utility [argument ...] {} + > -exec と同じですが、各 utility の起動において ``{}'' はなるべく多 > くのパス名と置き換えられます。この動作は xargs(1) のものに似てい > ます。 http://linuxjm.osdn.jp/html/GNU_findutils/man1/find.1.html > -exec command {} + > アクション -exec のこの変形も、選択したファイルに対して指定したコマンドを実行するが、 > コマンドラインを形成するとき、選択した各ファイル名をコマンドラインの末尾に > 追加して行くという方法を取る(訳注: 略)。 > そのため、コマンドを呼び出す回数は、マッチしたファイルの数より ずっと少なくてすむわけだ。 > コマンドラインの形成法は、xargs のコマンドライン形成法とほぼ同じである。
792 :名無しさん@お腹いっぱい。 :2015/06/26(金) 18:48:07.56 .net 理解できましたかあ? おじいちゃん。
793 :名無しさん@お腹いっぱい。 :2015/06/26(金) 22:37:52.51 .net >sh -c 'echo "${1:+"$0" "$@"}"' 1 2 3 4 こんなの書かなきゃいけなくなる場合ならxargsでいい気がする
794 :名無しさん@お腹いっぱい。 :2015/06/26(金) 23:30:59.69 .net >>790 バカはすぐオウム返しするよな。
795 :名無しさん@お腹いっぱい。 :2015/06/26(金) 23:32:45.65 .net >>791 それを貼って、何の意味があるの?
796 :名無しさん@お腹いっぱい。 :2015/06/27(土) 00:07:20.23 .net >>795 -exec + を分かっていなさそうな発言 >>773 に加え >>780 でも見られ、 話がかみ合っていない原因かもしれないと考え、念の為貼っておいた ちなみに >>792 は別人
797 :名無しさん@お腹いっぱい。 :2015/06/27(土) 00:25:43.31 .net >>796 お前、プロセスの数も数えられないの? 日本語も読めないようだし、本当、生きてて大丈夫か?
798 :名無しさん@お腹いっぱい。 :2015/06/27(土) 07:41:59.25 .net 悪いけど相手はしない
799 :名無しさん@お腹いっぱい。 :2015/06/27(土) 08:10:57.63 .net >>797 おじいちゃんの頃はステップ関数は比例って習ったの? 今はちがうんだよ。
800 :名無しさん@お腹いっぱい。 :2015/06/27(土) 13:57:24.86 .net なんだ、さんざん煽っておいて、自分が逃げてやんの。
801 :名無しさん@お腹いっぱい。 :2015/06/27(土) 18:01:58.60 .net ん? おじいちゃんの基準では 限定的な条件でxargsの方がファイル数/MAX_ARGSだけプロセス数が少ないから勝ちなの? はいはい、えらいえらい。
802 :名無しさん@お腹いっぱい。 :2015/06/27(土) 19:42:45.43 .net 一番最初に煽ったバカの基準がそれだろ。 +は使い物にならんとか親切に教えてあげたら、 shとか持ち出す本末転倒ぶりを晒してるだけじゃん。 いい加減逆ギレはみっともないよ。
803 :名無しさん@お腹いっぱい。 :2015/06/27(土) 20:48:29.92 .net パイプが不要なのには目をつぶるんだ。 おじいちゃんの世代って、わかりやすくて楽だね。
804 :名無しさん@お腹いっぱい。 :2015/06/27(土) 22:37:52.63 .net プロセスの数が増えたら余計非効率だと何回言えば分かるんだ?
805 :名無しさん@お腹いっぱい。 :2015/06/28(日) 07:24:37.85 .net find /dir -オプション ... -exec mv -t ディレクトリ {} + ↑で解決。不要プロセスなし。
806 :名無しさん@お腹いっぱい。 :2015/06/28(日) 16:41:15.99 .net 解決とか言ってる割りに、比較した結果が貼られてないから机上の空論だね。
807 :名無しさん@お腹いっぱい。 :2015/06/28(日) 17:03:28.70 .net アスペは放置で。
808 :名無しさん@お腹いっぱい。 :2015/06/28(日) 22:54:42.25 .net CPUの頭打ちだからマルチコアっていう時代にパイプに神経質とか何
809 :名無しさん@お腹いっぱい。 :2015/06/29(月) 11:33:48.48 .net テキスト中の文字列abc123をabcAA123にしようとsedで sed -e 's/[a-z][0-9]/.00./g' やsed -e 's/[a-z][0-9]/[a-z]AA[0-9]/g' を 試しましたがうまくいきませんでした。 どのようにすればよいのでしょうか?sed以外でできるのでしょうか?
810 :名無しさん@お腹いっぱい。 :2015/06/29(月) 12:03:55.86 .net sed -e 's/\([a-z][a-z]*\)\([0-9][0-9]*\)/\1AA\2/g'
811 :名無しさん@お腹いっぱい。 :2015/06/29(月) 12:06:03.81 .net +でよかったか・・・ sed -e 's/\([a-z]+\)\([0-9]+\)/\1AA\2/g'
812 :名無しさん@お腹いっぱい。 :2015/06/29(月) 12:21:46.28 .net echo abc123|sed -e 's/\([a-z]+\)\([0-9]+\)/\1AA\2/g' をやってみましたがだめでした。なんでだろう。 manをみると2005年のものでした。
813 :名無しさん@お腹いっぱい。 :2015/06/29(月) 13:47:40.61 .net +を外したらでました バージョンのせいかな 勉強になりました ありがとうございました
814 :名無しさん@お腹いっぱい。 :2015/06/29(月) 13:57:57.10 .net どのsedを使ってるのかわからんし どのmanを読んでるのかわからん
815 :名無しさん@お腹いっぱい。 :2015/06/29(月) 14:26:49.95 .net 憶測で書いてみるけど、「古来の sed の正規表現では + が使えないが GNU sed では + が使える」というオチの予感がします。 # 今ちょっと調べてみるまで GNU sed で + が使えるとは知らなかった……
816 :名無しさん@お腹いっぱい。 :2015/06/29(月) 14:40:06.66 .net 坊や、もうちょっと勉強してからおいで、としか
817 :名無しさん@お腹いっぱい。 :2015/06/29(月) 19:01:07.47 .net debian系でスクリプト作ってVMで軽いDSLで動かそうとしたら 使ってるコマンドのオプションが違ってて使えなかったなあ まあ最新のパッケージ落とせばよかったんだろうけど皆はどうしてる?
818 :名無しさん@お腹いっぱい。 :2015/06/29(月) 20:34:14.84 .net >>813 + じゃなくて \+ ではどうよ? echo abc123 | sed -e 's/\([a-z]\+\)\([0-9]\+\)/\1AA\2/g'
819 :名無しさん@お腹いっぱい。 :2015/06/29(月) 21:17:14.01 .net 興味でお聞きしたいのですが シェルスクリプトで株の発注のようなことはできませんかね? 証券会社にログインしフォーム入力して発注ボタン押すような・・ そんな言語じゃないと思うのですができたら人気出るかなあと
820 :名無しさん@お腹いっぱい。 :2015/06/29(月) 21:20:48.70 .net 人気じゃなくて覚える気でした
821 :名無しさん@お腹いっぱい。 :2015/06/29(月) 21:26:58.24 .net シェルスクリプトで出来ないことなんて何もない
822 :名無しさん@お腹いっぱい。 :2015/06/29(月) 21:38:54.99 .net シェルスクリプトを覚えたら彼女が出来ました
823 :名無しさん@お腹いっぱい。 :2015/06/29(月) 21:41:19.11 .net フフフ 昔、シェルスクリプトでロト6の番号を出していたのはいい思い出 一度も当たらなかったけどな・・・
824 :名無しさん@お腹いっぱい。 :2015/06/29(月) 21:53:20.99 .net >>819 できるし、発想はわかるが アルゴリズム取引の時代にシェルスクリプトではだぶん勝負にならない
825 :名無しさん@お腹いっぱい。 :2015/06/29(月) 22:08:23.46 .net >>819 >>349 とか>>371 は知ってる?
826 :名無しさん@お腹いっぱい。 :2015/06/29(月) 23:36:01.62 .net >>823 ロト6、わたしも時々やっています。シェルスクリプトで番号を出すのは考えもしませんでしたw >>821 >>824 >>825 ご親切にありがとうございました grepとかのパイプ並列化されてると聞いたので、もしかしてなにかしら分からない理由で発注も早いのかなと 思って聞いてみました。 >>349 や>>371 は知りませんでした。勝手にシェルスクリプトっていうとブラウザレスのワンライナーをイメージしていました。 教えていただいた348や370を触ってみようと思います
827 :名無しさん@お腹いっぱい。 :2015/06/30(火) 00:21:38.40 .net ぶっちゃけwget使えばできる
828 :名無しさん@お腹いっぱい。 :2015/06/30(火) 00:51:21.32 .net むしろシェルスクリプトでパケットキャプチャして通信を解析しよう。
829 :名無しさん@お腹いっぱい。 :2015/06/30(火) 06:02:29.85 .net >>827 JavaScriptとか使われてたらwgetでは無理
830 :名無しさん@お腹いっぱい。 :2015/06/30(火) 07:54:44.40 .net >>818 GNU sedでも+は使えないと思っていたけど\+なんて拡張があるんだね。 知らなかった。今後は便利に使わせてもらおう…
831 :名無しさん@お腹いっぱい。 :2015/06/30(火) 10:54:23.76 .net ブラウザのクッキーが必要で、JavaScriptで得られるリンクの抽出をしたいのですが ソースを保存してgrepで試したのですがうまくいきませんでした。 なにかいい方法ありますか。
832 :名無しさん@お腹いっぱい。 :2015/06/30(火) 11:12:25.50 .net もうちょい条件を具体的に
833 :名無しさん@お腹いっぱい。 :2015/06/30(火) 12:12:09.26 .net >>829 、>>831 wgetでも切った貼ったすればURLは作れる まあそれでカバーできないのもあるだろうから100%じゃないけど 自分はフレームが分かれてるページで挫折したというか対応をやめた
834 :名無しさん@お腹いっぱい。 :2015/06/30(火) 12:24:48.15 .net ブラウザで操作するようなものは firefoxのアドオンで使えるseleniumが便利なんじゃないかな
835 :名無しさん@お腹いっぱい。 :2015/06/30(火) 13:49:39.60 .net トイレで大きな音って屁だろ
836 :名無しさん@お腹いっぱい。 :2015/06/30(火) 13:50:38.46 .net 誤爆しましたごめん
837 :名無しさん@お腹いっぱい。 :2015/06/30(火) 19:21:47.66 .net >>833 , >>834 しらべてみる ありがとう
838 :名無しさん@お腹いっぱい。 :2015/07/01(水) 00:58:33.93 .net >>804 おじいちゃん。-exec .... +を知らなかった事を必死にごまかそうとしてもダメだよ。 765 名無しさん@お腹いっぱい。[sage] 2015/06/24(水) 15:44:35.63 -execだと見つかったファイルの数だけプロセスつくるんだよね? xargsだとexecシステムコールの引数個数制限までは1個のプロセス作ってその引数に見つかったファイル全部渡すのかな?
839 :名無しさん@お腹いっぱい。 :2015/07/01(水) 01:13:29.53 .net つまんね。
840 :名無しさん@お腹いっぱい。 :2015/07/01(水) 07:46:12.63 .net GNU sedで -rオプション、*BSD sedで -Eオプションつけるとバックスラッシュ つけなくても+が使えるみたいだ。
841 :名無しさん@お腹いっぱい。 :2015/07/01(水) 13:58:10.28 .net そりゃ、そっちは拡張正規表現だからな……
842 :名無しさん@お腹いっぱい。 :2015/07/01(水) 14:36:35.81 .net 最近、ポイントがずれた応答するヤツ一人いるなぁ
843 :名無しさん@お腹いっぱい。 :2015/07/01(水) 15:04:35.61 .net わざとだろう あんまり相手しちゃいけない
844 :名無しさん@お腹いっぱい。 :2015/07/02(木) 08:18:40.41 .net 言葉が足りなかった。拡張機能なのに素の状態でバックスラッシュつければ 動いてしまうのはどうなのかな?と思ったんだ。
845 :名無しさん@お腹いっぱい。 :2015/07/02(木) 18:33:26.44 .net >>834 JSなページもいけるらしいが、実際やってみたら、サイトを開く、 ボタン押すなどは記録してくれるが、スクロールするとか、細かい 事は記録されなかった。画像をキャプチャしたいんだが無理の模様。 シェルスクリプトで書こうとして、LinksをJava対応とかにしてみた ものの、努力実らず。。。
846 :名無しさん@お腹いっぱい。 :2015/07/02(木) 18:41:44.19 .net >>831 もしかして、ローカルマシンでの話か?
847 :名無しさん@お腹いっぱい。 :2015/07/02(木) 19:10:07.26 .net bashでの正規表現、コマンドごとの正規表現。 最初はバカばかしく思えた、たとえばpythonでの import re のほうが、思想としては正しいような気がしてきた。
848 :名無しさん@お腹いっぱい。 :2015/07/02(木) 23:42:14.95 .net bashで aaa=$(( bbb + ccc )) という表記の仕方と aaa=$(( $bbb + $ccc )) という表記の仕方、どちらも同じ計算結果が得られるんですが どちらが正しいんでしょうか?どちらで書いても良い仕様なんでしょうか?
849 :名無しさん@お腹いっぱい。 :2015/07/03(金) 00:54:37.65 .net >>848 yes function add() # 引数の$1と$2を足す { ANSWER=$(( $1 + $2 )) } こういうのは $は取れないけどね
850 :名無しさん@お腹いっぱい。 :2015/07/03(金) 05:34:00.18 .net どうせなら、 ((aaa = bbb + ccc)) って書いた方がいい。この方が数値計算らしいね。
851 :名無しさん@お腹いっぱい。 :2015/07/03(金) 09:11:41.14 ID:B0CP9/Q5n >>848 白い白馬みたいなものでしょ $var ${var} $((var)) $((勝手にやれや))
852 :名無しさん@お腹いっぱい。 :2015/07/03(金) 09:48:26.01 .net 俺は let aaa=bbb+ccc が好きだな
853 :名無しさん@お腹いっぱい。 :2015/07/03(金) 14:16:50.30 .net sortせずにuniqしたいんですが、エレガントな方法ありますか? 2回目以降に出てきた重複行をカットして出力です。それ以外はsortしないで元の順のまま出力。
854 :名無しさん@お腹いっぱい。 :2015/07/03(金) 14:50:45.06 ID:B0CP9/Q5n perlやらrubyやらでさっくりと。
855 :名無しさん@お腹いっぱい。 :2015/07/03(金) 14:52:23.32 ID:A2U8YBDtR こっちで答えても質問者読んでないから .netの方で答えてあげて
856 :名無しさん@お腹いっぱい。 :2015/07/03(金) 14:44:25.08 .net >>853 http://www.linuxquestions.org/questions/linux-newbie-8/uniq-values-in-unsorted-file-4175471813/#post5001429
857 :名無しさん@お腹いっぱい。 :2015/07/03(金) 14:55:42.55 .net >>856 その方法しかありませんか? 頭に数値付ける方法は知ってましたがエレガントじゃないです
858 :名無しさん@お腹いっぱい。 :2015/07/03(金) 15:20:13.81 .net ちょっといじれば数字なしにできるよ
859 :名無しさん@お腹いっぱい。 :2015/07/03(金) 18:44:31.13 .net { if (count[$0] == 0) { print count[$0]++ } }
860 :名無しさん@お腹いっぱい。 :2015/07/03(金) 19:39:34.12 .net シェルでは連想配列は使えまへん
861 :名無しさん@お腹いっぱい。 :2015/07/03(金) 19:41:35.86 .net awkだろw
862 :名無しさん@お腹いっぱい。 :2015/07/03(金) 20:13:46.43 .net Perlの連想配列便利 何も考えずにVBで同じようにやったらクソ遅かった
863 :名無しさん@お腹いっぱい。 :2015/07/03(金) 21:11:40.93 .net bash なら連想配列使えるけど遅いので素直に awk でやるのが一番
864 :名無しさん@お腹いっぱい。 :2015/07/04(土) 20:45:32.11 .net curl -L -O -J http://www.foo.com/bar をやると、リダイレクト先のファイル名で保存されずにbarで保存されてしまう リダイレクト先のファイル名で保存するにはどうすればできますか?
865 :名無しさん@お腹いっぱい。 :2015/07/04(土) 21:03:45.47 .net 日本語お上手ですね
866 :名無しさん@お腹いっぱい。 :2015/07/04(土) 22:57:10.62 .net わからないなら黙ってればいいのに -Iで情報取得してgrep、sed、展開で抽出
867 :名無しさん@お腹いっぱい。 :2015/07/04(土) 23:36:06.98 .net すまん、これだと改行が入ってしまう 解決法はわからない
868 :名無しさん@お腹いっぱい。 :2015/07/04(土) 23:37:41.83 .net >>864 curl -L -J http://www.foo.com/bar > foo じゃだめなん?
869 :名無しさん@お腹いっぱい。 :2015/07/05(日) 00:24:31.19 .net 展開で%%と*を使えばいい sedはめんどくさい
870 :名無しさん@お腹いっぱい。 :2015/07/05(日) 06:16:53.25 .net foo.comの人って日本人なんですか?
871 :名無しさん@お腹いっぱい。 :2015/07/05(日) 08:51:57.76 .net whoisでも見りゃいいだろ
872 :名無しさん@お腹いっぱい。 :2015/07/05(日) 09:11:05.08 .net >>868 リダイレクト先のファイル名を取得したいのに決め打ちしてどうするw
873 :名無しさん@お腹いっぱい。 :2015/07/05(日) 11:13:12.10 .net >>853 nl | sort -k 2 | uniq -f 1 | sort | cut -f 2- >>864 http://stackoverflow.com/questions/6881034/curl-to-grab-remote-filename-after-following-location 何か違和感が有るが、まあいいか
874 :名無しさん@お腹いっぱい。 :2015/07/07(火) 01:55:38.74 .net 集団ストーカーももう時間切れかもしれないよ 予定よりも相当早いペースで突き進んでるよ ギリシャのこと笑ってられないかもしれない 潰れる会社も出るだろうし、失業者も出るかもしれない アウシュビッツレベルのネタだからオリンピックどころじゃないかもしれない 私の勝手な想像だけどね でもバレテルよと何年も前から言ってるのに今日もバカの一つ覚えの電気通信で嫌がらせ だからみんながそれが答えなのね、世界中に暴露して聞いてみろってことなのね ということで動きが止まらない方向になっている 揉み消すとか臭いものにふたをする犯罪者の心理行動しか取れないクズは終わりかもしれない 観光客がちょっと増えたと喜んでいる場合じゃないよ、知っている人間は日本なんかに来てないよ 事実は言った人間が悪いんじゃないよ、作った人間が悪いんだよ 知ってる人間は後悔しないためにも正しい行動をしたほうがいいよ ダメなものは世界中誰が見てもダメなんだからね
875 :名無しさん@お腹いっぱい。 :2015/07/07(火) 17:07:44.73 .net >>864 barって、ディレクトリ? ファイル?
876 :名無しさん@お腹いっぱい。 :2015/07/11(土) 02:16:43.69 .net メタ文字を含むパターンを変数に入れておいて ${var#pattern} みたいな使い方はできないのですか?
877 :名無しさん@お腹いっぱい。 :2015/07/11(土) 05:21:37.10 .net >>876 できるけど。 ${var#$pattern} patternに$が必要
878 :名無しさん@お腹いっぱい。 :2015/07/12(日) 06:30:34.52 .net >>877 すみません、$ が抜けていました どうやら zsh のデフォルトの仕様のせいで、 GLOB_SUBST オプションを有効にするか、${var#$~pattern} で望みどおりになりました
879 :名無しさん@お腹いっぱい。 :2015/07/12(日) 23:45:48.39 .net for f inの中でsedでの置換に$fを使うには度すればいいのですか?
880 :名無しさん@お腹いっぱい。 :2015/07/13(月) 03:08:28.34 .net sed -e "s/$f/fumofumo/" とか
881 :名無しさん@お腹いっぱい。 :2015/07/13(月) 04:53:41.61 .net 全部ダブルクォートにせずに、必要なところだけダブルクォートにするのがお勧め。 sed '/aaa/,$s/'"$f"'/bbbb/g'
882 :名無しさん@お腹いっぱい。 :2015/07/13(月) 13:45:08.39 .net count=1 for f in do file_name="${f##*/}" sed -e 's/foo/foo_$f/g' /hoge/hoge.txt> ${count}_hoge.txt mv $f ${par_dir2}/${file_name} count=$(($count + 1)) done これはダメ sed -e 's/foo/foo_"$f"/g' もだめでした なんでだろう?
883 :名無しさん@お腹いっぱい。 :2015/07/13(月) 13:50:39.03 .net >>882 クォートの対応、良く見ろよ sed -e 's/foo/foo_"$f"/g' ←じゃなくて sed -e 's/foo/foo_'"$f"'/g' な。' 'を一回閉じてから" "を開き直す。スペースを空けずに。
884 :名無しさん@お腹いっぱい。 :2015/07/13(月) 16:07:08.78 .net (全部ダブルクオートでいいのに・・・)
885 :名無しさん@お腹いっぱい。 :2015/07/13(月) 17:05:32.16 .net クォートなんていらないのに・・・と思いかけたが$fの中身がわからないから必要なのか というか$fだけをダブルクォートでも問題ないのかな?
886 :名無しさん@お腹いっぱい。 :2015/07/13(月) 20:53:18.32 .net ファイル名を構成する文字とsedの正規表現の区切り問題は厄介だよ。
887 :名無しさん@お腹いっぱい。 :2015/07/13(月) 23:15:54.08 .net >>881 全部ダブルでええやん
888 :名無しさん@お腹いっぱい。 :2015/07/13(月) 23:41:43.94 .net >>881 は /aaa/,$ 文字列aaaとマッチする行から行末まで次のコマンドを適用 s/"$f"/bbbb/g シェル変数$fとマッチした文字列をbbbbに置き換えるコマンド 全体をダブルクォートしたら$sがシェル変数として解釈されちゃうからいやん
889 :名無しさん@お腹いっぱい。 :2015/07/13(月) 23:50:57.72 .net 行末までじゃねえや最終行までね
890 :名無しさん@お腹いっぱい。 :2015/07/14(火) 03:14:11.34 .net >>883 sed -e 's/foo/foo_'"$f"'/g' でいけました。 クォートの挙動の勉強になりました。 ありとうございます。
891 :名無しさん@お腹いっぱい。 :2015/07/18(土) 11:58:15.66 .net あるコマンドの出力をgrepで引っ掛けたいんだけど、できない・・・ 何故でしょう。わかる方いますか $ postmulti -i hogehoge -e destroy postmulti: fatal: No instance named hogehoge 上のように、Noという文字列が出力されたら処理をしたいので $ postmulti -i hogehoge -e destroy 2>&1 | grep No $ とするが、ヒットしない。
892 :名無しさん@お腹いっぱい。 :2015/07/18(土) 12:10:12.95 .net * 1,2以外に出力されている。(プログラム中で/dev/tty開けるとか) * 何か間違えている。 前者は $ postmulti -i hogehoge -e destroy >/dev/null $ postmulti -i hogehoge -e destroy 2>/dev/null で確認すれば良い。
893 :名無しさん@お腹いっぱい。 :2015/07/18(土) 12:21:00.88 .net >>891 の後半、| grep No でヒットしなくて、しかも何も表示でないんだよね? fdの1,2以外とか/dev/tty直接に出力されてるなら素通りの表示はされるはず。 なので、postmultiが出力がパイプの場合は出力を自分で抑制してるのかも。
894 :名無しさん@お腹いっぱい。 :2015/07/18(土) 12:29:23.71 .net daemon系で、fork()とかsetsid()とか絡んでそうな悪寒
895 :880 :2015/07/18(土) 13:58:51.80 .net >>892 >>893 $ postmulti -i hogehoge -e destroy >/dev/null postmulti: fatal: No instance named hogehoge $ postmulti -i hogehoge -e destroy 2>/dev/null $ 確認すると、こんな感じ なので確実に2番ですよね だが、ファイルに書き出しても $ postmulti -i hogehoge -e destroy 2>output $ cat output なにもでない。 >>894 そうなんですか。 ちょっと調べてみます
896 :名無しさん@お腹いっぱい。 :2015/07/18(土) 14:55:40.11 .net やっぱり tty か redirect/pipe か判断してるみたい Linux で以下を実行すると output ファイルにエラーメッセージが 書き込まれている。 $ echo 'int isatty(int fd) { return 1; }' | gcc -xc -shared -o isatty.so - $ LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH LD_PRELOAD=isatty.so postmulti -v -i hogehoge -e destroy 2>output
897 :名無しさん@お腹いっぱい。 :2015/07/18(土) 17:24:55.19 .net >>896 ありがとうございます! 上のコード理解してきました。そういうことなのですね。 一応ソースも確認したけど、その通りでした postfix-3.0.1: ./src/postmulti/postmulti.c 1684 if (isatty(STDERR_FILENO)) 1685 msg_vstream_init(argv[0], VSTREAM_ERR); 1686 msg_syslog_init(argv[0], LOG_PID, LOG_FACILITY); isatty()を外から騙せるか試行錯誤してますが、だめならそのまま 利用させていただきます!
898 :名無しさん@お腹いっぱい。 :2015/07/18(土) 23:59:07.25 .net expect コマンドがあれば expect -c 'コマンド 引数 ... ; expect eof' で実行すればいいかも。 expect -c 'spawn pstmulti -i hogehoge -e destroy ; expect eof' | grep No
899 :名無しさん@お腹いっぱい。 :2015/07/19(日) 00:06:30.73 .net expect -c 'spawn コマンド 引数... ; expect eof' だた... 例文の方は正しいです。
900 :880 :2015/07/19(日) 11:47:38.55 .net おおお!ありがとうございます。できました。 まことに感謝です
901 :名無しさん@お腹いっぱい。 :2015/07/19(日) 15:45:46.71 .net var=$( command 1 | command 2 ) で、command 1とcommand 2のエラーレベルを取得数方法てありますか? $?やPIPESTATUSではうまくいきませんでした。
902 :名無しさん@お腹いっぱい。 :2015/07/19(日) 16:44:41.05 .net var=$( command 1 | command 2; echo ${PIPESTATUS[@]} >&2 )
903 :名無しさん@お腹いっぱい。 :2015/07/19(日) 19:00:45.99 .net error_evel=(${PIPESTATUS[@]}) といった具合に格納したいのですが、できそうですか? 思いつかないです
904 :名無しさん@お腹いっぱい。 :2015/07/19(日) 19:16:46.14 .net command 1 | command 2 > hoge error_evel=(${PIPESTATUS[@]}) var=$(cat hoge); rm hoge
905 :名無しさん@お腹いっぱい。 :2015/07/19(日) 20:37:20.22 .net var=$(command 1 | command; echo ${PIPESTATUS[@]}) error_evel=$(echo "$var" | tail -1) var=$(echo "$var" | sed '$d')
906 :名無しさん@お腹いっぱい。 :2015/07/19(日) 22:00:11.98 .net fun () { echo abc } # 1 res = "$(fun)" # 2 res = `fun` 質問です。#1 と #2 は両方とも関数funの返り値を受け取って変数resへ代入していますが、 両方に特別な違いはあるのでしょうか? 見た目の好みの問題でどちらを使ってもよいものでしょうか?
907 :名無しさん@お腹いっぱい。 :2015/07/19(日) 23:16:03.23 .net 前者は純正シェルに拘ってるキチガイに絡まれる。
908 :名無しさん@お腹いっぱい。 :2015/07/19(日) 23:26:38.65 .net >>906 $() は `` だから、"$(fun)" は "`fun`" で等価 違いは ’’はネストできないけど $() はネストできる $ echo `date -r `pwd`` date: オプションには引数が必要です -- 'r' Try 'date --help' for more information. pwd ※これは echo $(date -r)pwd$()になってしまう $ echo $(date -r $(pwd)) xxxx年 x月 x日 火曜日 xx:xx:xx JST
909 :名無しさん@お腹いっぱい。 :2015/07/20(月) 05:43:37.07 .net $ echo $(echo $(echo hage)) hage $ echo `echo `echo hage`` echo hage 後者は`echo `と``の中身がコマンドとして解釈されてこれは空っぽで、残ったecho hageが単純な文字列としてechoされるのかw
910 :名無しさん@お腹いっぱい。 :2015/07/22(水) 16:37:21.58 .net いつも、変数取得と\rの消去をgrepと変数展開で hoge=$(grep foo /bar/bar2) hoge2=${hoge%?} としているのですけど、?だとwinで作られたテキストか確認しなければ怖いのです。 \r、\r\n、^M、^M$では消せなかったです。 sedやtr使えばいいのですが、変数展開のほうが速いので 変数展開で安心して使いたいのです。 どうすればうまくできますか?
911 :名無しさん@お腹いっぱい。 :2015/07/22(水) 17:20:17.87 .net grepで複数行がマッチすることはないのかな
912 :名無しさん@お腹いっぱい。 :2015/07/22(水) 17:30:47.13 .net r=$(printf '\xd') ってやっておいて hoge2=${hoge%$r}
913 :名無しさん@お腹いっぱい。 :2015/07/22(水) 17:43:05.00 .net >>911 もちろん、やるときにはgrep -m 1やってます >>912 パターンを作ってしまえばいいのか d
914 :名無しさん@お腹いっぱい。 :2015/07/31(金) 19:13:47.94 .net すみません、自分用メモです sedを使った改行を挟んだ置換 abcd efg を aaaefgに sed '/abcd/N;s/abcd\n/aaa/g' hoge.txt abcd efg を aaa bbbに LF=$(printf '\\\n_'); LF=${LF%_} sed '/abcd/N;s/abcd\nefg/aaa'"$LF"'bbb/g' hoge.txt
915 :名無しさん@お腹いっぱい。 :2015/07/31(金) 19:14:46.10 .net あと、printfがわかっていないので質問させてください。 >>912 のr=$(printf '\xd')は、r=$(printf '\r')や$(echo -e '\r')ではまずいのでしょうか? \xdはどういう意味なのですか? もし、LFをprintfで作るときには$(printf '\n')、echoで作るときには$(echo -e '\n')で大丈夫なのでしょうか?
916 :名無しさん@お腹いっぱい。 :2015/08/02(日) 06:43:49.16 .net >>915 echoでやってもいいよ。ただシェルによってechoの-eオプションが要ったり要らなかったりするから、 printfならどちらでも動くと。xdは16進の0xdの意味。
917 :名無しさん@お腹いっぱい。 :2015/08/02(日) 13:55:04.46 .net ありがとうございます うちのechoのmanみたら-e使えませんでした。 でも、bashのechoを見たらつかえました。 実感できました。 LFならxaになるんですね。
918 :名無しさん@お腹いっぱい。 :2015/08/05(水) 12:50:25.59 .net grep "hogehoge" | head -1
919 :名無しさん@お腹いっぱい。 :2015/08/05(水) 18:34:40.69 .net >>918 は誰に何を言いたいのだろうか? grep -m 1 知らない人?
920 :名無しさん@お腹いっぱい。 :2015/08/05(水) 18:42:34.72 .net >>914 をマネして a b c を d e f にしようと LF=$(printf '\\\n_'); LF=${LF%_} sed '/abc/N;s/a\nb\nc/d'"$LF"'e'"$LF"'f/g' hoge.txt をしたけど、ダメでした。 どうしてなんですか?どうすればいいのですか? sedの改行から解放されると思ったのに。
921 :名無しさん@お腹いっぱい。 :2015/08/05(水) 18:54:13.85 .net >>919 2つのプログラムの呼び出し、メモリ増といいことが見えない しかも上にgrep -m 1 があるのに 誤爆か、シェルの覚えたてじゃないか 直後の>>919 はいい勉強になるのでは
922 :名無しさん@お腹いっぱい。 :2015/08/05(水) 19:18:30.92 .net >>921 脳メモリの節約
923 :名無しさん@お腹いっぱい。 :2015/08/06(木) 03:47:34.20 .net むしろフィルタ指向のスクリプトを入れると最適化して、パイプの段数を減らしたスクリプトを吐いてくれるような 賢いオプティマイザ誰か作ってくれないかな?
924 :名無しさん@お腹いっぱい。 :2015/08/06(木) 09:43:47.44 .net 細かいオプション憶える負担を人に負わせるより、パイプ1段増やす方が合理的。
925 :名無しさん@お腹いっぱい。 :2015/08/06(木) 13:25:47.04 .net head -1 は老害互換性オプション。 正しくは head -n 1 新規作成スクリプトでは head -1 形式で記述してはいけない
926 :名無しさん@お腹いっぱい。 :2015/08/06(木) 13:48:36.71 .net ケースバイケース
927 :名無しさん@お腹いっぱい。 :2015/08/06(木) 14:02:13.45 .net 動くからいいや
928 :名無しさん@お腹いっぱい。 :2015/08/06(木) 14:08:49.62 .net head -1 を使わせないためにせっかくmanからも記述削除してあるのに。。
929 :名無しさん@お腹いっぱい。 :2015/08/06(木) 14:57:15.89 .net manなんて読まんよ 実装を変えないと
930 :名無しさん@お腹いっぱい。 :2015/08/06(木) 15:33:08.88 .net 実装は互換性のためにあえて変えてない。既存スクリプト用。
931 :名無しさん@お腹いっぱい。 :2015/08/06(木) 16:03:54.91 .net 実装変わらなきゃ使う人なくならんね
932 :名無しさん@お腹いっぱい。 :2015/08/06(木) 16:32:44.92 .net 歴史的経緯をなかったことにはできない。unixなんだから
933 :名無しさん@お腹いっぱい。 :2015/08/06(木) 17:20:14.83 .net 誰か>>920 に答えてください
934 :名無しさん@お腹いっぱい。 :2015/08/06(木) 17:37:16.74 .net /abc/ が何を意味するのか調べなさい
935 :名無しさん@お腹いっぱい。 :2015/08/06(木) 17:41:57.71 .net >>920 echo "a\nb\nc" | perl -0pe 's/a\nb\nc/d\ne\nf/m'
936 :名無しさん@お腹いっぱい。 :2015/08/06(木) 19:10:26.14 .net すみませんが詳しい方のみ回答をお願いします
937 :名無しさん@お腹いっぱい。 :2015/08/06(木) 19:59:57.71 .net >>933 tr abc def < hoge.txt
938 :名無しさん@お腹いっぱい。 :2015/08/06(木) 20:41:41.66 .net >>937 そりゃだめだ 連続していない1つの文字単位も置換される
939 :名無しさん@お腹いっぱい。 :2015/08/06(木) 21:54:19.38 .net GNU sed で。 $ tr '\n' '\0' < hoge.txt | sed -r 's/(^|\x00)a\x00b\x00c\x00/\1d\x00e\x00f\x00/g' | tr '\0' '\n' でもこの場合、連続する "a\nb\nc\n" の置換ができない。 a\nb\nc\na\nb\nc\n => d\ne\nf\na\nb\nc\n
940 :名無しさん@お腹いっぱい。 :2015/08/06(木) 22:34:13.24 .net 素直にsedで^a$だったら次の行を読み込み それが^b$だったらまた次の行を読み込み それが^c$だったら、ってやったらいいんでないの? というか、エディタで読み込んで置換した方が早いよ
941 :名無しさん@お腹いっぱい。 :2015/08/07(金) 00:33:41.83 .net 具体的にどうやればいい?
942 :名無しさん@お腹いっぱい。 :2015/08/07(金) 01:07:39.20 .net エディタによる
943 :名無しさん@お腹いっぱい。 :2015/08/07(金) 01:44:15.54 .net emacsなら $ cat /tmp/elisp.el (replace-regexp "a\nb\nc\n" "d\ne\nf\n") (save-buffer) (save-buffers-kill-terminal) $ emacs hoge.txt -l /tmp/elisp.el
944 :名無しさん@お腹いっぱい。 :2015/08/07(金) 07:44:33.04 .net それだと aa b c も変換しちゃう
945 :名無しさん@お腹いっぱい。 :2015/08/07(金) 10:05:54.63 .net ^を付けましょう
946 :名無しさん@お腹いっぱい。 :2015/08/07(金) 10:47:56.80 .net 取り止めがないというかちょっと流動的な対応が必要な内容なんだけど 動画のファイル名に「第x話」とか「#x」、「第x章」と付いてるやつを ゼロパディングして桁数をそろえたいんだ 「第1話」→「第01話」 何かお勧めのコマンドある? まあ普通に考えるとsedなんだけど誤変換怖いから 今は手動で変更してるんだ
947 :名無しさん@お腹いっぱい。 :2015/08/07(金) 11:05:53.06 .net printfがあるやつなら2桁対応でいいんじゃないか? echo "第2章" | perl -ne 'if (/第(\d)章/){printf "第%02d章", "$1"}' 第02章 echo "第12章" | perl -ne 'if (/第(\d+)章/){printf "第%02d章", "$1"}' 第12章
948 :名無しさん@お腹いっぱい。 :2015/08/07(金) 11:31:16.58 .net >>946 第x話などのxの部分を切り出せるなら case $num in [1-9]) num=0$num ;; 0*) ;; esac echo $num 3桁なら case $num in [1-9]) num=00$num ;; [1-9][0-9]) num=0$num ;; 0*) ;; esac echo $num
949 :名無しさん@お腹いっぱい。 :2015/08/07(金) 13:49:06.35 .net すみませんが詳しい方のみ回答をお願いします
950 :名無しさん@お腹いっぱい。 :2015/08/07(金) 13:52:45.45 .net >>948 >第x話などのxの部分を切り出せるなら 核心の部分を飛ばしてどうするw 頭に0付けだけなら printf %03d $num とかで一発でできるよw (そこは問題じゃない)
951 :名無しさん@お腹いっぱい。 :2015/08/07(金) 14:36:35.67 .net >>946 の内容だけでは何に困難を感じているのかがわからない 1) 第x話や#x、第x章のxを切り出すよい方法がわからないのか、それとも 2) ゼロパディングする方法がわからないのか もし1)なら、ゼロパディングする方法は関係ないし もし2)なら、xを切り出す方法は関係ない >核心の部分を飛ばしてどうするw と言っている>>950 は、したがって>>946 さんの問題は1)だと解釈したことになる。 もし1)が「核心の問題」であるのなら >>946 さんはなぜ「ゼロパディングして桁数を揃えたい」と書いたのだろう? ということで、>>946 さんに何をしたいかもうちょっと具体的に言ってもらう必要があると思うよ。
952 :名無しさん@お腹いっぱい。 :2015/08/07(金) 15:09:50.57 .net いや、sedでゴニョゴニョすればできるのは知ってるけどそれだと誤動作が恐いから、 すでにそういう第x話とかの変換に対応した専用コマンドはないか?という質問だから。 答えは、「ない」
953 :名無しさん@お腹いっぱい。 :2015/08/07(金) 15:47:21.26 .net 誤変換が恐いなら確認してから走らせればいいん者ね? sed -n 's/ごにょ/ごにょ/p' で変更部分だけ出力されるから、 大丈夫なら sed -i 入れて実行
954 :名無しさん@お腹いっぱい。 :2015/08/07(金) 15:50:28.93 .net >普通に考えるとsedなんだけど誤変換怖い どんな場面で誤変換になるの?
955 :名無しさん@お腹いっぱい。 :2015/08/07(金) 17:03:38.05 .net シェルスクリプトだけで、ツイッターのBot動かしている人っていますか?
956 :名無しさん@お腹いっぱい。 :2015/08/07(金) 17:33:51.82 .net >>952 そんな単一用途を求める時点でシェルスクリプトである必要ない あなたにはファイル名変換君がお似合いです
957 :名無しさん@お腹いっぱい。 :2015/08/07(金) 19:52:08.40 .net 動かしている人がいるかどうかを聞いてるんです
958 :名無しさん@お腹いっぱい。 :2015/08/07(金) 20:25:15.45 .net そんな事どこで聞いてるんだ?
959 :名無しさん@お腹いっぱい。 :2015/08/07(金) 21:15:22.11 .net >>953 ふつうはそういうことしてからここで質問するよね >>954 どんな誤変換か自分も知りたい
960 :名無しさん@お腹いっぱい。 :2015/08/08(土) 12:09:25.42 .net 第1章-序章.mp4 : 第5章-ホゲホゲ34歳の不倫part1.mp4 第6章-ホゲホゲ34歳の不倫part2.mp4 : とか??
961 :名無しさん@お腹いっぱい。 :2015/08/08(土) 19:30:56.99 .net grepに、Pオプションなんてあったのか。sedにも欲しいスイッチだ
962 :名無しさん@お腹いっぱい。 :2015/08/08(土) 21:18:40.90 .net >>961 先読み・後読みが使えるのは便利
963 :名無しさん@お腹いっぱい。 :2015/08/09(日) 07:15:54.88 .net #cat a.txt aaaaa bbbbb ccccc #printf "ddddd " >> a.txt #cat a.txt aaaaa bbbbb ccccc ddddd #printf "eeeee " >> a.txt #printf "fffff " >> a.txt #printf "ggggg " >> a.txt #cat a.txt aaaaa bbbbb ccccc ddddd eeeee fffff ggggg なんで1回目の追記のときだけ改行が入っちゃうの? 👀 Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
964 :名無しさん@お腹いっぱい。 :2015/08/09(日) 07:42:06.61 .net a.txtの最後に改行が入ってるから
965 :名無しさん@お腹いっぱい。 :2015/08/09(日) 07:46:01.85 .net つーかこんなのprintf "aaaaa " > a.txtからやれよ 何をやりたいんだよ なんでa.txtがどういう状態か分かるんだよ
966 :名無しさん@お腹いっぱい。 :2015/08/09(日) 07:58:50.20 .net rootで実行するなよw
967 :名無しさん@お腹いっぱい。 :2015/08/09(日) 10:00:28.82 .net >>966 なんで?
968 :名無しさん@お腹いっぱい。 :2015/08/09(日) 10:04:18.10 .net 本来いじられたくないrootでしか編集できないファイルを簡単に上書くから
969 :名無しさん@お腹いっぱい。 :2015/08/09(日) 16:18:41.93 .net rootでしか編集できないファイルをいじるスクリプトを書いてるのかもしれない
970 :名無しさん@お腹いっぱい。 :2015/08/09(日) 18:08:05.24 .net >>963 みたいな質問する奴にroot権限渡すな
971 :名無しさん@お腹いっぱい。 :2015/08/10(月) 12:25:15.29 .net 昔は共同浴場みたいな感じで番台の管理者さんに断って みんなで風呂に過いるイメージだったけど、今は家風呂 個人の管理ってイメージだから、ユーザ=rootの時代だよね。 そう言う意味ではUNIXそのものの考え方をパーソナルに考え直す という手間暇を惜しんだところが負けだと思うわ。
972 :名無しさん@お腹いっぱい。 :2015/08/10(月) 20:06:59.81 .net UNIXベースのOSは過去最高に一般人に普及してるんだけどなにに負けたんだ?
973 :名無しさん@お腹いっぱい。 :2015/08/11(火) 01:39:01.94 .net わかってるくせにw
974 :名無しさん@お腹いっぱい。 :2015/08/11(火) 08:56:44.41 .net >>972 androidをUNIXベースと考えるかどうかで勝敗は変わるんじゃないの?
975 :名無しさん@お腹いっぱい。 :2015/08/11(火) 11:03:46.05 .net iOSだってUNIXだよ
976 :名無しさん@お腹いっぱい。 :2015/08/11(火) 13:12:49.80 .net windowsだってunixかもしれないよ
977 :名無しさん@お腹いっぱい。 :2015/08/11(火) 13:15:39.19 .net ケンタッキーフライドチキンもUNIXだしな
978 :名無しさん@お腹いっぱい。 :2015/08/11(火) 13:41:34.72 .net POSIX互換なのはWindows2000までだっけ
979 :名無しさん@お腹いっぱい。 :2015/08/11(火) 22:28:27.88 .net 美容室もUNIXだしな
980 :名無しさん@お腹いっぱい。 :2015/08/12(水) 01:15:37.26 .net >>971 sudoは答えの一つだと思うがどうか?
981 :名無しさん@お腹いっぱい。 :2015/08/12(水) 07:34:06.58 .net 単にインストールして設定して満足って人が多くなったからだろう そりゃrootしか使わんわ でもWindowsとかアドミン権限じゃないユーザで使ってる人結構多くて いい意味でびっくりすることがある
982 :名無しさん@お腹いっぱい。 :2015/08/12(水) 10:29:07.02 .net 個人ユースなんてサーバー用途だが多いだろうからログインするとき=rootじゃなきゃ出来ない作業をするときじゃないか?
983 :名無しさん@お腹いっぱい。 :2015/08/12(水) 11:18:27.54 .net いやちがう 管理者がいないから自分が管理者なだけ
984 :名無しさん@お腹いっぱい。 :2015/08/12(水) 11:23:24.46 .net >個人ユースなんてサーバー用途だが多い んなこたーない
985 :名無しさん@お腹いっぱい。 :2015/08/12(水) 12:47:36.66 .net sudo を使うことすら面倒くさいと言うのか…
986 :名無しさん@お腹いっぱい。 :2015/08/12(水) 13:36:17.12 .net 何の話だったっけ
987 :名無しさん@お腹いっぱい。 :2015/08/12(水) 14:25:02.72 .net cshからbashに移行した場合 .cshrcってターミナル起動した時に読み込まれなくなってしまいますか?
988 :名無しさん@お腹いっぱい。 :2015/08/12(水) 14:54:50.56 .net コマンド打つ ↓ #になってないと実行できないコマンドだった ↓ コマンド打ち直す 最初から# ↓ コマンド打つ ↓ 確実に成功 後者のほうが効率がよい
989 :名無しさん@お腹いっぱい。 :2015/08/12(水) 15:03:47.83 .net 以下の結果を出力するシェルを,bashスクリプトで書け. (基本仕様) ・コマンドとして実行できる.(シェルコマンドである.) ・ユーザーが10000以上99999以下の5桁の数字を入力する. ・その数字を7で割って1余り,かつ13で割って2余った場合は Daikichiと表示する. ・それ以外で,13で割って2余った場合は Chuukichiと表示する. ・それ以外で,7で割って1余った場合は Shoukichiと表示する. ・それ以外の場合は Hazureと表示する. ・入力した文字が10000以上99999以下の数字以外の場合はエラーメッセージを表示する. ・できる人は,コマンドライン引数でDaikichiなどの文字を変更できるようにする. (ポイント) ☆シェルコマンドにするには,スクリプトの最初に(#!で始まる)おまじないを書く. ☆標準入力から文字列を入力するには read を用いる. ☆コマンドラインの引数は,$@に格納されている.(その要素は $1 $2 ...) ☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.) 誰かわかるひとお願いします
990 :名無しさん@お腹いっぱい。 :2015/08/12(水) 15:54:32.72 .net >>989 来年はちゃんと授業聞こうな
991 :名無しさん@お腹いっぱい。 :2015/08/12(水) 17:01:02.35 .net 私は講師です。ちょっと問題の反応を見たいのでここで聞いてみてるんですが、、
992 :名無しさん@お腹いっぱい。 :2015/08/12(水) 17:11:49.67 .net お盆休みはきちんと休んだほうがいい
993 :名無しさん@お腹いっぱい。 :2015/08/12(水) 17:24:59.92 .net > 誰かわかるひとお願いします > 私は講師です。 講師CCO騙るにしてもこれは酷いw 遊びたかったら人狼逝け
994 :名無しさん@お腹いっぱい。 :2015/08/12(水) 18:07:03.66 .net なんで私が出した課題がここに貼られてるんですかね
995 :名無しさん@お腹いっぱい。 :2015/08/12(水) 20:18:03.71 .net bashでスクリプト書かせるなよ。
996 :名無しさん@お腹いっぱい。 :2015/08/12(水) 20:45:32.93 .net RANDOM使っちゃえよ 結果だけならどうせバレない
997 :名無しさん@お腹いっぱい。 :2015/08/12(水) 21:26:42.33 .net >>995 なんで?
998 :名無しさん@お腹いっぱい。 :2015/08/12(水) 22:53:02.21 .net >>991 ユーザーの入力が標準入力である、 というのが問題中に載ってないのは よくないと思う。直しておいて。
999 :名無しさん@お腹いっぱい。 :2015/08/13(木) 00:25:40.34 .net >>987 文法がそもそも違う >>995 #!/bin/sh ruby <<< EOF puts("Daikichi") EOF #とかでもよくね
1000 :名無しさん@お腹いっぱい。 :2023/11/23(木) 19:54:52.67 ID:mNysEr30Y test
240 KB
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★
本文 スレッドタイトル 投稿者