シェルスクリプト総合 その24at UNIX
シェルスクリプト総合 その24 - 暇つぶし2ch1:名無しさん@お腹いっぱい。
14/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。
  URLリンク(src.opensolaris.org)
  URLリンク(heirloom.sourceforge.net)
・csh/tcshのシェルスクリプトは推奨されません。
 (理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
 「そういうのはperl使いましょう」と回答するのはやめましょう。
 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その23
スレリンク(unix板)

2:名無しさん@お腹いっぱい。
14/11/11 01:00:47.57 .net
乙です

3:テンプレ ◆01VkPKFOHeoR
14/11/11 03:40:09.81 .net
ああ、次スレをいつ立てようかとタイミングを見ていたが
次スレ立ったか...

一応前スレでテンプレ書いた手前、書き込んでおきます

4:テンプレ ◆01VkPKFOHeoR
14/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
14/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 のシェルスクリプトは推奨されません。理由は下記を参照
 URLリンク(www.speech-lab.org)
9. cat file|すんなハゲ
 a. 詳細は "Useless Use of Cat" UUOC で検索して下さい
 b. 有用な場合も有ります Useful use of cat(1) 英文
  URLリンク(www.in-ulm.de)

□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
14/11/11 03:43:24.34 .net
□E. 学習用テキスト
1. Bourne Shell自習テキスト ( 1993年 ) pdf お薦め
 URLリンク(lagendra.s.kanazawa-u.ac.jp)
 URLリンク(ayapin.film.s.dendai.ac.jp)
2. シェルを使おう - 導入からプログラミングまで - ( 2002年 )
 URLリンク(www.netfort.gr.jp)
3. UNIX FAQ LIST
 URLリンク(www.nurs.or.jp)

□F. 参考リンク
1. 可搬性関連
 a. autoconf マニュアル 移植性のあるシェルプログラム
  URLリンク(www.gnu.org)
  URLリンク(www.geocities.jp)
 b. Portability talk [Bash Hackers Wiki] 英文
  Obsolete and deprecated syntax も見る価値有り
  URLリンク(wiki.bash-hackers.org)
 c. How to make bash scripts work in dash 英文
  URLリンク(mywiki.wooledge.org)
 d. DashAsBinSh 英文
  URLリンク(wiki.ubuntu.com)
 e. Portable Shell Programming 英文
  URLリンク(www.in-ulm.de)

7:テンプレ ◆01VkPKFOHeoR
14/11/11 03:44:12.46 .net
2. POSIX
 The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2013 Edition 英文
 URLリンク(pubs.opengroup.org)
3. Traditional Bourne Shell 関連
 a. The Traditional Bourne Shell Family History and Development 英文
  URLリンク(www.in-ulm.de)
 b. BourneShell / Where does the Bourne shell live? 英文
  URLリンク(mywiki.wooledge.org)
 c. The Heirloom Bourne Shell 英文
  URLリンク(heirloom.sourceforge.net)
4. マニュアル
 a. The Base Specifications Issue 7, 2013 Edition 英文
  URLリンク(pubs.opengroup.org)
 b. FreeBSD 日本語マニュアル検索
  URLリンク(www.jp.freebsd.org)
 c. JM Project (Japanese)
  URLリンク(linuxjm.sourceforge.jp)
5. FAQ 等
 a. UNIXの部屋 ( 2011年 )
  URLリンク(x68000.q-e-d.net)
 b. Linux JF (Japanese FAQ) Project
 URLリンク(linuxjf.sourceforge.jp)
 c. Advanced Bash-Scripting Guide 英文
  URLリンク(www.tldp.org)
 d. Unix Programming FAQ 日本語訳 ( 2000年 )
  URLリンク(www.race.u-tokyo.ac.jp)

8:名無しさん@お腹いっぱい。
14/11/11 03:45:49.28 .net
6. ツール
 a. web tool です。Vim syntastic や Emacs の Flycheck でも使えます
  ShellCheck
  URLリンク(www.shellcheck.net)
 b. vim 用 syntastic
  URLリンク(github.com)
 c. checkbashisms も使用してチェック duggan/shlint GitHub
  URLリンク(github.com)

□G. 前スレ
1. ☆シェルスクリプトを勉強するにあたって☆
 スレリンク(unix板)
2. 便利なシェルスクリプト見せろ
 スレリンク(unix板)
3. シェルスクリプト総合 その1
 スレリンク(unix板)

中略。検索して下さい

4. シェルスクリプト総合 その23
 スレリンク(unix板)

9:テンプレ ◆01VkPKFOHeoR
14/11/11 03:46:48.40 .net
□H. 関連スレ
1. sed
 スレリンク(unix板)
2. 正規表現
 スレリンク(unix板)
3. Regular Expression(正規表現) Part13
 スレリンク(tech板)
4. Perlについての質問箱 63箱目
 スレリンク(tech板)
5. ECMAScript デス 4
 スレリンク(tech板)
6. Rubyについて Part49
 スレリンク(tech板)
7. Pythonのお勉強 Part50
 スレリンク(tech板)
8. 【node.js】サーバサイドjavascript 2【Rhino】
 スレリンク(tech板)

□I. 現在評価待ち: X.n は予定した追加先。主にスレ立て人の判断保留用。

10:テンプレ ◆01VkPKFOHeoR
14/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年 )
  URLリンク(www.example.net)

| テンプレートの変更案や、お勧めのリンク、本等が有りましたら、
V あ、張り切って~、どうぞ~! 案じゃ無くてつぶやきでも、どうぞ~!

11:名無しさん@お腹いっぱい。
14/11/12 04:59:38.71 .net
シャナスクリプトはまだですか?

12:名無しさん@お腹いっぱい。
14/11/12 07:18:57.54 .net
シャロスクリプトもまだです

13:名無しさん@お腹いっぱい。
14/11/12 13:25:09.66 .net
そういえば
コート脱いだらハワイのミポリソ萌えスクリプトが
サーバのどっかに転がってたかもなぁw

14:名無しさん@お腹いっぱい。
14/11/12 23:08:52.17 .net
前スレで長テンプレを提案してた人スレ立ったらテンプレそのままでざまぁwww
とか思ってたらしっかり記載していたでござる

なんか文面の雰囲気変わったな、もっと堅い感じだった気がするが

15:名無しさん@お腹いっぱい。
14/11/13 07:09:24.77 .net
>>14
変えてないけどなあ
意見聞く際になるべく中立、丁寧語で書いたから、そういう印象なのかな?

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

シェルスクリプト総合 その1 からずっと最近までは
「(Rubyや)awkまたはperlの方が適した処理にはそちらを使いましょう。」だけだった

16:名無しさん@お腹いっぱい。
14/11/16 22:28:48.41 .net
お勧めの shell を教えて下さい。

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

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

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

どうぞ宜しくお願い致します。

17:名無しさん@お腹いっぱい。
14/11/16 22:34:23.69 .net
>>16 自己フォローです。

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

おまえら! shell は何を使っているんですか?
スレリンク(unix板)

お邪魔して申し訳ありませんでした。

18:名無しさん@お腹いっぱい。
14/11/17 00:19:12.19 .net
お、おう

19:名無しさん@お腹いっぱい。
14/11/17 06:46:29.31 .net
ログインシェルとスクリプトのシェルを一致させる必要は別にないのになぁ…

