シェルスクリプト総合 その24©2ch.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
乙です
3テンプレ ◆01VkPKFOHeoR :2014/11/11(火) 03:40:09.81
ああ、次スレをいつ立てようかとタイミングを見ていたが
次スレ立ったか...

一応前スレでテンプレ書いた手前、書き込んでおきます
4テンプレ ◆01VkPKFOHeoR :2014/11/11(火) 03:41:35.86
シェルスクリプトの総合スレです。
初心者、学生、アマチュア、プロ、シェルの種類や 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
□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
□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
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
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
□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
□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
シャナスクリプトはまだですか?
12名無しさん@お腹いっぱい。:2014/11/12(水) 07:18:57.54
シャロスクリプトもまだです
13名無しさん@お腹いっぱい。:2014/11/12(水) 13:25:09.66
そういえば
コート脱いだらハワイのミポリソ萌えスクリプトが
サーバのどっかに転がってたかもなぁw
14名無しさん@お腹いっぱい。:2014/11/12(水) 23:08:52.17
前スレで長テンプレを提案してた人スレ立ったらテンプレそのままでざまぁwww
とか思ってたらしっかり記載していたでござる

なんか文面の雰囲気変わったな、もっと堅い感じだった気がするが
15名無しさん@お腹いっぱい。:2014/11/13(木) 07:09:24.77
>>14
変えてないけどなあ
意見聞く際になるべく中立、丁寧語で書いたから、そういう印象なのかな?

意見を聞いて了承を得てからという作業は面倒臭かったが
たとえ、その23 以前の短い1レスだけのテンプレのままを、立てる人がコピペするにしても
少なくとも Perl の矛盾した記述だけはなんとかしたい

シェルスクリプト総合 その1 からずっと最近までは
「(Rubyや)awkまたはperlの方が適した処理にはそちらを使いましょう。」だけだった
16名無しさん@お腹いっぱい。:2014/11/16(日) 22:28:48.41
お勧めの shell を教えて下さい。

ずっと(22年ぐらい) 自宅や学校の FreeBSD上で tcsh を login shell として使ってきましたが、
このスレを読んで、 csh 系スクリプトはお勧めでないことを知りました。

root で作業するときには、 sh も必要なので使いますし、スクリプトも書くのですが
tcsh から sh系に移行できないでいます。

最近は仕事で数値計算をするときのプラットフォームが cygwin になってしまったため、
これを機に 自宅の FreeBSD でも、sh 系を login shell にするように切り替えようかとも思っています。
お勧めを教えて頂けませんでしょうか。

どうぞ宜しくお願い致します。
17名無しさん@お腹いっぱい。:2014/11/16(日) 22:34:23.69
>>16 自己フォローです。

すみません。他に適切と思われるスレを見つけたので、移動します。

おまえら! shell は何を使っているんですか?
http://peace.2ch.net/test/read.cgi/unix/1012330865/

お邪魔して申し訳ありませんでした。
18名無しさん@お腹いっぱい。:2014/11/17(月) 00:19:12.19
お、おう
19名無しさん@お腹いっぱい。:2014/11/17(月) 06:46:29.31
ログインシェルとスクリプトのシェルを一致させる必要は別にないのになぁ…
20名無しさん@お腹いっぱい。:2014/11/17(月) 08:15:15.50
ログインシェルはzshでスクリプト書くときはbashかな
21名無しさん@お腹いっぱい。:2014/11/17(月) 08:20:16.99
ログインシェルもスクリプトもashだ
22名無しさん@お腹いっぱい。:2014/11/17(月) 08:52:41.49
Bシェル系同士なら一致させなくても良い
23名無しさん@お腹いっぱい。:2014/11/17(月) 14:56:35.93
スクリプトは ash か dash
24名無しさん@お腹いっぱい。:2014/11/17(月) 22:07:53.32
z750sh3
25名無しさん@お腹いっぱい。:2014/11/18(火) 13:45:16.57
shで無駄にがんばる
いやなんとなく続けてるだけか
26名無しさん@お腹いっぱい。:2014/11/18(火) 17:45:34.74
/bin/sh でがんばっているよ
実体が ash だったり
dash へのリンクだったりするだけでw
27名無しさん@お腹いっぱい。:2014/11/18(火) 17:50:06.98
がんばるってほどのことかな
スクリプト書く労力は他のシェルでもあんま変わらんでしょ?
28名無しさん@お腹いっぱい。:2014/11/18(火) 18:04:52.35
ん? ログインシェルを/bin/shで頑張るって話でしょ?
補完なし、ヒストリーなし、aliasなしで。
29名無しさん@お腹いっぱい。:2014/11/18(火) 18:09:15.90
スクリプトスレだからスクリプト動かす話だよ
30名無しさん@お腹いっぱい。:2014/11/18(火) 18:24:14.49
>>19 の、ログインシェルとスクリプトのシェルを一致させる必要があるかどうか
という話から来てるから、
ログインシェルの話だろ
31名無しさん@お腹いっぱい。:2014/11/19(水) 20:36:46.43
emacsキーバインドのtcshでログインして、viでashスクリプト書いてるわ。
32名無しさん@お腹いっぱい。:2014/11/20(木) 21:39:29.05
>>28
ashはファイル補完もヒストリー呼び出しもある。
aliasなんてうんこ。functionの方が強力。
33名無しさん@お腹いっぱい。:2014/11/21(金) 05:09:42.89
>>32
それはFreeBSD拡張のashだね。
34名無しさん@お腹いっぱい。:2014/11/21(金) 16:11:47.88
スレ違いっぽいので何だがw
ログインシェルは zsh
35名無しさん@お腹いっぱい。:2014/11/21(金) 16:14:13.45
>>33
大抵emacsのshell-modeで使うので、ヒストリやコンプリーションは
なくてもそれほど困らない。
36名無しさん@お腹いっぱい。:2014/11/21(金) 19:51:04.45
もういっそログインシェルをemacsにしろよw
37名無しさん@お腹いっぱい。:2014/11/21(金) 19:58:39.53
ログインシェルを遊びでviにしてみたことならある。
その状態でログインしたviからシェルエスケープしようとすると
vi変数でshell=vi状態になってるのでシェルのつもりでさらにviが起動されてハマる。
38名無しさん@お腹いっぱい。:2014/11/21(金) 20:28:57.59
emacsをdisplay managerにしたようなOSがあったな。
39名無しさん@お腹いっぱい。:2014/11/21(金) 20:41:52.18
Oberon?
40名無しさん@お腹いっぱい。:2014/11/21(金) 20:53:09.31
apollo domain
41名無しさん@お腹いっぱい。:2014/11/25(火) 12:45:00.26
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
>>41

VLIST='1 2 3'
for val in `echo "$VLIST" | tac -s ' '`
do
echo "$val"
done
4341:2014/11/25(火) 13:39:35.78
>>42
すごい!できました。
ありがとうございました!
44名無しさん@お腹いっぱい。:2014/11/25(火) 13:46:29.21
もう答えが出ちゃってますけど rev コマンドでも行けます

$ for val in $(rev <<< "$VLIST"); do echo $val; done
45名無しさん@お腹いっぱい。:2014/11/25(火) 13:56:09.14
tac便利、自分も使ってる
46名無しさん@お腹いっぱい。:2014/11/25(火) 13:57:16.68
>>45
revだと、2桁以上の数字の時 数値の桁が入れ替わるので不可。

12 13 14 -> 41 31 21 みたいに
47名無しさん@お腹いっぱい。:2014/11/25(火) 20:47:40.16
tac 知らなかったが便利そうだ。
48名無しさん@お腹いっぱい。:2014/11/25(火) 21:00:07.87
良かった。知らないのは俺だけじゃなかったんだなw
GNU 方面は、他にも便利なコマンドがいろいろありそう・・・
(さすがに date コマンドで日付演算できるのは知ってた)
49名無しさん@お腹いっぱい。:2014/11/25(火) 21:25:54.46
とりあえずcoreutilsに入ってるものは全部覚えておこうぜ
100個ぐらいしかないんだからさ
50名無しさん@お腹いっぱい。:2014/11/25(火) 21:53:35.67
51名無しさん@お腹いっぱい。:2014/11/26(水) 00:18:13.73
tac知ってたけど有効な使い道が見いだせないでいた
しかし名前のセンスいいよな
52名無しさん@お腹いっぱい。:2014/11/26(水) 00:36:12.96
slがtacの仲間だと思って入れた時の脱力感
53名無しさん@お腹いっぱい。:2014/11/26(水) 06:02:33.63
>>46
要素ごとにもっかいrevで
54名無しさん@お腹いっぱい。:2014/11/26(水) 06:28:19.23
どうせまたBash shockのようにCoreutils shockが起こるんだぜ?
やめておけよw
55名無しさん@お腹いっぱい。:2014/11/26(水) 06:42:34.79
tac使わずに標準コマンドまたは内部コマンドだけでやれ、というのがいい詰めスクリプト問題になるなぁ。
56名無しさん@お腹いっぱい。:2014/11/26(水) 06:48:48.66
再帰すればラクショー
57名無しさん@お腹いっぱい。:2014/11/26(水) 06:50:18.91
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
>>56 のあとに再帰すら使ってないラクショーな >>57 が書き込まれた件について
59名無しさん@お腹いっぱい。:2014/11/26(水) 07:03:58.55
再帰するならこうか。これ活用しにくい。これなら >>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
未熟者のオレに>>57の動きを教えてくだせえ。。。
61名無しさん@お腹いっぱい。:2014/11/26(水) 12:59:26.09
set -x してから >>57 を実行してみると分かると思う
62名無しさん@お腹いっぱい。:2014/11/26(水) 17:31:45.44
>>57
即レスかっけー!これは濡れるw
63名無しさん@お腹いっぱい。:2014/11/26(水) 19:08:42.67
>>57が正統派に思えてくる
素直で余計なことをしていない
逆転と出力で2回forってるのが気にはなるが
64名無しさん@お腹いっぱい。:2014/11/26(水) 20:30:20.12
#!/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
>>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
どうせ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
それだったら