20:名無しさん@お腹いっぱい。
14/11/17 08:15:15.50 .net
ログインシェルはzshでスクリプト書くときはbashかな

21:名無しさん@お腹いっぱい。
14/11/17 08:20:16.99 .net
ログインシェルもスクリプトもashだ

22:名無しさん@お腹いっぱい。
14/11/17 08:52:41.49 .net
Bシェル系同士なら一致させなくても良い

23:名無しさん@お腹いっぱい。
14/11/17 14:56:35.93 .net
スクリプトは ash か dash

24:名無しさん@お腹いっぱい。
14/11/17 22:07:53.32 .net
z750sh3

25:名無しさん@お腹いっぱい。
14/11/18 13:45:16.57 .net
shで無駄にがんばる
いやなんとなく続けてるだけか

26:名無しさん@お腹いっぱい。
14/11/18 17:45:34.74 .net
/bin/sh でがんばっているよ
実体が ash だったり
dash へのリンクだったりするだけでw

27:名無しさん@お腹いっぱい。
14/11/18 17:50:06.98 .net
がんばるってほどのことかな
スクリプト書く労力は他のシェルでもあんま変わらんでしょ?

28:名無しさん@お腹いっぱい。
14/11/18 18:04:52.35 .net
ん? ログインシェルを/bin/shで頑張るって話でしょ?
補完なし、ヒストリーなし、aliasなしで。

29:名無しさん@お腹いっぱい。
14/11/18 18:09:15.90 .net
スクリプトスレだからスクリプト動かす話だよ

30:名無しさん@お腹いっぱい。
14/11/18 18:24:14.49 .net
>>19 の、ログインシェルとスクリプトのシェルを一致させる必要があるかどうか
という話から来てるから、
ログインシェルの話だろ

31:名無しさん@お腹いっぱい。
14/11/19 20:36:46.43 .net
emacsキーバインドのtcshでログインして、viでashスクリプト書いてるわ。

32:名無しさん@お腹いっぱい。
14/11/20 21:39:29.05 .net
>>28
ashはファイル補完もヒストリー呼び出しもある。
aliasなんてうんこ。functionの方が強力。

33:名無しさん@お腹いっぱい。
14/11/21 05:09:42.89 .net
>>32
それはFreeBSD拡張のashだね。

34:名無しさん@お腹いっぱい。
14/11/21 16:11:47.88 .net
スレ違いっぽいので何だがw
ログインシェルは zsh

35:名無しさん@お腹いっぱい。
14/11/21 16:14:13.45 .net
>>33
大抵emacsのshell-modeで使うので、ヒストリやコンプリーションは
なくてもそれほど困らない。

36:名無しさん@お腹いっぱい。
14/11/21 19:51:04.45 .net
もういっそログインシェルをemacsにしろよw

37:名無しさん@お腹いっぱい。
14/11/21 19:58:39.53 .net
ログインシェルを遊びでviにしてみたことならある。
その状態でログインしたviからシェルエスケープしようとすると
vi変数でshell=vi状態になってるのでシェルのつもりでさらにviが起動されてハマる。

38:名無しさん@お腹いっぱい。
14/11/21 20:28:57.59 .net
emacsをdisplay managerにしたようなOSがあったな。

39:名無しさん@お腹いっぱい。
14/11/21 20:41:52.18 .net
Oberon?

40:名無しさん@お腹いっぱい。
14/11/21 20:53:09.31 .net
apollo domain

41:名無しさん@お腹いっぱい。
14/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:名無しさん@お腹いっぱい。
14/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
14/11/25 13:39:35.78 .net
>>42
すごい!できました。
ありがとうございました!

44:名無しさん@お腹いっぱい。
14/11/25 13:46:29.21 .net
もう答えが出ちゃってますけど rev コマンドでも行けます

$ for val in $(rev <<< "$VLIST"); do echo $val; done

45:名無しさん@お腹いっぱい。
14/11/25 13:56:09.14 .net
tac便利、自分も使ってる

46:名無しさん@お腹いっぱい。
14/11/25 13:57:16.68 .net
>>45
revだと、2桁以上の数字の時 数値の桁が入れ替わるので不可。

12 13 14 -> 41 31 21 みたいに

47:名無しさん@お腹いっぱい。
14/11/25 20:47:40.16 .net
tac 知らなかったが便利そうだ。

48:名無しさん@お腹いっぱい。
14/11/25 21:00:07.87 .net
良かった。知らないのは俺だけじゃなかったんだなw
GNU 方面は、他にも便利なコマンドがいろいろありそう・・・
(さすがに date コマンドで日付演算できるのは知ってた)

49:名無しさん@お腹いっぱい。
14/11/25 21:25:54.46 .net
とりあえずcoreutilsに入ってるものは全部覚えておこうぜ
100個ぐらいしかないんだからさ

50:名無しさん@お腹いっぱい。
14/11/25 21:53:35.67 .net
GNU Coreutils Cheat Sheet
URLリンク(www.catonmat.net)

51:名無しさん@お腹いっぱい。
14/11/26 00:18:13.73 .net
tac知ってたけど有効な使い道が見いだせないでいた
しかし名前のセンスいいよな

52:名無しさん@お腹いっぱい。
14/11/26 00:36:12.96 .net
slがtacの仲間だと思って入れた時の脱力感

53:名無しさん@お腹いっぱい。
14/11/26 06:02:33.63 .net
>>46
要素ごとにもっかいrevで

54:名無しさん@お腹いっぱい。
14/11/26 06:28:19.23 .net
どうせまたBash shockのようにCoreutils shockが起こるんだぜ?
やめておけよw

55:名無しさん@お腹いっぱい。
14/11/26 06:42:34.79 .net
tac使わずに標準コマンドまたは内部コマンドだけでやれ、というのがいい詰めスクリプト問題になるなぁ。

56:名無しさん@お腹いっぱい。
14/11/26 06:48:48.66 .net
再帰すればラクショー

57:名無しさん@お腹いっぱい。
14/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:名無しさん@お腹いっぱい。
14/11/26 06:51:47.26 .net
>>56 のあとに再帰すら使ってないラクショーな >>57 が書き込まれた件について

59:名無しさん@お腹いっぱい。
14/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:名無しさん@お腹いっぱい。
14/11/26 12:51:29.43 .net
未熟者のオレに>>57の動きを教えてくだせえ。。。

61:名無しさん@お腹いっぱい。
14/11/26 12:59:26.09 .net
set -x してから >>57 を実行してみると分かると思う

62:名無しさん@お腹いっぱい。
14/11/26 17:31:45.44 .net
>>57
即レスかっけー!これは濡れるw

63:名無しさん@お腹いっぱい。
14/11/26 19:08:42.67 .net
>>57が正統派に思えてくる
素直で余計なことをしていない
逆転と出力で2回forってるのが気にはなるが

64:名無しさん@お腹いっぱい。
14/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:名無しさん@お腹いっぱい。
14/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:名無しさん@お腹いっぱい。
14/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:名無しさん@お腹いっぱい。
14/11/27 03:03:45.58 .net
それだったら

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

でええやん…

68:名無しさん@お腹いっぱい。
14/11/27 03:42:20.68 .net
>>59
bash/zsh なら local 変数使ってこんな感じに

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

最後の改行はどうすべぇ…

69:名無しさん@お腹いっぱい。
14/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:名無しさん@お腹いっぱい。
14/11/27 12:26:34.92 .net
キモい
もっと綺麗にならんかね

71:名無しさん@お腹いっぱい。
14/11/27 13:33:00.01 .net
>>70
毎日凝視して眺める訳じゃないから
動けばいい、安定してどんな場面でも問題が起こらなければいい。
シェルスクリプトなんてそういうレベルのもの
しょせん手作業の積み上げだからね。

72:名無しさん@お腹いっぱい。
14/11/27 14:14:44.52 .net
「コードが汚くても安定して動けばいい」なんてのは
他人のコードをメンテしたり機能追加したことのない奴が言うセリフ

73:名無しさん@お腹いっぱい。
14/11/27 14:31:21.58 .net
継続してメンテしなきゃいけないスクリプトもあるし
一回動けばそれでいい使い捨てのスクリプトもある
それだけの話っしょ

74:名無しさん@お腹いっぱい。
14/11/27 14:32:04.95 .net
>>68,69 は再帰を知っていれば分かりやすいと思うけどなぁ

75:名無しさん@お腹いっぱい。
14/11/27 14:43:04.36 .net
再起知らないプログラマなんて存在しないだろ

76:名無しさん@お腹いっぱい。
14/11/27 15:06:22.08 .net
>>72
自分しか使わないマシンでも他人にメンテをお願いする
前提で書かないとならないのかい?
むしろメンテ側の人間には全く関係ない話しなんだが。

77:名無しさん@お腹いっぱい。
14/11/27 15:08:35.87 .net
>>76
一ヶ月前の自分は他人と思えって諺があってだな
個人的には自分のコードを汚く書いてしまったせいで泣くはめになったことも良くある

78:名無しさん@お腹いっぱい。
14/11/27 15:12:04.96 .net
いくらか使いこなせるようになったPerlerによくあった

79:名無しさん@お腹いっぱい。
14/11/27 15:23:18.84 .net
>>77
良い師匠に巡り会ったじゃない。
もし1ヶ月前の自分が完全無欠なら精進の可能性を断たれるな。

80:名無しさん@お腹いっぱい。
14/11/27 17:23:22.21 .net
数年前にキレイに書いたつもりのスクリプトでもメンテ(改造)めんどいお

81:名無しさん@お腹いっぱい。
14/11/27 17:40:12.56 .net
保身のため、コードはなるべく汚く、自分しか読めないように書くこと。リストラ対策。

82:名無しさん@お腹いっぱい。
14/11/27 18:27:07.18 .net
それは辞めたくなったときに困る

83:名無しさん@お腹いっぱい。
14/11/27 19:50:57.59 .net
>>81から>>82でなんか笑った

84:名無しさん@お腹いっぱい。
14/11/28 00:13:06.85 .net
>>80
書いた「つもり」だからだろ

85:名無しさん@お腹いっぱい。
14/11/28 00:35:46.31 .net
数年たちゃ腕もあがるだろうから当時の綺麗でも今の汚いなんだろうな

86:名無しさん@お腹いっぱい。
14/11/28 05:41:19.53 .net
こういっちゃなんだが何年経とうが、何日経とうが
シェルスクリプトに問題が出て治す必要があるなら
最初から書いた方が良いよ、、その時の実力で
最良のものが書ける。
1度書いた流れなら数年経っても頭に残ってるから
高速で仕上がるし、できた物を比べても大した違いは無い事も多い。

駆け出しの頃の書き物はまったく変わるのかもしれないが
それはそれで、全く変わらないと困るだろ。
過去の駄作に手をいれてジタバタしたって無駄

87:名無しさん@お腹いっぱい。
14/11/28 08:44:15.84 .net
使い捨てのつもりだったのに、長期にわたって使われた上に
「これこういう風に変えられない?」とか言われて白目になったことはある。
もちろん一般化できる話じゃないとは思うけど。

88:名無しさん@お腹いっぱい。
14/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:名無しさん@お腹いっぱい。
14/11/28 12:22:58.74 .net
\rと^Mは同じでCR。
\nと^Jは同じでLF。
CRとLFの違いは自分で調べろ。

90:名無しさん@お腹いっぱい。
14/11/28 12:35:54.36 .net
CRはコンデンサと抵抗による時定数回路、
LFは低周波であることはわかりましたが、
そこから先がわかりません、よろしく女教授ください。

91:名無しさん@お腹いっぱい。
14/11/28 12:50:56.72 .net
>>90
CRとLFやタブストップなどは
機械式タイプライター由来なので、一度現物を見れば忘れない
ヤフオクで1000円くらいで手に入るから買ってみるといいよ
私女だけど

92:名無しさん@お腹いっぱい。
14/11/28 13:03:16.65 .net
Macのテキストファイルの改行コードは CR ひとつなんだっけ

93:名無しさん@お腹いっぱい。
14/11/28 13:54:56.36 .net
OSによって開業コード違いますよね。
Linuxは0xJで改行、BSDは0xMで改行しますよね。
どうしてこういう違いができたんでしょう?
簡単に返還する方法はありますか?

94:名無しさん@お腹いっぱい。
14/11/28 14:34:44.34 .net
dos2ux
これってHP依存コマンドだっけ?

95:名無しさん@お腹いっぱい。
14/11/28 14:46:02.61 .net
>>93
ある
ちょっとは調べろよ

96:名無しさん@お腹いっぱい。
14/11/28 15:13:15.53 .net
>>95
改変コピペにかまうな

97:88
14/11/28 20:10:29.27 .net
CRだと最後の文字しか表示しないってことですか?
例えば
a<CR>
b<CR>
だったらbしか表示されないってことですか?

98:名無しさん@お腹いっぱい。
14/11/28 20:11:01.93 .net
aを表示した後に行頭に戻ってbを表示している

99:名無しさん@お腹いっぱい。
14/11/28 20:12:58.92 .net
URLリンク(ja.wikipedia.org)
URLリンク(ja.wikipedia.org)
この辺の話ね。

100:名無しさん@お腹いっぱい。
14/11/28 20:20:08.06 .net
CRだとQを上げられないから、ボルフォロで正帰還かけるか、LCRにするべきだな。

101:名無しさん@お腹いっぱい。
14/11/28 20:30:52.68 .net
>>92
組み込みでもCR改行の場合がある。
LFで良いだろうぜぇ…といつも思うわ

102:名無しさん@お腹いっぱい。
14/11/28 21:00:51.14 .net
なんでこんな反応してんの?

103:名無しさん@お腹いっぱい。
14/11/28 21:47:52.95 .net
反応したら行けない理由は?
>>102に許可が射るのか?

104:名無しさん@お腹いっぱい。
14/11/28 22:03:40.21 .net
改行コードは初心者のころに誰でも一度は通る道だからねえ
その次に通る道はBOM…だったけど最近はWindows触ってないから今どうなってるのか分からん

105:名無しさん@お腹いっぱい。
14/11/28 22:38:41.11 .net
>>102
こんな反応じゃダメ?

106:名無しさん@お腹いっぱい。
14/11/28 23:06:22.07 .net
少し前に某サイトの解析スクリプト作ったときちょっと改行が面倒だった
HTMLはWindowsで作ってるらしくgrepとsedで抽出したあとCRのごみがついてることに気がついた
なのでCR削除したんだけどsambaで共有してるディレクトリに置いていたファイルを
メモ帳で開くことがあってまたぐちゃぐちゃに、まあTeraPadとかで開けばいいんだけど
環境に依存してしまうので再度CRくっ付けて解決したな