echo $9 $8 $7 $6 $5 $4 $3 $2 $1

でええやん…
68名無しさん@お腹いっぱい。:2014/11/27(木) 03:42:20.68
>>59
bash/zsh なら local 変数使ってこんな感じに

function reverse {
local arg="$1"
[ $# -gt 0 ] &&
{ shift; reverse "$@"; echo -n "$arg "; }
}

最後の改行はどうすべぇ…
69名無しさん@お腹いっぱい。:2014/11/27(木) 04:05:50.71
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
キモい
もっと綺麗にならんかね
71名無しさん@お腹いっぱい。:2014/11/27(木) 13:33:00.01
>>70
毎日凝視して眺める訳じゃないから
動けばいい、安定してどんな場面でも問題が起こらなければいい。
シェルスクリプトなんてそういうレベルのもの
しょせん手作業の積み上げだからね。
72名無しさん@お腹いっぱい。:2014/11/27(木) 14:14:44.52
「コードが汚くても安定して動けばいい」なんてのは
他人のコードをメンテしたり機能追加したことのない奴が言うセリフ
73名無しさん@お腹いっぱい。:2014/11/27(木) 14:31:21.58
継続してメンテしなきゃいけないスクリプトもあるし
一回動けばそれでいい使い捨てのスクリプトもある
それだけの話っしょ
74名無しさん@お腹いっぱい。:2014/11/27(木) 14:32:04.95
>>68,69 は再帰を知っていれば分かりやすいと思うけどなぁ
75名無しさん@お腹いっぱい。:2014/11/27(木) 14:43:04.36
再起知らないプログラマなんて存在しないだろ
76名無しさん@お腹いっぱい。:2014/11/27(木) 15:06:22.08
>>72
自分しか使わないマシンでも他人にメンテをお願いする
前提で書かないとならないのかい?
むしろメンテ側の人間には全く関係ない話しなんだが。
77名無しさん@お腹いっぱい。:2014/11/27(木) 15:08:35.87
>>76
一ヶ月前の自分は他人と思えって諺があってだな
個人的には自分のコードを汚く書いてしまったせいで泣くはめになったことも良くある
78名無しさん@お腹いっぱい。:2014/11/27(木) 15:12:04.96
いくらか使いこなせるようになったPerlerによくあった
79名無しさん@お腹いっぱい。:2014/11/27(木) 15:23:18.84
>>77
良い師匠に巡り会ったじゃない。
もし1ヶ月前の自分が完全無欠なら精進の可能性を断たれるな。
80名無しさん@お腹いっぱい。:2014/11/27(木) 17:23:22.21
数年前にキレイに書いたつもりのスクリプトでもメンテ(改造)めんどいお
81名無しさん@お腹いっぱい。:2014/11/27(木) 17:40:12.56
保身のため、コードはなるべく汚く、自分しか読めないように書くこと。リストラ対策。
82名無しさん@お腹いっぱい。:2014/11/27(木) 18:27:07.18
それは辞めたくなったときに困る
83名無しさん@お腹いっぱい。:2014/11/27(木) 19:50:57.59
>>81から>>82でなんか笑った
84名無しさん@お腹いっぱい。:2014/11/28(金) 00:13:06.85
>>80
書いた「つもり」だからだろ
85名無しさん@お腹いっぱい。:2014/11/28(金) 00:35:46.31
数年たちゃ腕もあがるだろうから当時の綺麗でも今の汚いなんだろうな
86名無しさん@お腹いっぱい。:2014/11/28(金) 05:41:19.53
こういっちゃなんだが何年経とうが、何日経とうが
シェルスクリプトに問題が出て治す必要があるなら
最初から書いた方が良いよ、、その時の実力で
最良のものが書ける。
1度書いた流れなら数年経っても頭に残ってるから
高速で仕上がるし、できた物を比べても大した違いは無い事も多い。

駆け出しの頃の書き物はまったく変わるのかもしれないが
それはそれで、全く変わらないと困るだろ。
過去の駄作に手をいれてジタバタしたって無駄
87名無しさん@お腹いっぱい。:2014/11/28(金) 08:44:15.84
使い捨てのつもりだったのに、長期にわたって使われた上に
「これこういう風に変えられない?」とか言われて白目になったことはある。
もちろん一般化できる話じゃないとは思うけど。
88名無しさん@お腹いっぱい。:2014/11/28(金) 12:08:04.77
改行って^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
\rと^Mは同じでCR。
\nと^Jは同じでLF。
CRとLFの違いは自分で調べろ。
90名無しさん@お腹いっぱい。:2014/11/28(金) 12:35:54.36
CRはコンデンサと抵抗による時定数回路、
LFは低周波であることはわかりましたが、
そこから先がわかりません、よろしく女教授ください。
91名無しさん@お腹いっぱい。:2014/11/28(金) 12:50:56.72
>>90
CRとLFやタブストップなどは
機械式タイプライター由来なので、一度現物を見れば忘れない
ヤフオクで1000円くらいで手に入るから買ってみるといいよ
私女だけど
92名無しさん@お腹いっぱい。:2014/11/28(金) 13:03:16.65
Macのテキストファイルの改行コードは CR ひとつなんだっけ
93名無しさん@お腹いっぱい。:2014/11/28(金) 13:54:56.36
OSによって開業コード違いますよね。
Linuxは0xJで改行、BSDは0xMで改行しますよね。
どうしてこういう違いができたんでしょう?
簡単に返還する方法はありますか?
94名無しさん@お腹いっぱい。:2014/11/28(金) 14:34:44.34
dos2ux
これってHP依存コマンドだっけ?
95名無しさん@お腹いっぱい。:2014/11/28(金) 14:46:02.61
>>93
ある
ちょっとは調べろよ
96名無しさん@お腹いっぱい。:2014/11/28(金) 15:13:15.53
>>95
改変コピペにかまうな
9788:2014/11/28(金) 20:10:29.27
CRだと最後の文字しか表示しないってことですか?
例えば
a<CR>
b<CR>
だったらbしか表示されないってことですか?
98名無しさん@お腹いっぱい。:2014/11/28(金) 20:11:01.93
aを表示した後に行頭に戻ってbを表示している
99名無しさん@お腹いっぱい。:2014/11/28(金) 20:12:58.92
100名無しさん@お腹いっぱい。:2014/11/28(金) 20:20:08.06
CRだとQを上げられないから、ボルフォロで正帰還かけるか、LCRにするべきだな。
101名無しさん@お腹いっぱい。:2014/11/28(金) 20:30:52.68
>>92
組み込みでもCR改行の場合がある。
LFで良いだろうぜぇ…といつも思うわ
102名無しさん@お腹いっぱい。:2014/11/28(金) 21:00:51.14
なんでこんな反応してんの?
103名無しさん@お腹いっぱい。:2014/11/28(金) 21:47:52.95
反応したら行けない理由は?
>>102に許可が射るのか?
104名無しさん@お腹いっぱい。:2014/11/28(金) 22:03:40.21
改行コードは初心者のころに誰でも一度は通る道だからねえ
その次に通る道はBOM…だったけど最近はWindows触ってないから今どうなってるのか分からん
105名無しさん@お腹いっぱい。:2014/11/28(金) 22:38:41.11
>>102
こんな反応じゃダメ?
106名無しさん@お腹いっぱい。:2014/11/28(金) 23:06:22.07
少し前に某サイトの解析スクリプト作ったときちょっと改行が面倒だった
HTMLはWindowsで作ってるらしくgrepとsedで抽出したあとCRのごみがついてることに気がついた
なのでCR削除したんだけどsambaで共有してるディレクトリに置いていたファイルを
メモ帳で開くことがあってまたぐちゃぐちゃに、まあTeraPadとかで開けばいいんだけど
環境に依存してしまうので再度CRくっ付けて解決したな
107名無しさん@お腹いっぱい。:2014/11/28(金) 23:11:48.20
改行法師ンフフ
108名無しさん@お腹いっぱい。:2014/11/28(金) 23:48:34.23
Macの標準がCRなんだよね
109102:2014/11/29(土) 00:39:08.93
質問内容稚拙だったり、回答後に更に質問したり、
そのあたりから定期的に張られる改変コピペだろうと思っただけなんだが
今回やたらみんな親切だから気になっただけだ
110名無しさん@お腹いっぱい。:2014/11/29(土) 00:48:29.81
いまのとこ改変コピペっぽいのは>>93だけだな
111名無しさん@お腹いっぱい。:2014/11/29(土) 01:05:04.71
改変コピペって・・・いつもこのスレに張り付いてんのかよ
112名無しさん@お腹いっぱい。:2014/11/29(土) 01:37:27.48
$ echo "1\r2"
1\r2
113名無しさん@お腹いっぱい。:2014/11/29(土) 01:49:55.58
$ echo -e "1\r2"
114名無しさん@お腹いっぱい。:2014/11/29(土) 01:50:33.86
$ echo $'1\r2'
115名無しさん@お腹いっぱい。:2014/11/29(土) 06:46:31.93
>>109
おそらくいつものコピペ荒らし
http://peace.2ch.net/test/read.cgi/unix/1413122189/276
116名無しさん@お腹いっぱい。:2014/11/29(土) 09:29:20.23
>>115
その後誘導されてこっちに移動してきた
117名無しさん@お腹いっぱい。:2014/11/29(土) 10:00:47.02
誘導も移動も自作自演
118名無しさん@お腹いっぱい。:2014/11/29(土) 10:56:38.77
たぶんVimスレで誘導した奴==>>102==>>115
119名無しさん@お腹いっぱい。:2014/11/29(土) 11:00:44.61
>>112-114
これいやらしくて自分も引っかかったんだけど
>>112はshで目的の動作をしてbashだとだめなんだよな
自分はシェルがbashでスクリプトはshなんだけど
実行結果が違うから引っかかって結構悩んだ
120名無しさん@お腹いっぱい。:2014/11/29(土) 12:05:12.75
ひどい言いがかりだ
121名無しさん@お腹いっぱい。:2014/11/29(土) 12:07:01.30
まだbashなんか使ってたのかよw
122名無しさん@お腹いっぱい。:2014/11/29(土) 12:12:50.64
鉄腕bash
123名無しさん@お腹いっぱい。:2014/11/29(土) 12:27:45.78
大腕硬爆衝
124名無しさん@お腹いっぱい。:2014/11/29(土) 13:00:19.16
125名無しさん@お腹いっぱい。:2014/12/04(木) 14:50:44.76
Xpath形式のデータを整形式にするスクリプト知りませんか?
126名無しさん@お腹いっぱい。:2014/12/05(金) 07:55:18.64
127名無しさん@お腹いっぱい。:2014/12/07(日) 12:25:15.01
1点ご質問させてください。
現在下記のようなシェルスクリプトを書いています。

trap 'echo "ERROR!!" ; exit 1' ERR

hoge 2>&amp;1 | tee test.log
hoge2 2>&amp;1 | tee test.log
hoge3 2>&amp;1 | tee test.log
hoge4 2>&amp;1 | tee test.log

コマンド結果の標準出力と標準エラー出力の両方を
ログファイルに残したいのですが
この場合、最初のコマンドで戻り値に1が返されても
次のteeコマンドで戻り値が0になってしまうため
trapで適切にエラーハンドリングできない状態です。

pipestatus使えば何とかなりそうなのですが
その場合コマンドを実行するたびにif文で
pipestatusを評価する必要があるため、冗長に感じてしまいます。

そのためもしより良い解決方法がありましたらご教授いただけませんか。
128名無しさん@お腹いっぱい。:2014/12/07(日) 12:45:10.31
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
>>127
全部まとめて tee して、コマンドは &amp;&amp; でつなげばエラーがあれば途中で打ち切ってくれるよ。

( hoge &amp;&amp; hoge2 &amp;&amp; hoge3 &amp;&amp; hoge ) 2>&amp;1 | tee test.log
130129:2014/12/07(日) 13:37:42.00
amp化けやだー 全角&で書き直すわ

( hoge && hoge2 && hoge3 && hoge4 ) 2>&1 | tee test.log
131名無しさん@お腹いっぱい。:2014/12/07(日) 17:01:01.11
set -eじゃダメなのか?
132名無しさん@お腹いっぱい。:2014/12/07(日) 17:03:41.55
>>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
>>131

set -e
false | true

echo 'set -e してもパイプ下流が真だと終了しないよw'
134名無しさん@お腹いっぱい。:2014/12/07(日) 21:22:56.83
>>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
>>86
なんだか勇気づけられた
ありがとう
136名無しさん@お腹いっぱい。:2014/12/12(金) 12:07:03.36
もう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
>>136

sed ${START},${END}d /dir/file

で行けるよ。

変数 START ENDに余分なスペースが入ってないか注意。
スペース取るには、

START=`echo $START`
END=`echo $ECHO`
で、代入し直す。
138名無しさん@お腹いっぱい。:2014/12/12(金) 12:34:18.14
ダブルクォートで囲っちゃえばいいんじゃない

sed "${START},${END}d" /dir/file
139名無しさん@お腹いっぱい。:2014/12/12(金) 12:39:48.69
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
>>136
> sedは「,」が未知のコマンドです、と言ってき

これ、START 変数が undef か空っぽ("")なんじゃない?
set -x してからスクリプトを実行してみて確かめたほうがいいよ。
141名無しさん@お腹いっぱい。:2014/12/12(金) 12:45:54.06
エスパーすると $START とかに 全角スペース が入ってるw
142名無しさん@お腹いっぱい。:2014/12/12(金) 12:55:10.57
なるほどw
143名無しさん@お腹いっぱい。:2014/12/12(金) 13:05:14.93
$ printf "foo\nbar\nbaz\n" | sed ",2d"
sed: -e 表現 #1, 文字数 1: 未知のコマンドです: 「,」
144名無しさん@お腹いっぱい。:2014/12/12(金) 14:02:50.73
>>136 です。

やさしきみなさん、コメントありがとうございます。
これからいじくってみて、あとで結果報告いたします。
145名無しさん@お腹いっぱい。:2014/12/12(金) 14:35:13.48
>>136 です。

デバグ用の

echo $START
echo $END

の直後に、

START=`echo $START`
START=`echo $END`

を追加して実行したところ、な、な、なんと!
思い通りの結果が得られました。この一週間悩んだのが
たった2行の追加でクリアされました。なんかポカーン状態
ですが。。。

画面上では空白が入ってないように見えただけかもしれま
せん。>>137 さん助かりました。ありがとうございます。

>>139 さんの書かれたprintf文、参考になりました。まずこ
れを試してみるべきでしたね。
たぶん後ろに改行が入ってたんじゃないかな
^Mのやつ
147名無しさん@お腹いっぱい。:2014/12/12(金) 15:06:40.30
^Mですか。結構、ネット上には^Mを消すという記事がありますね。
これのことだったのか、がてんいきました。
148名無しさん@お腹いっぱい。:2014/12/12(金) 15:38:25.84
^M だと、
START=`echo $START`
やっても^Mは取れないから、違うと思うぞ
149名無しさん@お腹いっぱい。:2014/12/12(金) 18:17:01.24
シェルスクリプトはXMLのDOM操作のようなことはできないんですか?
あいだに要素を追加したりとか
150名無しさん@お腹いっぱい。:2014/12/12(金) 19:08:12.46
要素って具体的に何?
151名無しさん@お腹いっぱい。:2014/12/12(金) 19:58:42.72
>>149
やればできると思うが、結構面倒だしな

>>150
テキスト要素とかタグ要素とか
152名無しさん@お腹いっぱい。:2014/12/12(金) 20:44:30.25
>>149
xslt使えよ
153名無しさん@お腹いっぱい。:2014/12/13(土) 00:48:34.76
シェルスクリプトで、XMLのDOM操作をしたいってことなのか
「のようなこと」ってあるから別の何かかと思った
使ったことは無いんだけど、XMLgawkが便利そう
154名無しさん@お腹いっぱい。:2014/12/13(土) 03:47:01.58
XML Starletとか
155名無しさん@お腹いっぱい。:2014/12/15(月) 19:52:22.36
dashってのがあったんだ。
知らなかった。。。ash系なのか、ダッシュ島系なのか
156名無しさん@お腹いっぱい。:2014/12/15(月) 20:11:02.18
農家専用プログラミング言語
157グールドの著作を読むなら原書で:2014/12/16(火) 15:34:56.67
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
>>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
>>158
echoコマンドはこういう遣り方じゃないと勝手に改行が入って苦労しました。
!も特殊文字扱いだったということでしょう。
それはさておきいちいちwhoとか名前付けてsetしなくてよいということですね。
こういうプログラムって当時からやってました?
sfcって遅れたキャンパスだったので、他大学の工学部などでは常識でも
あのキャンパスでは非常識ということも多々あるかと思います。
とにかくHi [first name]っていうプログラムを動かしてたのは学内で自分だけでした。
プログラムの全体はLaTeXをエクステンション除いたファイル名だけ打ち込めば
任意のプリンタから自動印刷できるという内容なんですがね。
160名無しさん@お腹いっぱい。:2014/12/16(火) 17:28:04.57
昔話がしたいの?
161グールドの著作を読むなら原書で:2014/12/16(火) 17:38:54.20
他キャンパスでは当時どうだったか知りたいだけ。これってアドミン権限除いた
基本的な構造はAmazon.comなどで金になってる商売だから。
162名無しさん@お腹いっぱい。:2014/12/16(火) 17:51:39.82
1993年ならUNIXとしては遅い方。
どこにでも普通に転がってるスクリプトだし、なんの変哲もないヘボスクリプトの何を評価しろとw
163グールドの著作を読むなら原書で:2014/12/16(火) 17:54:06.78
このスクリプトの特許持っている人ってどの国の何ていう人で取得年は何年?
164名無しさん@お腹いっぱい。:2014/12/16(火) 17:54:28.41
なんで特許持ってる前提になってんの?
165グールドの著作を読むなら原書で:2014/12/16(火) 17:58:23.52
金になるアイデアには特許が付き物でしょう。Amazon.comだって誰かに金払ってるでしょ。
166名無しさん@お腹いっぱい。:2014/12/16(火) 18:23:54.80
もしかして、root権限がなくても/etc/passwdのフルネームフィルドが読める手法がすごい、って言ってるの?
/etc/passwdは一般ユーザーでももともと読めるし、(たとえshadowでもパスワード部分以外は)
NIS使ってるならypcat passwdは一般ユーザーでもできるし。
何の新規性もない。
167グールドの著作を読むなら原書で:2014/12/16(火) 18:38:28.60
>>166
そうではなくて、大したことの無いアイデアが金になることがある、ということを強調している。
Amazon.com等々が誰かに金を払っているのは事実の筈だし。無論アドミン権限の中のプログラム
であってもデータから抜き出す作業は同じ。で、Amazonとかできた当初はHi某とか言ってこなかった
筈なので、そこら辺の経緯を知りたいわけ。日本語では英語名で抜き出すのは日本語名で抜き出す
よりは厄介な筈。他に方法いくらでもあるから。
168名無しさん@お腹いっぱい。:2014/12/16(火) 18:43:25.43
スレ違い。
169名無しさん@お腹いっぱい。:2014/12/16(火) 20:12:06.60
「俺が始めてだ、すげーだろー」は、その時点で主張しなけりゃ何の意味もない

ちなみにBBSにおいてユーザーの識別子として一方向ハッシュを表示する手法を、提唱したのは俺だ。
170名無しさん@お腹いっぱい。:2014/12/16(火) 21:46:14.47
>>167
そこまで知りたいなら調べて報告してくれ
おしえてクンじゃなければね
171名無しさん@お腹いっぱい。:2014/12/17(水) 00:10:11.34
>>167
> Amazon.com等々が誰かに金を払っているのは事実の筈だし。

まず、このソースを出してくれ
172名無しさん@お腹いっぱい。:2014/12/19(金) 14:14:12.27
mksh; MirBSD Korn Shell
ってのがあったんだ。
知らなかった。。。ash系なのか、ダッシュ島系なのか
173名無しさん@お腹いっぱい。:2014/12/23(火) 07:08:11.72
おっさんそんな調子で年越せんのか
しっかりしろ
174名無しさん@お腹いっぱい。:2014/12/25(木) 17:52:08.23
さあ、クリスマスだよ。
学生さんは冬休みに、買ってもらった
Mac, iPhone, android でシェルスクリプトを書いて遊ぼう!
175名無しさん@お腹いっぱい。:2014/12/25(木) 18:54:27.87
買ってもらった?
学生なら自分で買うわ。

生徒や児童なら買ってもらうかも知れんが。
176:2014/12/25(木) 19:32:27.25
/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヽ
    /:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://ヽ:::::::::::::::|
    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
スレ違いかもだけど。。。
cronでスクリプト最速で回すとすると
* * * * * /home/user/hoge.sh
だけど、これ以上の頻度というか速度で実行できないのかな。
無限ループ覚悟で、hoge.shの最後に自分自身をコールするとか。
178名無しさん@お腹いっぱい。:2014/12/26(金) 09:36:37.85
自分自身でまわすならcronからは1回でいいじゃん
179名無しさん@お腹いっぱい。:2014/12/26(金) 09:36:40.46
>>177
何かの待ち受けイベントチェックか?

普通にsleep 1とかしながらループすればいいじゃん。cron必要なし。
自分自身をコールするするのは無駄だからwhile :; do hoge; sleep 1; done で無限ループな。
180名無しさん@お腹いっぱい。:2014/12/26(金) 09:55:10.70
*じゃなく*だ。
181名無しさん@お腹いっぱい。:2014/12/26(金) 10:01:04.07
>>179
そうです、自宅鯖で、smtpからweb、ssh、イベント監視まで
全部やらせてるマシン。あんまとっぴなことすると、落ちそう
なので。sleep入れれば、変な挙動はなくなりそうですね。
感謝!
182名無しさん@お腹いっぱい。:2014/12/26(金) 12:23:03.31
>>179さんの助言をそのまんまパクリ、

さっそくcronをやめて、do while ( `nantoka` ) done方式に変更。
前にcase文をつけてstart、stop、resartで起動、停止
できるようにした。sleep_secは10秒。これで様子みます。

しかし、良スレですね、ここは。いつも助けていただき感謝です。
183名無しさん@お腹いっぱい。:2014/12/26(金) 12:27:53.31
ここの住人のかたがたは皆さん知ってるだろうけど
今浦島な私には、pgrep、pkillというコマンドが使える
のが素晴らしいと思いました。(最近知った)
なんか昔は、kill -9 `pidof nantoka`とかやってたのが
なつかしいというか。
184名無しさん@お腹いっぱい。:2014/12/26(金) 13:13:19.56
話続けるなら名前欄にレス番入れてよ。
185名無しさん@お腹いっぱい。:2014/12/27(土) 13:16:10.86
>>179
conky使ったりatに登録したりしてまわさなくても、
単純にそれで良かったんだなあ。
186名無しさん@お腹いっぱい。:2014/12/31(水) 06:28:21.74
さあ、大晦日だよ。
学生さんは冬休みに、買ってもらった
Mac, iPhone, android でシェルスクリプトを書いて遊ぼう!
187名無しさん@お腹いっぱい。:2014/12/31(水) 13:02:42.92
iPhoneでどうやって書けるの?
188名無しさん@お腹いっぱい。:2014/12/31(水) 13:58:30.05
189名無しさん@お腹いっぱい。:2014/12/31(水) 19:47:38.53
書くだけでなく、走らせて結果を見れるやり方
ただ調べた結果だけなので自己責任で

* インターネットブラウザーの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
ggl 検索文字列
でw3mを使って検索文字列でググる要にしているのを拡張したい

具体的には
コピーしてクリップボードの中に入ってる文字で検索しようと思う

それ自体は簡単なのだけど、問題は --clipboard や -c のオプションを付けた時に実行されるのか、(ggl -c)
それとももっとルーズに (ggl) と引数無しの状態で実行するか悩んでいる

オプションとかのガイドラインてある?
例えば -l はリスト(at -l など)で使うとか、多くのコマンドは
引数がない時は -h オプションと同じように簡単な説明がでるとかのメジャーなガイドライン
191名無しさん@お腹いっぱい。:2015/01/01(木) 18:19:12.95
GNUにはあった気がする
192名無しさん@お腹いっぱい。:2015/01/01(木) 18:26:54.79
引数ないときは「クリップボードから」なんて慣習は存在しない。
193名無しさん@お腹いっぱい。:2015/01/01(木) 18:29:20.31
興味があったのでちょっと検索してみた。
ガイドラインというのはわからないが、こんな感じで使われてるね〜みたいのなら、

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
> [email protected] a list of them, with their meanings, so we can update the table.
194名無しさん@お腹いっぱい。:2015/01/01(木) 20:15:18.38
>>191-193
サンキュー

URL先の情報にぴったりのオプション見つからないから
-h を少し書いて後々忘れた時に備えて、
デフォルトでクリップボードで検索、
引数あるときはそれで検索にする
195名無しさん@お腹いっぱい。:2015/01/01(木) 22:28:20.83
両方用意すればいいんじゃない?
自分の名前がgglかgglcかで動作が変わるのも面白そう。
196名無しさん@お腹いっぱい。:2015/01/01(木) 22:31:09.64
名前同じで動作変わるとmanの括弧書きの数字が増えてややこしいみたいな?
197名無しさん@お腹いっぱい。:2015/01/03(土) 21:18:53.70
そういやgetopt(3)ってPOSIXで規定されてるんだね。いまどきの
*BSD, Linuxならlibcで持ってるものなんだな。

とあるソフトがGNUのgetopt.cを同梱しているので消してやりたいと思って
いたんだけど、configureでgetoptの存在チェックしてlibcの方を優先して
使わせるようにするのがいいのかな。
198名無しさん@お腹いっぱい。:2015/01/08(木) 11:56:42.54
「とあるソフト」がGPLなら、一部を削除するのはライセンス違反。
199名無しさん@お腹いっぱい。:2015/01/08(木) 12:01:18.92
>>198
なんで?
200名無しさん@お腹いっぱい。:2015/01/08(木) 12:15:36.60
GPL V3
4. Conveying Verbatim Copies.
5. Conveying Modified Source Versions.
201名無しさん@お腹いっぱい。:2015/01/08(木) 13:17:19.27
>>200
詳しく
202名無しさん@お腹いっぱい。:2015/01/08(木) 18:53:35.81
質問です
22, 32, 33, 45,
12, 47, 78, 44, 32,
...
数字がカンマで区切って700個書いてあるファイルがあります。
一行に数字が何個あるか規則性はありません。
このファイルを読み込んで数字を100個ずつ出力して7枚のファイルを
作りたいと思っています。シェルスクリプトでうまくできますでしょうか。
出力されたファイルには数字が一列で入っているほうがいいです。
お願いします。
203名無しさん@お腹いっぱい。:2015/01/08(木) 19:41:16.46
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
gawk じゃなくてふつーの awk で。

awk -v RS=, '{print $0+0 > int(NR/100)+1 ".txt" }'
205名無しさん@お腹いっぱい。:2015/01/08(木) 20:36:37.66
int((NR-1)/100)+1 じゃないとダメだった。
206203:2015/01/08(木) 20:51:41.18
あ、カンマはいらないのね
207203:2015/01/08(木) 20:56:03.24
なおかつ1列を1行と読み間違えていた(´・ω・`)ショボーン
208名無しさん@お腹いっぱい。:2015/01/08(木) 21:09:50.76
ファイル分割が有るし、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
awkもsedも出ちまったか

tr -d '\r\n' < file
210名無しさん@お腹いっぱい。:2015/01/08(木) 21:52:48.42
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
211209:2015/01/08(木) 21:57:31.95
ミス

tr -d '\r\n' < file | tr ',' '\n' | split -l 100
212名無しさん@お腹いっぱい。:2015/01/08(木) 21:58:20.67
考えてる途中で送っちゃった。やり直し

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
213209:2015/01/08(木) 22:01:45.08
>>212
お前は俺か
214名無しさん@お腹いっぱい。:2015/01/08(木) 23:07:34.58
/ *, */を改行に変換してhead
215名無しさん@お腹いっぱい。:2015/01/09(金) 00:45:24.74
#!/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
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
211と216を足して

$ grep -o '[0-9]\+' data.txt | split -l 100
218202:2015/01/11(日) 18:59:23.53
>>203-217
ありがとうございます。本当に助かりました。
勉強不足を痛感。向上心を刺激されました。
219名無しさん@お腹いっぱい。:2015/01/14(水) 13:42:56.50
$SEARCH に入れても awkが動いてくれません
{}が引っかかってしまったのだろうか? どうすればよいのだろうか?

while true
do read SEARCH
awk 'BEGIN{RF="---"}/${SEARCH}/' $save_to
done
220名無しさん@お腹いっぱい。:2015/01/14(水) 13:55:03.85
シングルクォートで囲まれてるから置換されないのよ
221名無しさん@お腹いっぱい。:2015/01/14(水) 14:41:45.54
>>220
多少書き換えてみました
しかし、まだ動きません

clp.sh
do read SEARCH
export SEARCH
awk -f ~/sbin/h_Searher.awk $save_to
done

~/sbin/h_Searher.awk
BEGIN{RF="---"}/$SEARCH/
222名無しさん@お腹いっぱい。:2015/01/14(水) 17:08:45.99
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";
  }
}
223名無しさん@お腹いっぱい。:2015/01/15(木) 10:05:06.27
>>219
awk 'BEGIN{RF="---"}/'${SEARCH}'/' $save_to
224名無しさん@お腹いっぱい。:2015/01/15(木) 12:37:55.02
>>223
thanks!
225名無しさん@お腹いっぱい。:2015/01/15(木) 13:19:56.10
そして、$SEARCHにインジェクションされましたとさ。
226名無しさん@お腹いっぱい。:2015/01/15(木) 18:30:18.23
GNU awk ならこんなのも

awk -v SEARCH="$SEARCH" 'BEGIN{RF="---"}/SEARCH/' $save_to
227名無しさん@お腹いっぱい。:2015/01/20(火) 01:40:59.45
こんな雑誌があることを初めて知った。
なんと月刊で20号以上出ているということにも驚いた。

シェルスクリプトマガジン vol.21
http://www.amazon.co.jp/dp/4904807154/
https://www.usp-lab.com/pub.magazine.html
228名無しさん@お腹いっぱい。:2015/01/20(火) 05:22:18.17
その雑誌の半分はシェルスクリプト関係ない内容だから相当ネタがないんだろなって思った
229名無しさん@お腹いっぱい。:2015/01/21(水) 01:45:14.76
ツールドフランスの実況が森の景色の解説になってるようなもんか
230名無しさん@お腹いっぱい。:2015/01/22(木) 16:29:19.37
コマンドラインから手入力するとちゃんと動くスクリプトが、cronからだと動かない。
数日悩んだ結果。。。原因はLANGだった
231名無しさん@お腹いっぱい。:2015/01/22(木) 16:32:53.58
ルンゲの罠
232名無しさん@お腹いっぱい。:2015/01/22(木) 16:48:29.41
>>230
まれによくある。

スクリプトの先頭付近でLANGを設定しちゃうことも多いんだけど、Unix的でクールな
ポータビリティのある手法を紹介してくれる偉い人が出てくるのを正座して待ちたい。
233名無しさん@お腹いっぱい。:2015/01/22(木) 17:14:56.12
LANG=C
234名無しさん@お腹いっぱい。:2015/01/23(金) 06:42:51.72
偉い人が
 共通したものは crontab 先頭で、タスク毎のは env NAME=VALUE COMMAND
と答えるか、もうまるっきり答えないと予想した
235名無しさん@お腹いっぱい。:2015/01/23(金) 10:00:16.40
共通したものは crontab 先頭で、タスク毎のは env NAME=VALUE COMMAND
236名無しさん@お腹いっぱい。:2015/01/23(金) 16:52:05.70
偉い人のコピペ北ー!
自演っぽくて、コメントしづらい輪
237名無しさん@お腹いっぱい。:2015/01/23(金) 17:30:03.53
この話はここで終わりって暗に言ってるんだろう
238名無しさん@お腹いっぱい。:2015/01/24(土) 10:11:24.87
LANG=C sl
的な書き方ってどこまで有効なのかな?
bashだけ?
239名無しさん@お腹いっぱい。:2015/01/24(土) 10:23:49.81
>>238
bourne shell でも使える
240名無しさん@お腹いっぱい。:2015/01/24(土) 15:26:45.88
配列の命名規則ってある?
241名無しさん@お腹いっぱい。:2015/01/24(土) 15:41:53.70
ない
242240:2015/01/25(日) 04:39:03.74
みんなはどうしてる?
しっくりくる表記法がないんだけど
243名無しさん@お腹いっぱい。:2015/01/25(日) 05:18:01.83
しっくりこない表記がワカラナイ
244名無しさん@お腹いっぱい。:2015/01/25(日) 11:18:23.60
配列は邪教
使わないので規則などない
245名無しさん@お腹いっぱい。:2015/01/25(日) 11:45:02.72
>>244
同意
246名無しさん@お腹いっぱい。:2015/01/25(日) 12:36:31.55
配列って変数名に連番を入れたりして使うことかと思ってたw
247名無しさん@お腹いっぱい。:2015/01/25(日) 13:47:36.00
>>244,245
じゃあ代わりにどうすればよいのだ?
まさかコピペ?
248名無しさん@お腹いっぱい。:2015/01/25(日) 17:38:43.45
ポインタとか言い出すと見た
249名無しさん@お腹いっぱい。:2015/01/25(日) 19:40:14.84
あほらし

> じゃあ代わりにどうすればよいのだ?
> ポインタとか言い出すと見た
いかにも、めんどくさそう
250名無しさん@お腹いっぱい。:2015/01/25(日) 19:46:57.10
会話するネタがないんだなぁ……
251名無しさん@お腹いっぱい。:2015/01/25(日) 21:21:36.60
じゃあおれからネタ
xargsコマンドが好き。無理だと思ってた処理がワンライナーになる
いっそ、powershellみたいにjsonパイプラインみたいなのがあればいいのにって思う
252名無しさん@お腹いっぱい。:2015/01/25(日) 22:41:49.00
俺がよく使うのはfind ... | xargs grep だったかな
他どんな場面で使うっけ
253名無しさん@お腹いっぱい。:2015/01/25(日) 23:37:38.84
\ls -1t *.* |head -3|xargs head
254名無しさん@お腹いっぱい。:2015/01/26(月) 12:06:00.33
>>235

*.*の3行が、headへの標準入力じゃなくて、引数として与えられるのか。
おもしろいなあ。
255名無しさん@お腹いっぱい。:2015/01/26(月) 20:35:10.75
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
256名無しさん@お腹いっぱい。:2015/01/27(火) 02:26:05.37
xargs は並列処理でもよく使うかな
例えば find ... | xargs -P 12 -n 16 gzip とすると12プロセスがファイルの圧縮を行う
257名無しさん@お腹いっぱい。:2015/01/27(火) 03:09:32.08
\nをファイル名に仕込まれて爆死する
258名無しさん@お腹いっぱい。:2015/01/27(火) 06:47:01.92
find ... -print0 | xargs ... -0 ... ってしとけばええやん…
259名無しさん@お腹いっぱい。:2015/01/27(火) 07:02:05.92
\0をファイル名に仕込まれて(ry
260名無しさん@お腹いっぱい。:2015/01/27(火) 07:38:50.39
仕込めるんだっけ?
261名無しさん@お腹いっぱい。:2015/01/27(火) 08:17:49.81
find ‥ -print0 を知らん奴もいるんだな w
262名無しさん@お腹いっぱい。:2015/01/27(火) 08:20:05.07
>>260
API だと思い付かない
ディスクを直接バイナリ編集すれば可能かも
263名無しさん@お腹いっぱい。:2015/01/27(火) 08:25:13.28
>>261
実装によってはないのよ
264名無しさん@お腹いっぱい。:2015/01/27(火) 08:28:26.16
solarisにはまだない
265名無しさん@お腹いっぱい。:2015/01/27(火) 12:18:24.66
>>263
移植すりゃいいじゃん
266名無しさん@お腹いっぱい。:2015/01/27(火) 12:56:34.51
大抵は
-exec {} +
で用が足りる
267名無しさん@お腹いっぱい。:2015/01/27(火) 13:01:19.27
>>262
カーネル内でもファイル名は0終端で扱ってるから無理だね
実際のサイズと異なる事でカーネルクラッシュなどまずいことが発生する可能性は
あるけど、それは普通にカーネル内バグ
268名無しさん@お腹いっぱい。:2015/01/27(火) 13:29:38.19
>>265
そういう話じゃないよ
269名無しさん@お腹いっぱい。:2015/01/27(火) 13:41:29.10
>>268
半分冗談だよ、いちいち気にしてたら禿げるぞ
270名無しさん@お腹いっぱい。:2015/01/27(火) 13:43:51.02
冗談に見えないし、
冗談だとしても面白くないよ
271名無しさん@お腹いっぱい。:2015/01/27(火) 15:15:56.23
大抵は
-exec \{\} +
とエスケープなりクォートで囲むなりするのを忘れる
272名無しさん@お腹いっぱい。:2015/01/27(火) 16:27:07.47
{}をquoteしなきゃならないカタワ専用シェルって何?
273名無しさん@お腹いっぱい。:2015/01/27(火) 21:10:27.07
-execはなんか怖いんだよなぁ
理由はないんだけど
274DAEMON:2015/01/27(火) 21:45:21.58
>>272
 シ
タッ・・(Φ Φ+)・・・ 恐らく Perl です
275DAEMON:2015/01/27(火) 22:02:58.78
>>274
 シ
タッ・・(Φ Φ+)・・・ 例えば、基礎公文で…

while (test) {
       open test-file.txt(filehandle) ,
          ">test-file.pl"
       print test-file.txt
    close test-file.txt
}

斯様な様にですか…
276名無しさん@お腹いっぱい。:2015/01/28(水) 00:14:24.97
>>271
で、{}をクォートする必要があるシェルって何?
277名無しさん@お腹いっぱい。:2015/01/30(金) 19:56:12.76
wait入れるsleepだが、引数が整数だけだろと思ってたら、整数じ
ゃなくてもいいというので、0.1入れてやってみたら、ほんとに動
作してるっぽい。manには何も書いておらん。つかえねーman
278名無しさん@お腹いっぱい。:2015/01/30(金) 20:00:01.61
うちの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).
279名無しさん@お腹いっぱい。:2015/01/30(金) 21:57:35.82
>>278

おお、サンクス
280名無しさん@お腹いっぱい。:2015/01/31(土) 12:09:54.06
>>273
客先環境での操作なんかだとおおいにある
xargsなら、-pとか-tがあるので安心
281名無しさん@お腹いっぱい。:2015/01/31(土) 13:19:36.31
>>280
同意が得られて異端じゃないと安心出来た
尚就職してから今まで客先環境でしか働いたことがない模様
282名無しさん@お腹いっぱい。:2015/01/31(土) 17:47:20.57
こうじゃなくて
v=${v:-default}

こうでしょ
: ${w:=default}

っていうの有りますか?皆さんの、そういうの教えて下さい
283名無しさん@お腹いっぱい。:2015/02/01(日) 00:46:16.74
こうじゃなくて
echo -e 'hoge\nfuga'

こうでしょ
printf 'hoge\nfuga\n'
284名無しさん@お腹いっぱい。:2015/02/01(日) 00:47:04.51
俺はecho派
285名無しさん@お腹いっぱい。:2015/02/01(日) 07:05:52.05
公文い公文
286名無しさん@お腹いっぱい。:2015/02/01(日) 13:49:52.79
echo は -e が必要だったり不要だったりモノによってバラバラなんで printf だなぁ。
OSX の /bin/sh は bash だけど、同じ bash のはずなのに
bash -c "echo -e 'hoge\nfuga'" と sh -c "echo -e 'hoge\nfuga'" で
結果が違うとかめんどくさすぎる。
287名無しさん@お腹いっぱい。:2015/02/01(日) 18:28:40.97
似た様なのだけど、

こうじゃなくて
function f () {
echo hoge hoge
}

こうでしょ
f () {
echo hoge hoge
}
288名無しさん@お腹いっぱい。:2015/02/01(日) 19:10:32.63
個人的には上なんだけど
最近やってるのがjavascriptだからかな
289名無しさん@お腹いっぱい。:2015/02/02(月) 10:43:19.51
変数は大文字か小文字か。
個人的には環境変数と区別するために小文字なんだけど、
社内の他の人が書いたのを見ると大文字ばっかりなんだよな。
290名無しさん@お腹いっぱい。:2015/02/02(月) 12:18:06.01
いつexportしても問題が出ないような命名規則なら問題無しw
291名無しさん@お腹いっぱい。:2015/02/02(月) 21:56:58.79
質問です。
linux mint 17.1 でコマンドの練習してるのですが、
% ls -l
だと色々ずらーっと出るんですけど、本に書いてあるとおり、
ソートコマンドを練習しようとして
% ls -l | sort +4
と打ち込んでファイルサイズで降順ソートしたかったのですが
sort: cannot read: +4: そのようなファイルやディレクトリはありません
と出てしまいます。
bashですが、シェルの種類によってはこのオプション使えないんでしょうか。
-r等は正常に動作します。
292名無しさん@お腹いっぱい。:2015/02/02(月) 22:04:13.81
sort -k4
sort -k4r
293名無しさん@お腹いっぱい。:2015/02/02(月) 22:34:00.27
で、できました!有り難うございます!
294名無しさん@お腹いっぱい。:2015/02/03(火) 03:09:11.93
>>291-293
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
295名無しさん@お腹いっぱい。:2015/02/03(火) 06:48:02.67
Linux だったら ls コマンドは GNU coreutils の ls だろうから、

$ ls -l --sort=size
or
$ ls -lS

でええじゃまいか
296名無しさん@お腹いっぱい。:2015/02/03(火) 08:37:05.99
297確認不足だった orz:2015/02/03(火) 08:40:20.78
298名無しさん@お腹いっぱい。:2015/02/04(水) 22:55:20.92
>>297
おお、infoの日本語訳できたんだ
man on WWWのように検索できるとさらにいいね
299名無しさん@お腹いっぱい。:2015/02/08(日) 15:04:24.54
よく使うワンライナーなどはどうやって呼び出すものなんですか?
何か簡単に管理する方法がありませんかね?
300名無しさん@お腹いっぱい。:2015/02/08(日) 15:06:57.37
zshならzawから
vimのUnite historyの様なgrep効くから、それで呼ぶか
編集して完成させる
301名無しさん@お腹いっぱい。:2015/02/08(日) 16:40:17.45
>>300
anything.elみたいなヒストリーサーチみたいですね。
bashなのでどうしたものか。
302名無しさん@お腹いっぱい。:2015/02/09(月) 09:34:08.43
>>299
aliasじゃないの?
303名無しさん@お腹いっぱい。:2015/02/09(月) 10:04:38.99
自分で書いたスクリプトはいつでも、一見、間違いのないように見えるw
304名無しさん@お腹いっぱい。:2015/02/09(月) 18:00:27.27
まったくだ(´・ω・`)
ぼくの書いたスクリプトが動かないなんてけしからん(´・ω・`)
シェルの方を治したまえ
305名無しさん@お腹いっぱい。:2015/02/09(月) 18:21:02.80
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
306名無しさん@お腹いっぱい。:2015/02/09(月) 18:41:13.94
ping -c 1 ... にするべきじゃないの?

pingのコマンドオプションって統一されてないよなぁ
307名無しさん@お腹いっぱい。:2015/02/09(月) 19:27:08.45
配列を使うのはダサいと思うのです。

#!/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
308名無しさん@お腹いっぱい。:2015/02/09(月) 19:28:49.19
ああ、case の条件部分がおかしい。
http://*|https://*|ftp://*)
だな。
309名無しさん@お腹いっぱい。:2015/02/09(月) 19:33:01.27
わざわざpingするのがわからん
310名無しさん@お腹いっぱい。:2015/02/09(月) 19:34:49.22
pingしなくても wget -T でタイムアウトできるしな
311名無しさん@お腹いっぱい。:2015/02/09(月) 19:39:42.45
俺んところの現場でも、ssh する前に ping するスクリプトを書いてる人がいたな。
これって、どこかに由来する文化なのかな?
(cronを「くーろん」と呼ぶみたいな?いや、これは違うかな……)
312名無しさん@お腹いっぱい。:2015/02/09(月) 19:43:34.71
>>306
サンキュー
windowsのsystem32/ping.exeが呼ばれてた
そりゃ移植性がないわけだ

>>307-308
コードありがとう

>>310
-Tオプションなんてあったのか

>>309
pingで鯖落ちてないか検査した後w3mで複数のURLから取ってきて
スレの上下の不要な広告など取り除いてから git commit して
その差分見るから

全部安全に通信できるか見てからやらないと、差分の時にちょっと問題になる
通信できなかったスレがマイナス差分で大量表示されたり、
次回は大量追加されたり

git reset hard HEAD~ するぐらいならあらかじめ通信検査してからやろうと思った
313名無しさん@お腹いっぱい。:2015/02/09(月) 19:45:19.02
>>310
それもあるし、どれかひとつでもエラーでping_error=1だからサーバの状態を確認してる感じがしない
314名無しさん@お腹いっぱい。:2015/02/09(月) 19:47:43.57
もうひとつバグってた。こうしないと常に0で終了しちゃう。
echo ... | {
while read ... do
...
done
exit $err
}
315名無しさん@お腹いっぱい。:2015/02/09(月) 20:32:51.35
>>312
> -Tオプションなんてあったのか

通信系のコマンドで、タイムアウトが指定できないものはスクリプトからは利用しないとか、
そういうことは考えないで作っちゃうタイプの方ですか?

ちなみに、大抵の通信系コマンドはタイムアウトが指定できるような気がする。
316名無しさん@お腹いっぱい。:2015/02/09(月) 20:46:31.70
Windows 7 からだっけか? デフォルト設定では ICMP echo をフィルタリングしてるのって
317名無しさん@お腹いっぱい。:2015/02/09(月) 21:22:03.82
>>302
> >>299
> aliasじゃないの?
長いワンライナーは場面ごとに手直しする必要のあることが多いから、
それだと融通がきかないことがありませんか?
318名無しさん@お腹いっぱい。:2015/02/09(月) 22:07:20.56
2chのスレが更新されてるかどうか(新しいレスがあるかどうか)チェックするのは自分もやってる
いろいろやり方はあるだろうけど、自分の場合は
libwww-perl(debian系)に入ってるHEADコマンドで.datファイルのLast-Modifiedフィールドみたいなのを見てる
319名無しさん@お腹いっぱい。:2015/02/10(火) 06:45:24.43
>>311
ここに書いてる奴本人じゃね?w
320名無しさん@お腹いっぱい。:2015/02/10(火) 06:59:04.70
>>316
XP じゃね?
毎回設定してたような気がする
2K は忘れた
321名無しさん@お腹いっぱい。:2015/02/10(火) 07:03:40.32
>>311
ダイヤルアップとかで最初の接続に時間がかかるから ping でネットワーク接続してから、おもむろに目的のアプリケーションで接続するって言うのがあったような気がする
322名無しさん@お腹いっぱい。:2015/02/10(火) 10:03:19.02
スクリプト化してると問題があったとききりわけが必要だから
ping打っているかどうか確認してるんじゃ?

>>321
ちょっと違うけど自動切断有効にしてて切れてほしくないときに
ping打ちっぱなしにしてたな
323名無しさん@お腹いっぱい。:2015/02/10(火) 10:06:07.01
>>318

差分は取得しないのか
324名無しさん@お腹いっぱい。:2015/02/10(火) 10:12:53.45
皆、同じようなことやってるんだなw
325名無しさん@お腹いっぱい。:2015/02/10(火) 10:32:51.28
>>322
切り分けといっても、pingが成功したらネットワーク的に問題ないとは言えないわけで……
対話環境で作業している時だったら、お手軽だから「まずping打ってみるか」というのは
分かる気がするけど、スクリプトの場合では中途半端なように思えます。

「ICMPは通るね」というのをスクリプト中から確認できても、それほど嬉しくはないよね?
326名無しさん@お腹いっぱい。:2015/02/10(火) 10:41:38.26
そういえばhttps対応とかが面倒で結局wget丸投げ取り込みとかに逃げてたりするけど
正しい汚染チェックってどうするべきなんだろう?
327名無しさん@お腹いっぱい。:2015/02/10(火) 11:00:13.65
>>325
ネットワークよりむしろ、ローカル的な問題がない事が確認できるんじゃないかな?
328名無しさん@お腹いっぱい。:2015/02/10(火) 11:05:04.42
>>327
どういうこと?
329名無しさん@お腹いっぱい。:2015/02/10(火) 11:07:57.10
>>321
なるほど。
自分ではそういう環境でスクリプトを走らせたこと無いけど、必要性は理解できる気がする。
330名無しさん@お腹いっぱい。:2015/02/10(火) 11:11:26.56
でも今どきそんな環境あんまりないよなぁ
331名無しさん@お腹いっぱい。:2015/02/10(火) 11:11:41.05
>>328
ネットワークの問題:待つ
ローカルの問題:別の方法を試す
332名無しさん@お腹いっぱい。:2015/02/10(火) 11:21:02.15
>>331
すみません、日本語でお願いします
333名無しさん@お腹いっぱい。:2015/02/10(火) 11:23:49.29
自力で何とかなる問題とならない問題を切り分ける。
334名無しさん@お腹いっぱい。:2015/02/10(火) 11:41:25.85
pingで切り分けになるか?
335名無しさん@お腹いっぱい。:2015/02/10(火) 11:43:10.44
F5アタック状態でいいならどうでもいいかもしれないな。
336名無しさん@お腹いっぱい。:2015/02/10(火) 12:28:31.34
pingはじくところもあるから
URL次第
337名無しさん@お腹いっぱい。:2015/02/10(火) 12:55:57.86
>>311
ベテランなら、サーバ自体死んでるか、sshdが動いてない(かfirewall等)
の切り分けを考慮してるんだろう。実際に使うスクリプトとしては正しい
338名無しさん@お腹いっぱい。:2015/02/10(火) 13:20:41.45
>>323
差分は専ブラで取得です^^;
339名無しさん@お腹いっぱい。:2015/02/10(火) 13:36:06.53
>>338
差分なんて git 以外にも diff や vimdiff 等あるからやってみたら?
340名無しさん@お腹いっぱい。:2015/02/10(火) 14:15:44.40
いやレンジ指定じゃないかと?
341名無しさん@お腹いっぱい。:2015/02/10(火) 19:43:43.25
>>299
alias も出たから、ついでに...

自分は ${HOME}/bin に、スクリプトとして書いているが、場所はどこでもいいから
どこかにまとめて保存しておけばいいのでは?例えば、~/bin/oneliner/ 等

それらのファイルは、grep で検索も出来るし、それで見つかった script を編集するなら
history -r script で履歴に読み込んで、コマンドライン上で編集が出来る

(あと、あんまり使わないけど) bash zsh で、Ctrl-x Ctrl-e で editor を呼び出して
読み込んで実行とか
342名無しさん@お腹いっぱい。:2015/02/10(火) 22:45:11.06
>>341
> (あと、あんまり使わないけど) bash zsh で、Ctrl-x Ctrl-e で editor を呼び出して
> 読み込んで実行とか
Ctrl+rでヒストリ検索でいいんじゃない?
343名無しさん@お腹いっぱい。:2015/02/10(火) 23:29:41.64
history -r script を bash の話と断って無かった。失礼しました

>>342
スクリプトファイルから履歴に読み込むと、行毎に履歴の最後に追加されるから
previous-history Ctrl-p (もしくは↑)で十分だけどね
344名無しさん@お腹いっぱい。:2015/02/14(土) 04:53:42.98
^string1^string2^
!n:gs/string1/string2/
!-n

等 bash で履歴を利用するものは shopt -s histverify すれば確認・編集が出来て便利だよね
345名無しさん@お腹いっぱい。:2015/02/16(月) 18:20:07.18
スレ違いスマソ

どうなっちゃうの、2ちゃん?
なんか、ツイッターとかFBみたくなるのか?
極端に利用者減ると思うけどな。

1 :ニライカナイφ ★ 転載ダメ&#169;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/
346名無しさん@お腹いっぱい。:2015/02/16(月) 18:27:38.42
いざとなったらこれだな
テキスト広告除去
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'
347名無しさん@お腹いっぱい。:2015/02/16(月) 18:50:00.38
スレ違いだとわかってるならよそでやれ
348名無しさん@お腹いっぱい。:2015/02/16(月) 19:15:37.65
スレ的にはxdotoolとかでブラウザ操作すれば問題ないのではないだろうか?
349名無しさん@お腹いっぱい。:2015/02/21(土) 14:32:41.68
【実況】向かいの部屋に住んでいる女子高生が窓を開けたままオナニーしているんだが
http://hayabusa6.2ch.net/test/read.cgi/network/1387872458/
350名無しさん@お腹いっぱい。:2015/02/24(火) 13:40:24.51
質問です。
あるテキストの中に含まれる、特定のキャラクタの数を数え
たいのですが、すごく簡単にできそうで、わからなくて
悩んでおります。grepでもwcでもできそうで、できません。
ご教授お願いします。
351名無しさん@お腹いっぱい。:2015/02/24(火) 14:17:32.87
>>350
全キャラクタの後ろに改行を入れて、grep 'キャラクタ' | wc -lで数えられる
改行を入れるのはOSによって面倒だったりするが。。。
352名無しさん@お腹いっぱい。:2015/02/24(火) 14:32:17.30
>>350
キャラクタ A を数える場合、

tr -dc A | wc -c

>>351
すみませんが詳しい方のみ回答をお願いします
353名無しさん@お腹いっぱい。:2015/02/24(火) 14:40:49.91
wwwww


全キャラの後ろ(要するに1文字ごと)に改行は必要なくて
数えたいワード単位に改行入れて(sed)、grep、wcだね

sedあまり好きじゃないからperlならこう

perl -pe ’s/foo/foo¥n/g’ file | grep foo | wc -l

スクリプトにしてfooを引数にすりゃ汎用的に使える
354名無しさん@お腹いっぱい。:2015/02/24(火) 17:15:08.03
堂々とbashを使うお(´・ω・`)
355名無しさん@お腹いっぱい。:2015/02/24(火) 17:53:14.61
>>352で答は出てるけど、どーしても grep を使いたいなら
grep -o foo | wc -l

351とか353とか無駄すぎ。
353は1行に1回しかマッチしないことが保証できるので grep | wc ではなく、grep -c でよい。
356名無しさん@お腹いっぱい。:2015/02/24(火) 19:23:17.83
2chMateで質問を見て、これはこのスレで学んだgrep -oを披露するしかないと
意気込んで帰宅してスレ開いたら>>355に書かれていたでござる
357名無しさん@お腹いっぱい。:2015/02/24(火) 19:55:49.20
>>355
"A" が抜けてるんじゃ?

$ grep -o A foo | wc -l
358名無しさん@お腹いっぱい。:2015/02/24(火) 20:01:41.72
せやな
359名無しさん@お腹いっぱい。:2015/02/24(火) 20:07:04.10
せやろか
360名無しさん@お腹いっぱい。:2015/02/24(火) 21:34:48.78
>>350
ネタ的な解答です

echo $(( $( sed -e 's/[^で]//g; s/で/ + 1/g' data ) ))
361名無しさん@お腹いっぱい。:2015/02/24(火) 22:11:45.11
>>357
>>353ではfooが検索キーワードになっていることを受けてなんじゃね
ファイル名なりパイプ入力は実際に実行するには必要だが
言いたいことに焦点を当てるためと解釈すればおk
362名無しさん@お腹いっぱい。:2015/02/24(火) 22:42:20.20
昔はWindowsが好きでUnixは嫌いだったが、最近、シェルプログラミングの真髄、Unixの真髄が
身に染みてきた。VBSを仕事でやってるが、何せ長い。シェルスクリプトだと数十行で済むようなことが
何千行とかになってしまう。

Unixのコマンド自体がワンライナーで済んでしまうことも多いが、
シェルスクリプトや正規表現、Unixのアプリを組み合わせて20行、30行もかけば
かなりの処理ができるな。

ただし、VBSのすごいところは、GUIまでわりと自由に操作できることだな。

UnixもWindowsもそれなりに何かすばらしさを感じる。
363名無しさん@お腹いっぱい。:2015/02/24(火) 22:43:45.95
文字ではなく単語単位だと
マッチ部分が重複するケースもあると思うけど
そういう時はどう書けばいいんだろ

$ echo ABC | grep -Po '..'
AB
$ echo ABC | grep -Po '.(?=.)'
A
B

$ echo ABC | ?
AB
BC
が欲しい
364名無しさん@お腹いっぱい。:2015/02/24(火) 22:45:35.14
真髄ねー
365名無しさん@お腹いっぱい。:2015/02/24(火) 23:11:13.94
>>362
>>348とかどうよ?
366名無しさん@お腹いっぱい。:2015/02/25(水) 10:15:56.15
>>355
お前は4時間以上かけてそんな回答しかできないのか
367名無しさん@お腹いっぱい。:2015/02/25(水) 10:36:23.41
20時間以上かけた回答に期待
368名無しさん@お腹いっぱい。:2015/02/25(水) 21:30:04.01
str='>>350 ネタ2です。
ところで、あるテキストや特定のキャラクタは utf-8 であると考える必要性は有りや無しや。
神に問う。信頼は罪なりや。 果たして、無垢の信頼心は、罪の源泉なりや。'

echo "$str" | grep -o . | LC_COLLATE=C sort | uniq -c
echo "$str" | perl -0777 -ne 'print s/。//g,"\n"'
369名無しさん@お腹いっぱい。:2015/02/25(水) 22:36:30.27
>>365
楽しそうだね。でも、GUIの操作をすべてコマンドからやりたいよ。
オブジェクトでも作る?
370名無しさん@お腹いっぱい。:2015/02/25(水) 22:47:56.06
xteじゃダメ? ドラッグの仕方はよくわからんが。
371名無しさん@お腹いっぱい。:2015/03/02(月) 23:05:19.70
明日以降は、ここを見る回数も減るかもしれない。みなさん一応さようなら
ネタは不評だったけど、最後かもしれないし >>363 にも答えておこう。
perl と ruby で

#!/bin/sh
echo '商工会議所長' |
 perl -ne 'while( /(?=(会議所|所長))/g ){ print $1, "\n"; }'

echo '商工会議所長' |
 ruby -Ku -ne 'puts $_.scan( /(?=(会議所|所長))/ ).join( "\n" )'
372名無しさん@お腹いっぱい。:2015/03/02(月) 23:11:47.85
>>348で落としてdat変換位、スクリプトで出来ないかな?
373名無しさん@お腹いっぱい。:2015/03/03(火) 03:08:17.32
>>371
何がなんだか…w
374名無しさん@お腹いっぱい。:2015/03/03(火) 08:07:50.39
>>371って問題がわかってないよな
「aaaaaaaaaa」に対して「aa」が
どうマッチするかってことなんだけど
なんで会議所と所長になっちゃうんだろうかw
脳味噌足りてなさそう
375名無しさん@お腹いっぱい。:2015/03/03(火) 17:30:06.70
$ echo 'ABC' | perl -ne 'while( /(?=(AB|BC))/g ){ print $1, "\n"; }'
AB
BC

じゃまずいのかな。
376371:2015/03/04(水) 06:55:50.72
>>375
>>374 に対しての発言の様にも取れるけど、>>371 に対しての発言ならば...
それも試した上で、書いてる

無反応だったけど >>368 で utf-8 である事を考えていないものが有る事を指摘したので
引き続き、>>363 のお題
> 単語単位だとマッチ部分が重複するケース
に沿って、日本語に入れ替えただけ
377名無しさん@お腹いっぱい。:2015/03/04(水) 13:23:38.19
>>363は任意のテキストに使える記述を期待してるんじゃないだろうか
所長と会議所限定じゃなく
378363:2015/03/04(水) 22:12:28.21
>>377
いや…
スレタイ的にLL言語に頼らないやり方を期待してた
379名無しさん@お腹いっぱい。:2015/03/04(水) 22:57:35.29
スレとあんま関係ないんだけど、
みんなどんな時も/bin/sh縛りなの(´・ω・`)?

それとも割と躊躇なく、bashとかzsh使うの(´・ω・`)?

使う人はどういう線引きで/bin/shと高機能シェルを使い分けてるの(´・ω・`)?
380名無しさん@お腹いっぱい。:2015/03/04(水) 23:04:13.67
スレと関係ないからよそでやってくれる?
381371:2015/03/06(金) 06:31:41.84
>>353 でも 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
 }
'
382名無しさん@お腹いっぱい。:2015/03/06(金) 06:33:59.92
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
383名無しさん@お腹いっぱい。:2015/03/06(金) 06:36:18.16
使用例

$ echo 'abc' | ./testsed 'ab\|bc'
ab
bc

$ echo 'abc' | ./testbash 'a.|b.'
ab
bc
384371:2015/03/06(金) 07:34:31.86
訂正
全般的に変数代入の箇所のクォート
var="var"


#!/bin/bash
re1="${1:-会議所|所長} "
385名無しさん@お腹いっぱい。:2015/03/06(金) 08:05:27.13
読む気もおきないです本当にありがとうございました
386名無しさん@お腹いっぱい。:2015/03/06(金) 09:15:28.00
371って問題が理解できてない残念な子だな
387名無しさん@お腹いっぱい。:2015/03/08(日) 00:18:10.47
>>379
個人用とか、そのマシンに特化したスクリプトならbashだろうがzshだろうが何でもアリだけど
普段から/bin/sh縛りにしておくと、違うマシンでもスクリプトが書けるようになるぞ
388名無しさん@お腹いっぱい。:2015/03/08(日) 03:45:15.37
と思うだろ。
でも実際は変な癖がそれぞれついてるんで、あまり役に立たない。
389名無しさん@お腹いっぱい。:2015/03/08(日) 05:35:53.00
bash拡張を使うなら#!/bin/bash
390名無しさん@お腹いっぱい。:2015/03/08(日) 05:57:27.23
>>389
bashが/bin/にない環境もあるで
391名無しさん@お腹いっぱい。:2015/03/08(日) 07:00:32.87
/bin/tcsh縛りで書いてるw
392名無しさん@お腹いっぱい。:2015/03/08(日) 08:29:58.08
busyboxのsh縛りが実用的。

#!/sbin/busybox sh

と書くこと。
393名無しさん@お腹いっぱい。:2015/03/09(月) 01:03:57.32
>>391
害悪。
君個人しか絶対使わないマシン以外は触らないで。
394前スレ119:2015/03/11(水) 18:57:08.87
前スレ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

に置換したいのですがどうすればできますか?
よろしくお願いします。
395前スレ119:2015/03/11(水) 19:13:00.82
追加で申し訳ないです。hoge部はhoge1、hoge2、piyo00_piyo01など入り乱れてるのが
同じtree.txt中に混在している状況です。
数字の部分も

01_{01..07} #(実際は7行ある)、
...
04_{01..04} #(これも4行ある)

になっているブロックもあったりしてかなりヤヤコシイのですが、
[(連番になっている数字)以外のところが同じ行]を検出して数字を{}でまとめたい感じです。
3000行あって手作業は泣きそうなので、エレガントな方法をご教授いただければ幸いです。
{01..04}_{01..07}とする必要は無いです。
よろしくお願いします。
396名無しさん@お腹いっぱい。:2015/03/11(水) 19:16:18.16
そういうのはシェルで書きたくないな
397名無しさん@お腹いっぱい。:2015/03/11(水) 19:54:30.56
とりあえずソートしようぜ
398名無しさん@お腹いっぱい。:2015/03/11(水) 20:19:19.48
>>396
何で書くの(´・ω・`)?
399名無しさん@お腹いっぱい。:2015/03/11(水) 20:27:02.77
perlでもrubyでもpythonでも好きなのでいいよ
400名無しさん@お腹いっぱい。:2015/03/11(水) 20:48:55.55
>>394,395
ご自分が言っているように、まず
>[(連番になっている数字)以外のところが同じ行]を検出して
これをする。たとえば次のように
sed -e 's/_[0-9][0-9]_/_%%_/' tree.txt | sort | uniq
これで「連番になっている数字以外のところが同じ行」をパターン化できる
そしたら、そのそれぞれのパターンで grep tree.txt して、sort -n し、
head -n 1 と tail -n 1 で連番の最初と最後の値を切り出す

こんな感じで行けないかな
401名無しさん@お腹いっぱい。:2015/03/11(水) 20:58:26.70
なんのアイデアもなくすまんが、連番かどうか見るのがめんどくさそうですね
402名無しさん@お腹いっぱい。:2015/03/11(水) 23:14:35.24
すまん
問題が全然理解出来ない
誰か問題を解説してくれ
403名無しさん@お腹いっぱい。:2015/03/11(水) 23:20:28.51
もともとは韓国領だったが、
日本の植民地支配から、
日本が勝手に領有権を主張しだした。
現在は国際的にも韓国領と認識されている。
404名無しさん@お腹いっぱい。:2015/03/11(水) 23:54:15.14
北朝鮮のことか。
405名無しさん@お腹いっぱい。:2015/03/12(木) 00:03:26.06
理解できないなら無理に答えようとしなくていい
406名無しさん@お腹いっぱい。:2015/03/12(木) 01:56:20.20
独島は韓国領だよ。
やつらの主張の誤りは、独島=竹島だと言張ってるところ。
独島は竹島だとは別の島だよ。
407名無しさん@お腹いっぱい。:2015/03/12(木) 02:02:58.54
石島とか言ってたソビエトみたいな島の事?
408名無しさん@お腹いっぱい。:2015/03/12(木) 02:46:00.10
>>402
Bashのブレース展開の逆がやりたいってことかと
409名無しさん@お腹いっぱい。
perlのモジュールで
http://search.cpan.org/~vvu/Compress-BraceExpansion-0.1.7/lib/Compress/BraceExpansion.pm
てのがあった
このままじゃ使いものにならんけどね