107:名無しさん@お腹いっぱい。
14/11/28 23:11:48.20 .net
改行法師ンフフ

108:名無しさん@お腹いっぱい。
14/11/28 23:48:34.23 .net
Macの標準がCRなんだよね

109:102
14/11/29 00:39:08.93 .net
質問内容稚拙だったり、回答後に更に質問したり、
そのあたりから定期的に張られる改変コピペだろうと思っただけなんだが
今回やたらみんな親切だから気になっただけだ

110:名無しさん@お腹いっぱい。
14/11/29 00:48:29.81 .net
いまのとこ改変コピペっぽいのは>>93だけだな

111:名無しさん@お腹いっぱい。
14/11/29 01:05:04.71 .net
改変コピペって・・・いつもこのスレに張り付いてんのかよ

112:名無しさん@お腹いっぱい。
14/11/29 01:37:27.48 .net
$ echo "1\r2"
1\r2

113:名無しさん@お腹いっぱい。
14/11/29 01:49:55.58 .net
$ echo -e "1\r2"

114:名無しさん@お腹いっぱい。
14/11/29 01:50:33.86 .net
$ echo $'1\r2'

115:名無しさん@お腹いっぱい。
14/11/29 06:46:31.93 .net
>>109
おそらくいつものコピペ荒らし
スレリンク(unix板:276番)

116:名無しさん@お腹いっぱい。
14/11/29 09:29:20.23 .net
>>115
その後誘導されてこっちに移動してきた

117:名無しさん@お腹いっぱい。
14/11/29 10:00:47.02 .net
誘導も移動も自作自演

118:名無しさん@お腹いっぱい。
14/11/29 10:56:38.77 .net
たぶんVimスレで誘導した奴==>>102==>>115

119:名無しさん@お腹いっぱい。
14/11/29 11:00:44.61 .net
>>112-114
これいやらしくて自分も引っかかったんだけど
>>112はshで目的の動作をしてbashだとだめなんだよな
自分はシェルがbashでスクリプトはshなんだけど
実行結果が違うから引っかかって結構悩んだ

120:名無しさん@お腹いっぱい。
14/11/29 12:05:12.75 .net
ひどい言いがかりだ

121:名無しさん@お腹いっぱい。
14/11/29 12:07:01.30 .net
まだbashなんか使ってたのかよw

122:名無しさん@お腹いっぱい。
14/11/29 12:12:50.64 .net
鉄腕bash

123:名無しさん@お腹いっぱい。
14/11/29 12:27:45.78 .net
大腕硬爆衝

124:名無しさん@お腹いっぱい。
14/11/29 13:00:19.16 .net
>>119
printfを使うか>>114のように展開するのがいいみたいね
URLリンク(fumiyas.github.io)
URLリンク(mattintosh.hatenablog.com)

125:名無しさん@お腹いっぱい。
14/12/04 14:50:44.76 .net
Xpath形式のデータを整形式にするスクリプト知りませんか?

126:名無しさん@お腹いっぱい。
14/12/05 07:55:18.64 .net
コマンドだけど xmllint

URLリンク(stackoverflow.com)
URLリンク(stackoverflow.com)

127:名無しさん@お腹いっぱい。
14/12/07 12:25:15.01 .net
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:名無しさん@お腹いっぱい。
14/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:名無しさん@お腹いっぱい。
14/12/07 13:35:25.85 .net
>>127
全部まとめて tee して、コマンドは &amp;&amp; でつなげばエラーがあれば途中で打ち切ってくれるよ。

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

130:129
14/12/07 13:37:42.00 .net
amp化けやだー 全角&で書き直すわ

( hoge && hoge2 && hoge3 && hoge4 ) 2>&1 | tee test.log

131:名無しさん@お腹いっぱい。
14/12/07 17:01:01.11 .net
set -eじゃダメなのか?

132:名無しさん@お腹いっぱい。
14/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:名無しさん@お腹いっぱい。
14/12/07 17:16:16.20 .net
>>131

set -e
false | true

echo 'set -e してもパイプ下流が真だと終了しないよw'

134:名無しさん@お腹いっぱい。
14/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:名無しさん@お腹いっぱい。
14/12/11 09:38:51.84 .net
>>86
なんだか勇気づけられた
ありがとう

136:名無しさん@お腹いっぱい。
14/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:名無しさん@お腹いっぱい。
14/12/12 12:30:40.72 .net
>>136

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

で行けるよ。

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

START=`echo $START`
END=`echo $ECHO`
で、代入し直す。

138:名無しさん@お腹いっぱい。
14/12/12 12:34:18.14 .net
ダブルクォートで囲っちゃえばいいんじゃない

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

139:名無しさん@お腹いっぱい。
14/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:名無しさん@お腹いっぱい。
14/12/12 12:44:39.31 .net
>>136
> sedは「,」が未知のコマンドです、と言ってき

これ、START 変数が undef か空っぽ("")なんじゃない?
set -x してからスクリプトを実行してみて確かめたほうがいいよ。

141:名無しさん@お腹いっぱい。
14/12/12 12:45:54.06 .net
エスパーすると $START とかに 全角スペース が入ってるw

142:名無しさん@お腹いっぱい。
14/12/12 12:55:10.57 .net
なるほどw

143:名無しさん@お腹いっぱい。
14/12/12 13:05:14.93 .net
$ printf "foo\nbar\nbaz\n" | sed ",2d"
sed: -e 表現 #1, 文字数 1: 未知のコマンドです: 「,」

144:名無しさん@お腹いっぱい。
14/12/12 14:02:50.73 .net
>>136 です。

やさしきみなさん、コメントありがとうございます。
これからいじくってみて、あとで結果報告いたします。

145:名無しさん@お腹いっぱい。
14/12/12 14:35:13.48 .net
>>136 です。

デバグ用の

echo $START
echo $END

の直後に、

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

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

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

>>139 さんの書かれたprintf文、参考になりました。まずこ
れを試してみるべきでしたね。

146:名無しさん@お腹いっぱい。
14/12/12 14:52:02.24 .net
たぶん後ろに改行が入ってたんじゃないかな
^Mのやつ

147:名無しさん@お腹いっぱい。
14/12/12 15:06:40.30 .net
^Mですか。結構、ネット上には^Mを消すという記事がありますね。
これのことだったのか、がてんいきました。

148:名無しさん@お腹いっぱい。
14/12/12 15:38:25.84 .net
^M だと、
START=`echo $START`
やっても^Mは取れないから、違うと思うぞ

149:名無しさん@お腹いっぱい。
14/12/12 18:17:01.24 .net
シェルスクリプトはXMLのDOM操作のようなことはできないんですか?
あいだに要素を追加したりとか

150:名無しさん@お腹いっぱい。
14/12/12 19:08:12.46 .net
要素って具体的に何?

151:名無しさん@お腹いっぱい。
14/12/12 19:58:42.72 .net
>>149
やればできると思うが、結構面倒だしな

>>150
テキスト要素とかタグ要素とか

152:名無しさん@お腹いっぱい。
14/12/12 20:44:30.25 .net
>>149
xslt使えよ

153:名無しさん@お腹いっぱい。
14/12/13 00:48:34.76 .net
シェルスクリプトで、XMLのDOM操作をしたいってことなのか
「のようなこと」ってあるから別の何かかと思った
使ったことは無いんだけど、XMLgawkが便利そう

154:名無しさん@お腹いっぱい。
14/12/13 03:47:01.58 .net
XML Starletとか

155:名無しさん@お腹いっぱい。
14/12/15 19:52:22.36 .net
dashってのがあったんだ。
知らなかった。。。ash系なのか、ダッシュ島系なのか

156:名無しさん@お腹いっぱい。
14/12/15 20:11:02.18 .net
農家専用プログラミング言語

157:グールドの著作を読むなら原書で
14/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:名無しさん@お腹いっぱい。
14/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:グールドの著作を読むなら原書で
14/12/16 17:23:03.61 .net
>>158
echoコマンドはこういう遣り方じゃないと勝手に改行が入って苦労しました。
!も特殊文字扱いだったということでしょう。
それはさておきいちいちwhoとか名前付けてsetしなくてよいということですね。
こういうプログラムって当時からやってました?
sfcって遅れたキャンパスだったので、他大学の工学部などでは常識でも
あのキャンパスでは非常識ということも多々あるかと思います。
とにかくHi [first name]っていうプログラムを動かしてたのは学内で自分だけでした。
プログラムの全体はLaTeXをエクステンション除いたファイル名だけ打ち込めば
任意のプリンタから自動印刷できるという内容なんですがね。

160:名無しさん@お腹いっぱい。
14/12/16 17:28:04.57 .net
昔話がしたいの?

161:グールドの著作を読むなら原書で
14/12/16 17:38:54.20 .net
他キャンパスでは当時どうだったか知りたいだけ。これってアドミン権限除いた
基本的な構造はAmazon.comなどで金になってる商売だから。

162:名無しさん@お腹いっぱい。
14/12/16 17:51:39.82 .net
1993年ならUNIXとしては遅い方。
どこにでも普通に転がってるスクリプトだし、なんの変哲もないヘボスクリプトの何を評価しろとw

163:グールドの著作を読むなら原書で
14/12/16 17:54:06.78 .net
このスクリプトの特許持っている人ってどの国の何ていう人で取得年は何年?

164:名無しさん@お腹いっぱい。
14/12/16 17:54:28.41 .net
なんで特許持ってる前提になってんの?

165:グールドの著作を読むなら原書で
14/12/16 17:58:23.52 .net
金になるアイデアには特許が付き物でしょう。Amazon.comだって誰かに金払ってるでしょ。

166:名無しさん@お腹いっぱい。
14/12/16 18:23:54.80 .net
もしかして、root権限がなくても/etc/passwdのフルネームフィルドが読める手法がすごい、って言ってるの?
/etc/passwdは一般ユーザーでももともと読めるし、(たとえshadowでもパスワード部分以外は)
NIS使ってるならypcat passwdは一般ユーザーでもできるし。
何の新規性もない。

167:グールドの著作を読むなら原書で
14/12/16 18:38:28.60 .net
>>166
そうではなくて、大したことの無いアイデアが金になることがある、ということを強調している。
Amazon.com等々が誰かに金を払っているのは事実の筈だし。無論アドミン権限の中のプログラム
であってもデータから抜き出す作業は同じ。で、Amazonとかできた当初はHi某とか言ってこなかった
筈なので、そこら辺の経緯を知りたいわけ。日本語では英語名で抜き出すのは日本語名で抜き出す
よりは厄介な筈。他に方法いくらでもあるから。

168:名無しさん@お腹いっぱい。
14/12/16 18:43:25.43 .net
スレ違い。

169:名無しさん@お腹いっぱい。
14/12/16 20:12:06.60 .net
「俺が始めてだ、すげーだろー」は、その時点で主張しなけりゃ何の意味もない

ちなみにBBSにおいてユーザーの識別子として一方向ハッシュを表示する手法を、提唱したのは俺だ。

170:名無しさん@お腹いっぱい。
14/12/16 21:46:14.47 .net
>>167
そこまで知りたいなら調べて報告してくれ
おしえてクンじゃなければね

171:名無しさん@お腹いっぱい。
14/12/17 00:10:11.34 .net
>>167
> Amazon.com等々が誰かに金を払っているのは事実の筈だし。

まず、このソースを出してくれ

172:名無しさん@お腹いっぱい。
14/12/19 14:14:12.27 .net
mksh; MirBSD Korn Shell
ってのがあったんだ。
知らなかった。。。ash系なのか、ダッシュ島系なのか

173:名無しさん@お腹いっぱい。
14/12/23 07:08:11.72 .net
おっさんそんな調子で年越せんのか
しっかりしろ

174:名無しさん@お腹いっぱい。
14/12/25 17:52:08.23 .net
さあ、クリスマスだよ。
学生さんは冬休みに、買ってもらった
Mac, iPhone, android でシェルスクリプトを書いて遊ぼう!

175:名無しさん@お腹いっぱい。
14/12/25 18:54:27.87 .net
買ってもらった?
学生なら自分で買うわ。

生徒や児童なら買ってもらうかも知れんが。

176:あ
14/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 |             |

URLリンク(www.youtube.com)

177:名無しさん@お腹いっぱい。
14/12/26 09:25:20.89 .net
スレ違いかもだけど。。。
cronでスクリプト最速で回すとすると
* * * * * /home/user/hoge.sh
だけど、これ以上の頻度というか速度で実行できないのかな。
無限ループ覚悟で、hoge.shの最後に自分自身をコールするとか。

178:名無しさん@お腹いっぱい。
14/12/26 09:36:37.85 .net
自分自身でまわすならcronからは1回でいいじゃん

179:名無しさん@お腹いっぱい。
14/12/26 09:36:40.46 .net
>>177
何かの待ち受けイベントチェックか?

普通にsleep 1とかしながらループすればいいじゃん。cron必要なし。
自分自身をコールするするのは無駄だからwhile :; do hoge; sleep 1; done で無限ループな。

180:名無しさん@お腹いっぱい。
14/12/26 09:55:10.70 .net
*じゃなく*だ。

181:名無しさん@お腹いっぱい。
14/12/26 10:01:04.07 .net
>>179
そうです、自宅鯖で、smtpからweb、ssh、イベント監視まで
全部やらせてるマシン。あんまとっぴなことすると、落ちそう
なので。sleep入れれば、変な挙動はなくなりそうですね。
感謝!

182:名無しさん@お腹いっぱい。
14/12/26 12:23:03.31 .net
>>179さんの助言をそのまんまパクリ、

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

しかし、良スレですね、ここは。いつも助けていただき感謝です。

183:名無しさん@お腹いっぱい。
14/12/26 12:27:53.31 .net
ここの住人のかたがたは皆さん知ってるだろうけど
今浦島な私には、pgrep、pkillというコマンドが使える
のが素晴らしいと思いました。(最近知った)
なんか昔は、kill -9 `pidof nantoka`とかやってたのが
なつかしいというか。

184:名無しさん@お腹いっぱい。
14/12/26 13:13:19.56 .net
話続けるなら名前欄にレス番入れてよ。

185:名無しさん@お腹いっぱい。
14/12/27 13:16:10.86 .net
>>179
conky使ったりatに登録したりしてまわさなくても、
単純にそれで良かったんだなあ。

186:名無しさん@お腹いっぱい。
14/12/31 06:28:21.74 .net
さあ、大晦日だよ。
学生さんは冬休みに、買ってもらった
Mac, iPhone, android でシェルスクリプトを書いて遊ぼう!

187:名無しさん@お腹いっぱい。
14/12/31 13:02:42.92 .net
iPhoneでどうやって書けるの?

188:名無しさん@お腹いっぱい。
14/12/31 13:58:30.05 .net
URLリンク(ideone.com)

189:名無しさん@お腹いっぱい。
14/12/31 19:47:38.53 .net
書くだけでなく、走らせて結果を見れるやり方
ただ調べた結果だけなので自己責任で

* インターネットブラウザーのjavascript上で走るLinuxで
 URLリンク(bellard.org)

* もしくは、インターネットブラウザーでwebアプリ
 URLリンク(ideone.com)
 URLリンク(www.tutorialspoint.com)

* もしくは、sshで他マシンにアクセス
 試した事はないけど、学習用のFree UNIX Shell Accountsとかもある
 URLリンク(freeshell.org)

* Jailbreak

190:名無しさん@お腹いっぱい。
15/01/01 17:27:22.86 .net
ggl 検索文字列
でw3mを使って検索文字列でググる要にしているのを拡張したい

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

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

オプションとかのガイドラインてある?
例えば -l はリスト(at -l など)で使うとか、多くのコマンドは
引数がない時は -h オプションと同じように簡単な説明がでるとかのメジャーなガイドライン

191:名無しさん@お腹いっぱい。
15/01/01 18:19:12.95 .net
GNUにはあった気がする

192:名無しさん@お腹いっぱい。
15/01/01 18:26:54.79 .net
引数ないときは「クリップボードから」なんて慣習は存在しない。

193:名無しさん@お腹いっぱい。
15/01/01 18:29:20.31 .net
興味があったのでちょっと検索してみた。
ガイドラインというのはわからないが、こんな感じで使われてるね~みたいのなら、

URLリンク(catb.org)

> 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:

URLリンク(www.gnu.org)

> 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:名無しさん@お腹いっぱい。
15/01/01 20:15:18.38 .net
>>191-193
サンキュー

URL先の情報にぴったりのオプション見つからないから
-h を少し書いて後々忘れた時に備えて、
デフォルトでクリップボードで検索、
引数あるときはそれで検索にする

195:名無しさん@お腹いっぱい。
15/01/01 22:28:20.83 .net
両方用意すればいいんじゃない?
自分の名前がgglかgglcかで動作が変わるのも面白そう。

196:名無しさん@お腹いっぱい。
15/01/01 22:31:09.64 .net
名前同じで動作変わるとmanの括弧書きの数字が増えてややこしいみたいな?

197:名無しさん@お腹いっぱい。
15/01/03 21:18:53.70 .net
そういやgetopt(3)ってPOSIXで規定されてるんだね。いまどきの
*BSD, Linuxならlibcで持ってるものなんだな。

とあるソフトがGNUのgetopt.cを同梱しているので消してやりたいと思って
いたんだけど、configureでgetoptの存在チェックしてlibcの方を優先して
使わせるようにするのがいいのかな。

198:名無しさん@お腹いっぱい。
15/01/08 11:56:42.54 .net
「とあるソフト」がGPLなら、一部を削除するのはライセンス違反。

199:名無しさん@お腹いっぱい。
15/01/08 12:01:18.92 .net
>>198
なんで?

200:名無しさん@お腹いっぱい。
15/01/08 12:15:36.60 .net
GPL V3
4. Conveying Verbatim Copies.
5. Conveying Modified Source Versions.

201:名無しさん@お腹いっぱい。
15/01/08 13:17:19.27 .net
>>200
詳しく

202:名無しさん@お腹いっぱい。
15/01/08 18:53:35.81 .net
質問です
22, 32, 33, 45,
12, 47, 78, 44, 32,
...
数字がカンマで区切って700個書いてあるファイルがあります。
一行に数字が何個あるか規則性はありません。
このファイルを読み込んで数字を100個ずつ出力して7枚のファイルを
作りたいと思っています。シェルスクリプトでうまくできますでしょうか。
出力されたファイルには数字が一列で入っているほうがいいです。
お願いします。

203:名無しさん@お腹いっぱい。
15/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:名無しさん@お腹いっぱい。
15/01/08 20:20:07.70 .net
gawk じゃなくてふつーの awk で。

awk -v RS=, '{print $0+0 > int(NR/100)+1 ".txt" }'

205:名無しさん@お腹いっぱい。
15/01/08 20:36:37.66 .net
int((NR-1)/100)+1 じゃないとダメだった。

206:203
15/01/08 20:51:41.18 .net
あ、カンマはいらないのね

207:203
15/01/08 20:56:03.24 .net
なおかつ1列を1行と読み間違えていた(´・ω・`)ショボーン

208:名無しさん@お腹いっぱい。
15/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:名無しさん@お腹いっぱい。
15/01/08 21:43:46.83 .net
awkもsedも出ちまったか

tr -d '\r\n' < file

210:名無しさん@お腹いっぱい。
15/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
15/01/08 21:57:31.95 .net
ミス

tr -d '\r\n' < file | tr ',' '\n' | split -l 100

212:名無しさん@お腹いっぱい。
15/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
15/01/08 22:01:45.08 .net
>>212
お前は俺か

214:名無しさん@お腹いっぱい。
15/01/08 23:07:34.58 .net
/ *, */を改行に変換してhead

215:名無しさん@お腹いっぱい。
15/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:名無しさん@お腹いっぱい。
15/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:名無しさん@お腹いっぱい。
15/01/09 01:59:25.49 .net
211と216を足して

$ grep -o '[0-9]\+' data.txt | split -l 100

218:名無しさん@お腹いっぱい。
15/01/10 02:47:23.50 xezKGq2J7
.net が書き込めなくなったな
とりあえずscから見ているが

219:202
15/01/11 18:59:23.53 .net
>>203-217
ありがとうございます。本当に助かりました。
勉強不足を痛感。向上心を刺激されました。

220:名無しさん@お腹いっぱい。
15/01/14 13:42:56.50 .net
$SEARCH に入れても awkが動いてくれません
{}が引っかかってしまったのだろうか? どうすればよいのだろうか?

while true
do read SEARCH
awk 'BEGIN{RF="---"}/${SEARCH}/' $save_to
done

221:名無しさん@お腹いっぱい。
15/01/14 13:55:03.85 .net
シングルクォートで囲まれてるから置換されないのよ

222:名無しさん@お腹いっぱい。
15/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:名無しさん@お腹いっぱい。
15/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:名無しさん@お腹いっぱい。
15/01/15 10:05:06.27 .net
>>220
awk 'BEGIN{RF="---"}/'${SEARCH}'/' $save_to

225:名無しさん@お腹いっぱい。
15/01/15 12:37:55.02 .net
>>224
thanks!

226:名無しさん@お腹いっぱい。
15/01/15 13:19:56.10 .net
そして、$SEARCHにインジェクションされましたとさ。

227:名無しさん@お腹いっぱい。
15/01/15 18:30:18.23 .net
GNU awk ならこんなのも

awk -v SEARCH="$SEARCH" 'BEGIN{RF="---"}/SEARCH/' $save_to

228:名無しさん@お腹いっぱい。
15/01/20 01:40:59.45 .net
こんな雑誌があることを初めて知った。
なんと月刊で20号以上出ているということにも驚いた。

シェルスクリプトマガジン vol.21
URLリンク(www.amazon.co.jp)
URLリンク(www.usp-lab.com)

229:名無しさん@お腹いっぱい。
15/01/20 05:22:18.17 .net
その雑誌の半分はシェルスクリプト関係ない内容だから相当ネタがないんだろなって思った

230:名無しさん@お腹いっぱい。
15/01/21 01:45:14.76 .net
ツールドフランスの実況が森の景色の解説になってるようなもんか

231:名無しさん@お腹いっぱい。
15/01/22 16:29:19.37 .net
コマンドラインから手入力するとちゃんと動くスクリプトが、cronからだと動かない。
数日悩んだ結果。。。原因はLANGだった

232:名無しさん@お腹いっぱい。
15/01/22 16:32:53.58 .net
ルンゲの罠

233:名無しさん@お腹いっぱい。
15/01/22 16:48:29.41 .net
>>231
まれによくある。

スクリプトの先頭付近でLANGを設定しちゃうことも多いんだけど、Unix的でクールな
ポータビリティのある手法を紹介してくれる偉い人が出てくるのを正座して待ちたい。

234:名無しさん@お腹いっぱい。
15/01/22 17:14:56.12 .net
LANG=C

235:名無しさん@お腹いっぱい。
15/01/23 06:42:51.72 .net
偉い人が
 共通したものは crontab 先頭で、タスク毎のは env NAME=VALUE COMMAND
と答えるか、もうまるっきり答えないと予想した

236:名無しさん@お腹いっぱい。
15/01/23 10:00:16.40 .net
共通したものは crontab 先頭で、タスク毎のは env NAME=VALUE COMMAND

237:名無しさん@お腹いっぱい。
15/01/23 16:52:05.70 .net
偉い人のコピペ北ー!
自演っぽくて、コメントしづらい輪

238:名無しさん@お腹いっぱい。
15/01/23 17:30:03.53 .net
この話はここで終わりって暗に言ってるんだろう

239:名無しさん@お腹いっぱい。
15/01/24 10:11:24.87 .net
LANG=C sl
的な書き方ってどこまで有効なのかな?
bashだけ?

240:名無しさん@お腹いっぱい。
15/01/24 10:23:49.81 .net
>>239
bourne shell でも使える

241:名無しさん@お腹いっぱい。
15/01/24 15:26:45.88 .net
配列の命名規則ってある?

242:名無しさん@お腹いっぱい。
15/01/24 15:41:53.70 .net
ない

243:240
15/01/25 04:39:03.74 .net
みんなはどうしてる?
しっくりくる表記法がないんだけど

244:名無しさん@お腹いっぱい。
15/01/25 05:18:01.83 .net
しっくりこない表記がワカラナイ

245:名無しさん@お腹いっぱい。
15/01/25 11:18:23.60 .net
配列は邪教
使わないので規則などない

246:名無しさん@お腹いっぱい。
15/01/25 11:45:02.72 .net
>>245
同意

247:名無しさん@お腹いっぱい。
15/01/25 12:36:31.55 .net
配列って変数名に連番を入れたりして使うことかと思ってたw

248:名無しさん@お腹いっぱい。
15/01/25 13:47:36.00 .net
>>245,245
じゃあ代わりにどうすればよいのだ?
まさかコピペ?

249:名無しさん@お腹いっぱい。
15/01/25 17:38:43.45 .net
ポインタとか言い出すと見た

250:名無しさん@お腹いっぱい。
15/01/25 19:40:14.84 .net
あほらし

> じゃあ代わりにどうすればよいのだ?
> ポインタとか言い出すと見た
いかにも、めんどくさそう

251:名無しさん@お腹いっぱい。
15/01/25 19:46:57.10 .net
会話するネタがないんだなぁ……

252:名無しさん@お腹いっぱい。
15/01/25 21:21:36.60 .net
じゃあおれからネタ
xargsコマンドが好き。無理だと思ってた処理がワンライナーになる
いっそ、powershellみたいにjsonパイプラインみたいなのがあればいいのにって思う

253:名無しさん@お腹いっぱい。
15/01/25 22:41:49.00 .net
俺がよく使うのはfind ... | xargs grep だったかな
他どんな場面で使うっけ

254:名無しさん@お腹いっぱい。
15/01/25 23:37:38.84 .net
\ls -1t *.* |head -3|xargs head

255:名無しさん@お腹いっぱい。
15/01/26 12:06:00.33 .net
>>236

*.*の3行が、headへの標準入力じゃなくて、引数として与えられるのか。
おもしろいなあ。

256:名無しさん@お腹いっぱい。
15/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:名無しさん@お腹いっぱい。
15/01/27 02:26:05.37 .net
xargs は並列処理でもよく使うかな
例えば find ... | xargs -P 12 -n 16 gzip とすると12プロセスがファイルの圧縮を行う

258:名無しさん@お腹いっぱい。
15/01/27 03:09:32.08 .net
\nをファイル名に仕込まれて爆死する

259:名無しさん@お腹いっぱい。
15/01/27 06:47:01.92 .net
find ... -print0 | xargs ... -0 ... ってしとけばええやん…

260:名無しさん@お腹いっぱい。
15/01/27 07:02:05.92 .net
\0をファイル名に仕込まれて(ry

261:名無しさん@お腹いっぱい。
15/01/27 07:38:50.39 .net
仕込めるんだっけ?

262:名無しさん@お腹いっぱい。
15/01/27 08:17:49.81 .net
find ‥ -print0 を知らん奴もいるんだな w

263:名無しさん@お腹いっぱい。
15/01/27 08:20:05.07 .net
>>261
API だと思い付かない
ディスクを直接バイナリ編集すれば可能かも

264:名無しさん@お腹いっぱい。
15/01/27 08:25:13.28 .net
>>262
実装によってはないのよ

265:名無しさん@お腹いっぱい。
15/01/27 08:28:26.16 .net
solarisにはまだない

266:名無しさん@お腹いっぱい。
15/01/27 12:18:24.66 .net
>>264
移植すりゃいいじゃん

267:名無しさん@お腹いっぱい。
15/01/27 12:56:34.51 .net
大抵は
-exec {} +
で用が足りる

268:名無しさん@お腹いっぱい。
15/01/27 13:01:19.27 .net
>>263
カーネル内でもファイル名は0終端で扱ってるから無理だね
実際のサイズと異なる事でカーネルクラッシュなどまずいことが発生する可能性は
あるけど、それは普通にカーネル内バグ

269:名無しさん@お腹いっぱい。
15/01/27 13:29:38.19 .net
>>266
そういう話じゃないよ

270:名無しさん@お腹いっぱい。
15/01/27 13:41:29.10 .net
>>269
半分冗談だよ、いちいち気にしてたら禿げるぞ

271:名無しさん@お腹いっぱい。
15/01/27 13:43:51.02 .net
冗談に見えないし、
冗談だとしても面白くないよ

272:名無しさん@お腹いっぱい。
15/01/27 15:15:56.23 .net
大抵は
-exec \{\} +
とエスケープなりクォートで囲むなりするのを忘れる

273:名無しさん@お腹いっぱい。
15/01/27 16:27:07.47 .net
{}をquoteしなきゃならないカタワ専用シェルって何?

274:名無しさん@お腹いっぱい。
15/01/27 21:10:27.07 .net
-execはなんか怖いんだよなぁ
理由はないんだけど

275:DAEMON
15/01/27 21:45:21.58 .net
>>273
 シ
タッ・・(Φ Φ+)・・・ 恐らく Perl です

276:DAEMON
15/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:名無しさん@お腹いっぱい。
15/01/28 00:14:24.97 .net
>>272
で、{}をクォートする必要があるシェルって何?

278:名無しさん@お腹いっぱい。
15/01/30 19:56:12.76 .net
wait入れるsleepだが、引数が整数だけだろと思ってたら、整数じ
ゃなくてもいいというので、0.1入れてやってみたら、ほんとに動
作してるっぽい。manには何も書いておらん。つかえねーman

279:名無しさん@お腹いっぱい。
15/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:名無しさん@お腹いっぱい。
15/01/30 21:57:35.82 .net
>>279
おお、サンクス

281:名無しさん@お腹いっぱい。
15/01/31 12:09:54.06 .net
>>274
客先環境での操作なんかだとおおいにある
xargsなら、-pとか-tがあるので安心

282:名無しさん@お腹いっぱい。
15/01/31 13:19:36.31 .net
>>281
同意が得られて異端じゃないと安心出来た
尚就職してから今まで客先環境でしか働いたことがない模様

283:名無しさん@お腹いっぱい。
15/01/31 17:47:20.57 .net
こうじゃなくて
v=${v:-default}
こうでしょ
: ${w:=default}
っていうの有りますか?皆さんの、そういうの教えて下さい

284:名無しさん@お腹いっぱい。
15/02/01 00:46:16.74 .net
こうじゃなくて
echo -e 'hoge\nfuga'
こうでしょ
printf 'hoge\nfuga\n'

285:名無しさん@お腹いっぱい。
15/02/01 00:47:04.51 .net
俺はecho派

286:名無しさん@お腹いっぱい。
15/02/01 07:05:52.05 .net
公文い公文

287:名無しさん@お腹いっぱい。
15/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:名無しさん@お腹いっぱい。
15/02/01 18:28:40.97 .net
似た様なのだけど、
こうじゃなくて
function f () {
echo hoge hoge
}
こうでしょ
f () {
echo hoge hoge
}

289:名無しさん@お腹いっぱい。
15/02/01 19:10:32.63 .net
個人的には上なんだけど
最近やってるのがjavascriptだからかな

290:名無しさん@お腹いっぱい。
15/02/02 10:43:19.51 .net
変数は大文字か小文字か。
個人的には環境変数と区別するために小文字なんだけど、
社内の他の人が書いたのを見ると大文字ばっかりなんだよな。

291:名無しさん@お腹いっぱい。
15/02/02 12:18:06.01 .net
いつexportしても問題が出ないような命名規則なら問題無しw

292:名無しさん@お腹いっぱい。
15/02/02 21:56:58.79 .net
質問です。
linux mint 17.1 でコマンドの練習してるのですが、
% ls -l
だと色々ずらーっと出るんですけど、本に書いてあるとおり、
ソートコマンドを練習しようとして
% ls -l | sort +4
と打ち込んでファイルサイズで降順ソートしたかったのですが
sort: cannot read: +4: そのようなファイルやディレクトリはありません
と出てしまいます。
bashですが、シェルの種類によってはこのオプション使えないんでしょうか。
-r等は正常に動作します。

293:名無しさん@お腹いっぱい。
15/02/02 22:04:13.81 .net
sort -k4
sort -k4r

294:名無しさん@お腹いっぱい。
15/02/02 22:34:00.27 .net
で、できました!有り難うございます!

295:名無しさん@お腹いっぱい。
15/02/03 03:09:11.93 .net
>>292-294
sort +4と同じ指定はsort -k5
たぶんls -lでファイルの所有者が全て同じで、できたと勘違いしてる
--debugオプションをつけるとわかりやすい
URLリンク(www.gnu.org)
> 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のバージョンによるってことかな
URLリンク(www.gnu.org)

296:名無しさん@お腹いっぱい。
15/02/03 06:48:02.67 .net
Linux だったら ls コマンドは GNU coreutils の ls だろうから、
$ ls -l --sort=size
or
$ ls -lS
でええじゃまいか

297:名無しさん@お腹いっぱい。
15/02/03 08:37:05.99 .net
( 検索結果で上位に上がると期待して ) 日本語訳を貼り付けておきます
URLリンク(linuxjm.sourceforge.jp)
URLリンク(linuxjm.sourceforge.jp)

298:確認不足だった orz
15/02/03 08:40:20.78 .net
訂正
( 検索結果で上位に上がると期待して ) 日本語訳を貼り付けておきます
URLリンク(linuxjm.sourceforge.jp)
URLリンク(linuxjm.sourceforge.jp)

299:名無しさん@お腹いっぱい。
15/02/04 22:55:20.92 .net
>>298
おお、infoの日本語訳できたんだ
man on WWWのように検索できるとさらにいいね

300:名無しさん@お腹いっぱい。
15/02/08 15:04:24.54 .net
よく使うワンライナーなどはどうやって呼び出すものなんですか?
何か簡単に管理する方法がありませんかね?

301:名無しさん@お腹いっぱい。
15/02/08 15:06:57.37 .net
zshならzawから
vimのUnite historyの様なgrep効くから、それで呼ぶか
編集して完成させる

302:名無しさん@お腹いっぱい。
15/02/08 16:40:17.45 .net
>>301
anything.elみたいなヒストリーサーチみたいですね。
bashなのでどうしたものか。

303:名無しさん@お腹いっぱい。
15/02/09 09:34:08.43 .net
>>300
aliasじゃないの?

304:名無しさん@お腹いっぱい。
15/02/09 10:04:38.99 .net
自分で書いたスクリプトはいつでも、一見、間違いのないように見えるw

305:名無しさん@お腹いっぱい。
15/02/09 18:00:27.27 .net
まったくだ(´・ω・`)
ぼくの書いたスクリプトが動かないなんてけしからん(´・ω・`)
シェルの方を治したまえ

306:名無しさん@お腹いっぱい。
15/02/09 18:21:02.80 .net
cygwinからLinuxに移植したシェルスクリプトが,ping部分で成功しなかった

declare -A URL
URL=(
  ["Vim_part24"]="スレリンク(unix板)"
  ["vim_part5"]="スレリンク(software板)"
  )
# 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:名無しさん@お腹いっぱい。
15/02/09 18:41:13.94 .net
ping -c 1 ... にするべきじゃないの?
pingのコマンドオプションって統一されてないよなぁ

308:名無しさん@お腹いっぱい。
15/02/09 19:27:08.45 .net
配列を使うのはダサいと思うのです。
#!/bin/sh
url_list='
Vim_part24 スレリンク(unix板)
vim_part5 スレリンク(software板)
'
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:名無しさん@お腹いっぱい。
15/02/09 19:28:49.19 .net
ああ、case の条件部分がおかしい。
URLリンク(*|fhttp:)">URLリンク(*|
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch