2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    
レス数が1000を超えているけど、まだ書けるかも知れないよ。

シェルスクリプト総合 その23

1 :名無しさん@お腹いっぱい。:2014/07/01(火) 17:55:50.75 .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に逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その22
http://peace.2ch.net/test/read.cgi/unix/1383260330/

2 :名無しさん@お腹いっぱい。:2014/07/01(火) 18:00:07.04 .net
すみませんがシェルに詳しい方のみ回答をお願いします

3 :名無しさん@お腹いっぱい。:2014/07/01(火) 18:10:58.47 .net
・シェルスクリプトのことをシェルってゆーな

4 :名無しさん@お腹いっぱい。:2014/07/01(火) 18:11:47.16 .net
シャロスクリプトまだー?

5 :名無しさん@お腹いっぱい。:2014/07/01(火) 18:12:25.94 .net
その22 をそのままコピペしましたが

その16にあったもの
□関連スレ:
□初心者向けリンク:
□入門者向け書籍:
□参考リンク:
□最近のシェルスクリプト本:
□関連書籍と関連リンク:
□人間初心者へのお願い:
□シェルスクリプトでよく使うコマンド:
です。

今、追加案あればどうぞ

6 :名無しさん@お腹いっぱい。:2014/07/01(火) 18:17:49.67 .net
>>4
そんなのないよ

7 :名無しさん@お腹いっぱい。:2014/07/01(火) 18:19:36.60 .net
>>1
>  安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
便利なものはどんどん使う方が頭いいと思うがなぁ。

8 :名無しさん@お腹いっぱい。:2014/07/01(火) 18:21:16.64 .net
このスレは純正シェル道の求道者達が集う道場スレです。
うかつに部外者が踏み込むとケガをする場合があるのでご注意ください。

9 :名無しさん@お腹いっぱい。:2014/07/01(火) 18:58:07.03 .net
知らんがな

10 :名無しさん@お腹いっぱい。:2014/07/01(火) 18:58:36.74 .net
忘れてた
>>1たて乙

11 :名無しさん@お腹いっぱい。:2014/07/01(火) 20:10:01.64 .net
昨今の*nixなら某かの方法でbashは入手できるよね
純性UNIXはkshを愛してるみたいだけど時代の要請を理解してる

12 :名無しさん@お腹いっぱい。:2014/07/01(火) 20:36:19.70 .net
別にbash限定のシェルスクリプト書いていけないわけではない
恥ずかしながらbashでしか動きません、と注釈付けてあれば
文句いう人は少ない

13 :名無しさん@お腹いっぱい。:2014/07/01(火) 20:49:55.31 .net
なら1行目で最初から解決してるんだね。よかったよかった

14 :名無しさん@お腹いっぱい。:2014/07/01(火) 22:04:49.49 .net
bashをログインシェルにしてる奴の作ったプログラムは全部GPLが感染するよ。

15 :名無しさん@お腹いっぱい。:2014/07/01(火) 22:16:40.24 .net
さあー、盛り上がってきたよ!
じゃんじゃん自分の意見を書いていこう!

ポータブル派保守系、時代はbash派革新系
シェルスクリプトに無理にこだわらない現実派

テンプレの募集もしていますよ
その17、その18で消えたようだから、その16、その17を元に話しましょう

16 :名無しさん@お腹いっぱい。:2014/07/01(火) 22:20:53.98 .net
ややこしい操作するなら安易にperlでやる派

17 :名無しさん@お腹いっぱい。:2014/07/01(火) 22:46:24.84 .net
>>11
組み込みとかメモリが足りなかったら入れられないんじゃないかな。
PCでも何千とか起動すると重そう。

18 :名無しさん@お腹いっぱい。:2014/07/02(水) 00:13:16.98 .net
そういう特殊な環境の話はしてないっしょ。

19 :名無しさん@お腹いっぱい。:2014/07/02(水) 00:29:19.31 .net
>>7
誰もメンテできなくなったVBやCOBOLやExcelの
資産()を見てもそう思えるんなら、才能ないから
コンピュータから手を引いたほうがいい。

20 :名無しさん@お腹いっぱい。:2014/07/02(水) 00:48:45.98 .net
bash を使うなとは言わんけど、bash でしか動かんものは
#! 行でそうと宣言しておいてほしい。
つーか、#!/bin/sh と書かれていたら
bash の独自拡張はぜんぶエラーにしてほしいんだが。
man によると sh という名前で起動されると POSIX 互換モードになるらしいけど、
あいかわらず bash 拡張がふつーに使えて違いがさっぱりわからん。

21 :名無しさん@お腹いっぱい。:2014/07/02(水) 00:59:50.16 .net
trapとセットでよく使うmktempとか結構システムによって挙動ちがうけど、純粋シェル道的にはどうやって実装するの?

22 :名無しさん@お腹いっぱい。:2014/07/02(水) 04:30:46.92 .net
>>20
ここに書けばエラーレスが出るよ。

23 :名無しさん@お腹いっぱい。:2014/07/02(水) 05:59:05.00 .net
>>20
bash で #!/bin/sh と書いたら、プロセス置換 <(command) とかが使えなくなるという違いはある。

24 :名無しさん@お腹いっぱい。:2014/07/02(水) 15:49:33.90 .net
>>20
Bourne Shellを自分で入れるのが一番良いかもね

25 :名無しさん@お腹いっぱい。:2014/07/03(木) 15:20:26.48 .net
>>20
例えばLinuxのDebian系ディストリだと
そのために拡張控えめな dash (Debian版ash) があったりするね

26 :名無しさん@お腹いっぱい。:2014/07/03(木) 15:31:45.75 .net
同じbashでも、#!/bin/shと書いて起動するとその動作モードが変わるという話をしてるんだけどね。
zshでも動作は変わる。が、ash(dash)は#!/bin/shと書いても#!/bin/ashと書いても何も変わらない。

27 :名無しさん@お腹いっぱい。:2014/07/03(木) 15:47:52.68 .net
>>20>>26
たぶんPOSIX準拠でエラーのないスクリプトが正常動作する程度の機能なんだろう。
最低限それやっとかないとPOSIX準拠のシェルとして採用してもらえなくなるから。

厳密にPOSIX準拠で拡張ゼロのシェルを内部に別途実装するとか無駄だから、
そういう要望はBourne Shell入れてそっちでやってくれってスタンスなんじゃね?

28 :名無しさん@お腹いっぱい。:2014/07/03(木) 16:06:37.72 .net
今後新しいシェルが出てきて乗り換えた時に、書き溜めたスクリプトが動くと嬉しいので、互換性指摘は嬉しい。
ただ、その時々によって必要性が違うので無視するかも。
つまり、互換性指摘はWarningということだ。

29 :名無しさん@お腹いっぱい。:2014/07/03(木) 16:34:16.07 .net
シェルスクリプトってインタプリタ言語だしWarning出さずにError出すイメージ

30 :名無しさん@お腹いっぱい。:2014/07/03(木) 16:45:14.94 .net
何その勝手なイメージは

31 :名無しさん@お腹いっぱい。:2014/07/03(木) 18:24:18.78 .net
お前の勝手なイメージを押し付けるな!

32 :名無しさん@お腹いっぱい。:2014/07/03(木) 18:59:57.41 .net
× イメージ
○ イミッジ

これを間違えると日本人と思われて馬鹿にされるので気を付けるようにw

33 :名無しさん@お腹いっぱい。:2014/07/04(金) 00:34:23.82 .net
× アイディア
○ アイデア

34 :名無しさん@お腹いっぱい。:2014/07/04(金) 00:44:50.44 .net
日本人ってだけでバカにするのはアレな国の人だけだと思う

35 :名無しさん@お腹いっぱい。:2014/07/04(金) 10:39:04.06 .net
checkbashism使ってみるのはどうか。
https://alioth.debian.org/scm/browser.php?group_id=30755
PerlスクリプトなのでDebian以外でも普通に動くはず。

36 :名無しさん@お腹いっぱい。:2014/07/04(金) 11:07:46.65 .net
>>35
使ってみたことあるけどBourne shとの互換性チェックには全然ならないよ。

37 :名無しさん@お腹いっぱい。:2014/07/04(金) 11:13:37.98 .net
ポータブルなスクリプトがデフォなのは賛成だが、
デフォが Bourne shell ( 商用 UNIX 等で生き残っている
Traditional Bourne shell と解釈しています ) とするのは反対

前から思っていましたが、多くの環境でわざわざインストールしないと使えない
Bourne shell にこだわる必要性は、少ないと思う

皆さんが、ポータブル性は POSIX 相当でも OK なら、こんな風にしたい

□お約束
・特記なき場合は #!/bin/sh がデフォルトです。この場合、ポータビリティーに注意し
 Traditional Bourne Shell もしくは、POSIX 相当のスクリプトでお願いします。
 bash/zsh/ksh/ash/dash などに依存する場合は明示しましょう。

38 :名無しさん@お腹いっぱい。:2014/07/04(金) 11:20:56.93 .net
その辺はスレ立てる人が勝手に決めてるだけだから
次スレ自分で立てればいいよ。

39 :名無しさん@お腹いっぱい。:2014/07/04(金) 11:24:28.11 .net
今回立てた時に、やはり了承を得てからと思って、コピペにしました

本当は、>>7 の言うことも納得で、
> □回答者への注意事項:
も消したかった

40 :名無しさん@お腹いっぱい。:2014/07/04(金) 20:54:39.48 .net
>>1 です
暇を見て、話題の途切れたときにでもテンプレ案出してみます

41 :1 ◆01VkPKFOHeoR :2014/07/05(土) 19:22:10.62 .net
連投失礼します。テンプレ案考えてみました。かなり手を入れました
どんどん指摘して下さい
ただし、こんな風にしろとかだけでは無く、具体的に修正したものを付けて下さい
指摘された事に、別の方の反論が無ければ、そのまま機械的に取り込みます
考慮が足りなかった場合は、後で条件を追加・変更する事も有ります

変更点
1. ">>1 A.3 を見てね" と簡単に指摘出来る様に、番号をふりました
2. 日本語とアルファベットとの間に半角スペースを入れました。/ ( ) 前後にも
3. お約束の項目でお約束で無い、前提知識等をお約束の補足に移動しました
4. 初心者でも参加しやすい様に、工夫しました
 ( 特にポータブル志向がハードルを上げ、参加をさまたげ無い様に )
5. Bourne Shell ポータビリティー POSIX について、説明を加えました
6. MacOSX について触れていないのが気になったので、書き加えましたが、
 /bin/sh と /bin/bash でバイナリーサイズ、inode が違うらしいです
 詳しい方、ぜひ修正をお願いします
  https://discussions.apple.com/message/18600748
7. 過去ログから、テンプレートを復活させてみました。所々変えてます。
8. Wiki でなくこのスレで、気軽にテンプレ修正議論が出来る様に、してみました。

42 :1 ◆01VkPKFOHeoR :2014/07/05(土) 19:23:09.35 .net
シェルスクリプトの総合スレです。
初心者、学生、アマチュア、プロ、シェルの種類や OS を問いません。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずはテンプレートをご覧下さい。

□A. お約束
1. 特記なき場合は #!/bin/sh がデフォルトです。この場合ポータビリティーに注意し、
 Traditional Bourne Shell もしくは、POSIX 相当のスクリプトでお願いします。
 bash / zsh / ksh / ash / dash や OS 等に依存する場合は、明示しましょう。
 良く分からない方は、使用している OS を書いておけば OK です。是非ご参加下さい。
2. 質問する前に、まず自分で調べましょう。ただし、
 「聞くは一時の恥、聞かぬは一生の恥」です。積極的に参加しましょう。
3. 相手を侮辱する発言、失礼な発言は差し控え、知的な議論を楽しみましょう。
4. 他者には様々な環境や事情、目的が有る事に留意し、無下に扱う様な発言は
 控えましょう。

43 :1 ◆01VkPKFOHeoR :2014/07/05(土) 19:23:52.16 .net
□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 参照 )

44 :1 ◆01VkPKFOHeoR :2014/07/05(土) 19:24:44.97 .net
□C. 初心者へのアドバイス
1. シェルスクリプトのことをシェルってゆーな
2. 知らないコマンドが出てきたら man コマンドで調べましょう。
3. UNIX には、シェルスクリプトに便利な小さなコマンドが色々あります。
 apropos ないしは man -k でそれらしい単語による簡単な検索もできます。
4. シェルの構文や内部コマンドは man sh で。英語は LANG=C man shで。
5. 思い通りに動かないときは、まずは #!/bin/sh -x でトレースしましょう。
6. 適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 awk / perl / javascript / ruby / python 等、他の (スクリプト) 言語の方が
 適した処理にはそちらを使いましょう。
7. シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題は正規表現スレへ
8. csh / tcsh のシェルスクリプトは推奨されません。理由は下記を参照
 http://www.speech-lab.org/~hiroki/csh-whynot.euc

45 :1 ◆01VkPKFOHeoR :2014/07/05(土) 19:26:23.53 .net
□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

46 :1 ◆01VkPKFOHeoR :2014/07/05(土) 19:28:43.20 .net
□E. 学習用テキスト
1. Bourne&#160;Shell自習テキスト ( 1993年 )
 http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/index.html
2. シェルを使おう - 導入からプログラミングまで - ( 2002年 )
 http://www.netfort.gr.jp/~tomokuni/lms/shell/
3. 入門用図書
 a. 特に話題に上らなければ削除します
4. お勧め図書
 a. 特に話題に上らなければ削除します

47 :1 文字化け修正です ◆01VkPKFOHeoR :2014/07/05(土) 19:30:27.22 .net
□E. 学習用テキスト
1. Bourne Shell自習テキスト ( 1993年 )
 http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/index.html
2. シェルを使おう - 導入からプログラミングまで - ( 2002年 )
 http://www.netfort.gr.jp/~tomokuni/lms/shell/
3. 入門用図書
 a. 特に話題に上らなければ削除します
4. お勧め図書
 a. 特に話題に上らなければ削除します

48 :1 ◆01VkPKFOHeoR :2014/07/05(土) 19:31:15.26 .net
□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/
2. POSIX
 The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2013 Edition 英文
 http://pubs.opengroup.org/onlinepubs/9699919799/

49 :名無しさん@お腹いっぱい。:2014/07/05(土) 22:00:04.09 .net
自分の場合は書籍はあまり見てなかった
入門時に一番参照したのは、UNIX FAQ なんだよね (NetNewsに流れてたの)
http://www.nurs.or.jp/~asada/FAQ/UNIX/UNIX.FAQ.html
例えばサブシェルとかは、知ってないとハマってしまう

>>47のBourne Shell自習テキストは、HTML化がいまいちなので
LaTeXの方を見て欲しい。誰かPDFで公開してないかな
と思ったらあった
http://ayapin.film.s.dendai.ac.jp/~matuda/Lecture/PDF/sh-two.pdf

50 :名無しさん@お腹いっぱい。:2014/07/05(土) 22:37:15.59 .net
参考リンクはともかく、学習用文書はいらなくないか?
あまりテンプレ充実しすぎてても考え物な気がする
今までが1レスだったから特に

しかしポータビリティって単語好きだね

51 :名無しさん@お腹いっぱい。:2014/07/05(土) 23:12:47.63 .net
可搬性

52 :名無しさん@お腹いっぱい。:2014/07/05(土) 23:39:10.47 .net
POSIXのPはポータブルのP。

53 :1:2014/07/06(日) 06:20:22.54 .net
連投規制中です。しばらく待ちましたが、いっこうに書き込めません
代行さんに書き込んでもらっています
続きは明日以降で。参考リンクが、まだ続いて、他に
前スレ、関連スレ、テンプレートの変更案
が有ります。これ以上長いと、問題有そうですが
とりあえず、あげてみます

54 :名無しさん@お腹いっぱい。:2014/07/06(日) 11:44:27.01 .net
テンプレ貼るのに連投規制食らうようなものはいかんだろう。
つーか、今テンプレ決めて次スレ立つの何年後だよwww

55 :名無しさん@お腹いっぱい。:2014/07/06(日) 16:59:31.66 .net
前スレは1年かからなかった。

56 :1 前置き1分割E2回が余分です ◆01VkPKFOHeoR :2014/07/06(日) 19:55:48.38 .net
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/

57 :1 ◆01VkPKFOHeoR :2014/07/06(日) 20:07:38.32 .net
 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/
6. ツール

□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/

58 :1 次スレ早め立おくどう? ◆01VkPKFOHeoR :2014/07/06(日) 20:12:09.15 .net
□H. 関連スレ
1. sed
 http://peace.2ch.net/test/read.cgi/unix/1085730992/
2. 正規表現
 http://peace.2ch.net/test/read.cgi/unix/1039165754/
3. Regular Expression(正規表現) Part12
 http://peace.2ch.net/test/read.cgi/tech/1387257592/
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のお勉強 Part49
 http://peace.2ch.net/test/read.cgi/tech/1387528488/
8. 【node.js】サーバサイドjavascript 2【Rhino】
 http://peace.2ch.net/test/read.cgi/tech/1358937029/

59 :1 ◆01VkPKFOHeoR :2014/07/06(日) 20:14:23.19 .net
□I. 現在評価待ち: X.n は予定した追加先。主にスレ立て人の判断保留用。
1. F.6 ツール
 a. web tool です。Vim syntastic や Emacs の Flycheck でも使えます
  ShellCheck
  http://www.shellcheck.net/about.html

60 :1 ◆01VkPKFOHeoR :2014/07/06(日) 20:20:15.84 .net
□J. テンプレートの変更案や、おすすめの本、リンク等が有りましたら続けてどうぞ!
1. 検索しやすい様に、先頭に "コメント複数行\n指示\n□X" を付けて指定して下さい。
 追加や、削除、挿入、移動、分割等と適切に書いて下さい。
 900 レスまでに別の方の反論が無ければ、次にスレッドを立てる人が適当に判断して
 取り込むはずです。
2. レス例
スクリプトスレを列挙するのは不要に感じる
削除
□H. 関連スレ
 H.5から8 ECMAScript, Rubyについて, Pythonのお勉強, サーバサイドjavascript

3. レス例
これは、聖なる本
追加
□E. 学習用テキスト
4.お勧め図書
 a 伝承シェルプログラミング ( 199X年 )
  http://www.example.net/404.html

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

61 :1 ◆01VkPKFOHeoR :2014/07/06(日) 20:42:24.70 .net
自分でも追加してみます。syntastic とか、shlint とかって、使っている人少ない
みたいですがどうですか?
追加
□F
6. ツール
 b. vim 用 syntastic
  https://github.com/scrooloose/syntastic
 c. checkbashisms も使用してチェック duggan/shlint GitHub
  https://github.com/duggan/shlint

>>49
挿入
□E. 学習用テキスト
3. UNIX FAQ LIST
 http://www.nurs.or.jp/~asada/FAQ/UNIX/UNIX.FAQ.html

62 :1 ◆01VkPKFOHeoR :2014/07/06(日) 20:52:47.98 .net
>>49
修正
□E. 学習用テキスト
1. Bourne Shell自習テキスト ( 1993年 ) pdf お薦め
 http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/index.html
 http://ayapin.film.s.dendai.ac.jp/~matuda/Lecture/PDF/sh-two.pdf

# >>50 削除どうしましょう?余計そうなものが他にも有るので、ご意見下さい。
# 出来れば、初心者も歓迎する雰囲気を消したくないのと、>>49 とぶつかるので。
# >>50 案 長すぎるので、学習用テキストは不要ではないか
# 削除
# □E. 学習用テキスト

# あと、ポータビリティーについて、私は違和感が無かったのですが、日本語じゃないかも。
# いくつか書籍も調べました。書き込めたら、別に書きます。
# 回りくどい書き方しましたが、ツール類のご意見下さい。

# 以上です。連投失礼しました。
# >>49 UNIX FAQ LIST 見覚えある。なつかしい。fj とかも見てましたよ。買い物したり

63 :名無しさん@お腹いっぱい。:2014/07/06(日) 22:40:39.84 .net
portability の訳語についてです。移植性、汎用性、可搬性と訳されているようです
ポータビリティーはそのままじゃあ通じないのかなあ?しっくりくる言葉のご意見下さい

O'Reilly Japan - 詳解 シェルスクリプトでは、移植性 としています
原著 Classic Shell Scripting Shell Portability Issues and Extensions

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界
汎用性としています。原著は未確認
可搬性は、O'Reilly Japan - 入門 bash や、bashクックブックで使われています

スクリプトではないですが、Small is beautiful. ではじまる、UNIX 哲学とかでは
本や、ネットを見ると Choose portability over efficiency. で移植性や、移植しやすさ
あと、F.1.a autoconf マニュアル は、移植性のあるシェルプログラム です

次に、連投規制についてですが、もしかして誤解されていたら残念なので一応
前置き、1 候補の A. B を分割して書き込んだ事、E を 2 回書いた事で、
3 レス分は余計に書いていますので、一応ほぼ全てを一度に書き込めはします
書けない 2 レス分+αは、スレ消化前に少し早めに立てて、分けて書き込むとかで
無理ではないかと思います

ただ、今までが 1 のみだったので、>>50 ももっともです。どんどん書き変えて下さい

64 :名無しさん@お腹いっぱい。:2014/07/06(日) 22:45:14.31 .net
 わりと
   どうでもいいよね〜                   ね〜♪
                         _ ‐..::  ̄ ̄ ::::... 、
              . ィ            r'::/ ::ィ:::::::::::j:::::::ヽ::::\
,._.._ .......、._    _ /:/l!            | ::|::/ |::::::::∧:::レ::l:::| :::::rヘ
ヽ :~""''.>゙' "~ ,、、''‐'、|          l ::仏_ノヘ:/ ー- ハ:::!::::::|::::i
 ゙、'、::::::ノ:::::::_,.-=.  _〜:、          /::::リy=ミ ' ィ=ミ /:::::!::::/:::::!
  ``、/:::::::::__....,._ `゙'Y' _.ェ-、..._      |::::{xx     xx/::::::「)'|:::::::|
  ,.--l‐''"~..-_'.x-='"゙ー 、`'-、      lハ:仆 ..._ヽフ /:::: /´ |:::::::|
 "   .!-'",/  `'-‐'') /\ `      Y::::ソ勺 7イV_  !:::::::!
  .-''~ >'゙::    ‐'"゙./  ヽ.    __  |::/ 爻___ん'´ッ'⌒ヽ! :::::!
    //:::::       ',        (__,、\/ /‐―一弋{、  /  ̄_)
   ' /:::::       .:';          \ ' {      :::\   /~::!

65 :名無しさん@お腹いっぱい。:2014/07/06(日) 22:50:31.53 .net
どうでもよくない

66 :名無しさん@お腹いっぱい。:2014/07/06(日) 22:55:44.82 .net
めっちゃ頑張ってるのは評価するが需要にあってるかどうか微妙
レスを見ても長すぎるテンプレを褒める書き込みはない
その16でどんな議論があったのかは知らんが、今の提案は全部長文すぎて読む気が起きん
Small is beautifulなんだろう?

67 :名無しさん@お腹いっぱい。:2014/07/06(日) 23:03:24.69 .net
 ―┼‐         ノ     /   |  --ヒ_/     /   \ヽヽ    ー―''7
   `」   ┼,   二Z二   レ   /  /´レ' \ ―7 ̄}  |  ー-、   /
 (__  (|フ)   (__ノ  _ノ  ∨`  ノ  /  /     _ノ    \_

    ─┼-        /   |   ‐┼-   |     ー|―
    ─┼─ |   \ レ  /   ̄Tー  /      ノ -─
   (二フヽ  \/    _ノ   (二フ\  ヽ_ノ   / 、__

     i';i
    /__Y
     ||真||                   /⌒彡
  _ ||露||         /⌒\     /冫、 ) ・・・・・・。
  \ ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄\ `./⌒ i `  /ゝ    _,,..,,,,_
  ||\`~~´  (十万石)     \( >     ('\\  ./ ,' 3 `ヽーっ ・・・・・・。
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄\`つ    ⌒ _) l   ⊃ ⌒_つ
     .|| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄||                `'ー---‐
( 'A) ・・・。 〃∩ ∧_∧        <⌒/ヽ___
/(ヘ)ヘ    ⊂⌒(  ・ω・) ・・・。  <_/____/ zzzz・・・
         `ヽ_っ⌒/⌒c

68 :名無しさん@お腹いっぱい。:2014/07/06(日) 23:53:00.43 .net
テンプレはどっかのwikiに置いてよ。

69 :名無しさん@お腹いっぱい。:2014/07/07(月) 00:09:44.87 .net
http://info.2ch.net/

2ch公式のwikiがあるからここ利用したら良いよ

70 :名無しさん@お腹いっぱい。:2014/07/07(月) 06:30:40.74 .net
>>64 勝手に進めてま〜す♪

>>66 "Small is beautifulなんだろう?" は必要ですか?皮肉っぽく不快です
読む気が起きないなら、どこを削除するか具体的にお願いしますとは言えないので、
ごっそり削除した案を上げておきます

長くなった部分は、1.過去ログの内容も多く、他に 2.移植性、3.POSIX、
4.Bourne Shell、5.関連スレや、6.テンプレ変更案を促す内容を追加しましたが、
ほぼ削除しました

>>49 で UNIX FAQ を上げてもらっているので、何らかの参考リンクは
有ってもいいのでしょうが、取捨選択、別途追加は皆さんにお任せします

>>68 >>69 せっかくの提案ですが、今後とも wiki でなくこのスレで進めた方が
良いと考えているので、少なくとも私は作りません。申し訳ない

71 :名無しさん@お腹いっぱい。:2014/07/07(月) 06:31:14.62 .net
長すぎて、読む気がしない
修正、削除
□A. お約束 --- >>42 そのまま
□B. お約束の補足 --- 下記。2, 3, 4 参考リンクへの参照を止め直接記入 5 削除
□C. 初心者へのアドバイス --- >>44 そのまま
□D. 前スレ --- に変更して直前スレのみにする
1. シェルスクリプト総合 その23
 http://peace.2ch.net/test/read.cgi/unix/1404204950/

□その他 --- 削除

72 :名無しさん@お腹いっぱい。:2014/07/07(月) 06:31:57.21 .net
□B. お約束の補足
1. Mac OS X では、/bin/sh の実体は bash です。また、一般的に BSD 系 や
 GNU/Linux の方は、/bin/sh がシンボリックリンクですので、注意して下さい。
 ls -l /bin/sh や readlink -e /bin/sh で確かめて下さい。
2. ポータビリティーについては、下記を参照して下さい。
 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] 英文
  http://wiki.bash-hackers.org/scripting/nonportable
3. POSIX については、man 7 standards や下記
 ( の特に Shell & Utilities ) を参照して下さい。
 The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2013 Edition 英文
  http://pubs.opengroup.org/onlinepubs/9699919799/
4. Traditional Bourne Shell については、下記を参照して下さい。
 a. The Traditional Bourne Shell Family History and Development 英文
  http://www.in-ulm.de/~mascheck/bourne/
 b. The Heirloom Bourne Shell 英文
  http://heirloom.sourceforge.net/

73 :名無しさん@お腹いっぱい。:2014/07/07(月) 07:01:26.69 .net
テンプレなんてドーデモエー
テンプレ検討だけでスレ埋めるなよ
シェルスクリプトの話しろよ

74 :名無しさん@お腹いっぱい。:2014/07/07(月) 09:01:44.79 .net
ポータビリティーがそのままじゃ通じないとか言ってんじゃねえんだよ
ただ読み方カタカナ表記しただけの長々しいカタカナが君には見やすいのか

俺はそう思わないしカタカナ列挙した糞翻訳は読みづらいし頭に入ってこない
極論すれば英語のままの方がマシだ

で、
できるだけ環境問わずそのまま使えるようにするのは
可搬性の向上なんだよ

移植性だと書き換え前提でその書き換えをしやすくする感じが強くなる
汎用性は可搬性みたいなことよりも*目的*を限定しない感じになる

75 :名無しさん@お腹いっぱい。:2014/07/07(月) 09:16:21.73 .net
/.:::.::.::.::.:: ト\ /∧:.::.::.::|:.::.:: |:.::.::.:.::.::.:.::.::.:.\
.: ::.::.::.::.::. |-‐''"´│:.::.::.|:.::.::.jヽ ::.:.::.:.::.::. |::.:.::.:.
.: ::.::.::.::.: l:|    |:j.::._∧::.:/ ハ.::.::. }::.::.:|^';.::.::'.
.: ::.::.::.::.: |:!=-、  ノ:'!.::;仁∨ j:ハ.:: ;'::.::.::|ノ} :.::.'、    ふ〜ん …で?
.::.::.|.::.::.::.|:ヽ    ∨ '弌示圷 j/.:: /.::| '.::.::.::.:ヽ
.:|.: |.::.::.::.'ャ弌示       ゝ.:ソ /.::./ :.::|/.::.::.::.::.::.::\
.::!八.::.::.::ヘ ゝ.:ソ         ̄´厶:イ :.::.:|、.::.::.::.::.::.::.::.:\
、ヽ.:\.::.::.:.. `  ,         |:i.::.::.::| \.::.::.::.::.::.::.::.:. \
.丶.:\:|>‐ヘ              | .::.::.::|  丶、 _;rz: -‐ ⌒丶、
  \:〈 ^トーゝ_   --、       1 :.::.::.|        //       \
    |ヽ´  ⌒>‐ 、   、<. │.::.::. !      //         丶、
    |.:: \      `く. Y:| \|.::.::.::.|      |:l                \
    |.::.::.::.`7ーr:、    ,ノ::lヽ _|.::.::.: |   / j:j                \
    |.::.::.:: /  |:/    / |::{  |.::.::.: |´ ̄  /:/   、__            \
    |.::.::.:/  /    / .l八 │:.::.: |    |::|     '⌒丶、

76 :名無しさん@お腹いっぱい。:2014/07/07(月) 09:18:42.70 .net
割りと胴で萌ぇ

77 :名無しさん@お腹いっぱい。:2014/07/07(月) 09:46:44.64 .net
テンプレは自分で勝手に決めていいよ。

78 :名無しさん@お腹いっぱい。:2014/07/07(月) 10:48:06.14 .net
いちいち誰にでもわかりやすいようにする必要はない。
ポータビリティで通じるし、通じないならそいつがタコなだけ。
シェルスクリプト書くような奴は、単語の意味を自分で調べるくらいできる。

ここは幼稚園か? 違うだろ? 出来ない奴は相手にしなければいいだけ。
目の前にすぐ調べられる魔法の箱があるのに活用できない奴は、もはや現代では馬鹿の謗りを免れえない。

79 :名無しさん@お腹いっぱい。:2014/07/07(月) 12:18:24.40 .net
bashって$RANDOMが定義済みなんだな。
自分で範囲を決めて作ったランダムを$RANDOMに突っ込んで、
呼び出したときの値の範囲がおかしいから、???ってなったわ。
頭にBASH_つけるとかして欲しかったな。

80 :名無しさん@お腹いっぱい。:2014/07/07(月) 12:33:34.10 .net
>>79
それは bash独自じゃなく、zshでも kshでも同じだよ。

RANDOMを普通変数として使いたいなら、
先に unset RANDOM してから RANDOM=1234 とか自分で代入すれば値は変化しない。

81 :名無しさん@お腹いっぱい。:2014/07/07(月) 13:11:10.01 .net
zshだとunsetしても普通の変数にはなってくれないよ

82 :名無しさん@お腹いっぱい。:2014/07/07(月) 13:43:36.07 .net
純正シェルで使って良いシェル変数は$aから$mの13個だけだと言ってるだろうが。

83 :名無しさん@お腹いっぱい。:2014/07/07(月) 13:46:22.00 .net
いま純正シェルの話じゃないから。

84 :名無しさん@お腹いっぱい。:2014/07/07(月) 17:41:52.70 .net
ファイルがたくさんあって、それら全部に対して
・手っ取り早く文字コードを調べるのにfileコマンドを使う (file *)
・正確に出したい時にiconvコマンドを使う (iconv -f code < filename)
という事をやってたんだが、手っ取り早く正確に文字コードを調べる方法って何かないかな?
むしろ皆のやり方を知りたい

85 :名無しさん@お腹いっぱい。:2014/07/07(月) 17:42:00.33 .net
前スレ http://peace.2ch.net/test/read.cgi/unix/1383260330/990 のつり餌
> bourneシェルの中でもV1-V6はコマンドラインインタプリタとしての...
> PWBシェルでも動作可能なことが純正シェル道

V1 - V6 は Bourne shell ではなく、Thompson shell
その22 のスレのデフォルトシェルは Bourne shell であって Mashey shell ( PWB shell ) ではない

よって、前スレ >>983 を失格というのは間違い
そもそも、Bourne shell の B は大文字で書く

86 :名無しさん@お腹いっぱい。:2014/07/07(月) 17:44:47.15 .net
純性シェルじゃないと何が困るの?

87 :名無しさん@お腹いっぱい。:2014/07/07(月) 17:45:52.30 .net
>>84
nkf -g

88 :名無しさん@お腹いっぱい。:2014/07/07(月) 17:46:08.15 .net
$()使うなとか言い出す輩がいる

89 :名無しさん@お腹いっぱい。:2014/07/07(月) 19:14:22.01 .net
>>88
$( )を使わないようにすることは、Bourneシェルを基準にすることで達成されるから、
純正シェルまで遡る必要はなくなる。

90 :名無しさん@お腹いっぱい。:2014/07/07(月) 19:16:57.19 .net
nkf←古くて時代遅れ
iconv←今風これからの標準

って認識あるんだけどnkfの方が全体的に使いやすいし
機能も豊富だからつい使っちゃうんだよなあ

91 :名無しさん@お腹いっぱい。:2014/07/07(月) 19:59:00.94 .net
iconvって文字コードにエラーがあるとファイルの途中で異常終了しちゃうから使いにくい。

92 :名無しさん@お腹いっぱい。:2014/07/07(月) 20:38:05.32 .net
>>86
困るとかじゃなく、あれは武道とか精神修練とかそっち系のアレだから。

93 :名無しさん@お腹いっぱい。:2014/07/07(月) 23:24:27.14 .net
nkf入ってないんだよなうちの会社の環境…
別環境でnkf -gがめっちゃ使いやすかったからなんで入ってないんだと思ってしまう
客先環境だから仕方ないんだけどさ

94 :名無しさん@お腹いっぱい。:2014/07/08(火) 11:12:40.53 .net
>>90 にならってみた
nkf ← 日本語 / 自動判定有り / 入っていない事がある / 素敵
iconv ← 多言語 / 自動判定無し / POSIX / i昆布とか名前が嫌い
>>84 が日本語と限定してないので nkf と思っても、考えてしまった
>>91 iconv -c とか?
>>86
コンパイル時に使用するスクリプトでは、場合により v7 shell でも動く様に書いた方がいい
みたいです
autoconf マニュアル (24 April 2012) を見ると v7 shell や SVR2 がどうのと書いています
# commentsも使うなとか言い出す輩です。: comments とかは何かで使った覚えが有るけど

>>78 でポータビリティで通じない奴はタコだと。確かに
>>74 なるほど、全ての場合についてのコメントが参考になります
コンピュータと電算機の様に、カタカナvs漢字については個人・職業差も有りますが、
>>51 >>74 で可搬性を積極的に押される方がいるし、
>>63 >>78 は特にポータビリティ押しではないので、今のところ可搬性に決まりですか?

95 :名無しさん@お腹いっぱい。:2014/07/08(火) 11:13:47.31 .net
テンプレがどうでも良い方は、どうでも良いとして、>>65 >>73 の意見もあるので、
話題が尽きた時等、スクリプトの話の邪魔にならない程度に、遠慮ぎみに進めたいと思います

特にレスが無ければ、長いという意見と可搬性という意見で、>>71 を元に可搬性としたものに
なりそうです

96 :名無しさん@お腹いっぱい。:2014/07/08(火) 11:24:27.61 .net
iconv -c でも駄目な場合がある。
nkfはそういう場合でもデコード頑張る。

97 :名無しさん@お腹いっぱい。:2014/07/08(火) 12:43:54.29 .net
nkfの方が日本語を扱う上で現実的

98 :名無しさん@お腹いっぱい。:2014/07/08(火) 12:48:17.25 .net
この程度のテンプレは長いに入らん
スレ立てる人が面倒で無ければテンプレ付ければいいし
面倒なら誰かに任せてもいい

99 :名無しさん@お腹いっぱい。:2014/07/08(火) 15:55:56.14 .net
いや長い
まぁどうせ1回読んだらもう読まないし長いから何が困るってこともないんだが
その長いテンプレを議論する為に何レスも長文が続くのはゴメンだわ

100 :名無しさん@お腹いっぱい。:2014/07/08(火) 19:18:04.90 .net
>>95
そうそう、
http://peace.2ch.net/test/read.cgi/bgame/1373037042/
のテンプレと比べたら大したことないよね

101 :名無しさん@お腹いっぱい。:2014/07/08(火) 23:55:30.14 .net
ふむ。ちょっとテンプレ短すぎかもしれないね

102 :名無しさん@お腹いっぱい。:2014/07/09(水) 01:02:34.06 .net
>>100
テンプレくっそ笑ったwww

103 :名無しさん@お腹いっぱい。:2014/07/09(水) 01:32:21.63 .net
こ、これは凄いなw

104 :名無しさん@お腹いっぱい。:2014/07/09(水) 01:46:32.61 .net
>>102
そのスレのテンプレはこれでもかなり簡略化されたほう
過去ログだと200レスくらいテンプレだったりする2chでは伝説のスレ

105 :名無しさん@お腹いっぱい。:2014/07/09(水) 02:58:02.90 ID:H147htlKQ
とある学校に勤務しているものです。すみませんが、質問させてください。
linuxのfortranコンパイラ(g77)で、

g77 hogehoge.f -o hogehoge.f

とやると、実行ファイルがソースを上書きするので困っています。
自分はさすがに気をつけていますが、学生がたまに失敗してしまいます。
以前はf2c用のシェルスクリプトを少し修正して上書きしないように
していたのですが、勤務先が変わってそのスクリプトが手元にありません。

とりあえず、/usr/bin/f77に

#!/bin/sh
cp $1 $1.backup
/usr/bin/g77 $*

というような、サルでもわかるようなシェルスクリプトを書いて、
ソースをbackupファイルに一時保存させてしのいでいるのですが
はっきりいって美しくありません。ソースをリードオンリーにして
コンパイル後に再びパーミッションを戻すことも考えたのですが、
コンパイル中に Ctrl-Cで逃げてしまうと不都合が生じます。

ようは第一引数(hogehoge.f)と -o 以下の引数が同じであれば
警告を出してexitするようにすればいいのですけれど、
私がシェルスクリプトを書いていた時代はすでに20年以上前の遠い昔、
細かな文法は忘却の彼方です。

どなたかお優しいかた、助けていただけるとありがたいです。
よろしくお願いします。

106 :名無しさん@お腹いっぱい。:2014/07/09(水) 07:17:36.50 .net
>>100 >>104
100レス目にふさわしい書き込みGJ
111レスでもすごいが、以前は200もあったのか!? 個性的なスレだ

107 :名無しさん@お腹いっぱい。:2014/07/09(水) 21:13:58.36 .net
>>100
キーボードでスクロールする俺には辛いテンプレだわ…w

108 :名無しさん@お腹いっぱい。:2014/07/11(金) 11:29:07.96 .net
このスレって「シェルスクリプト高速開発手法入門」とかUSP MAGAZINEとか読んでる人いるの?

109 :名無しさん@お腹いっぱい。:2014/07/11(金) 11:59:21.47 .net
USP MAGAZINE → 定期購読
シェルスクリプト高速開発手法入門 → 買ったけど積ん読状態

110 :名無しさん@お腹いっぱい。:2014/07/12(土) 02:57:49.50 .net
高速開発手法って発売前にちょっと噂になって興味あったけど、アマゾンの「なか見!」読んだら一気に冷めたわ
Cとかで書いたプログラムをシェルから実行するだけみたいだし、本書で解説するbashCMSは著者自身は使って無くて、
WordPress使った方が得って著者自身が書いてて、え?じゃあ意味無いじゃんって 完全にネタ本

111 :名無しさん@お腹いっぱい。:2014/07/12(土) 03:04:31.69 .net
釣れればいいんですよ釣れれば。
>>109みたいにお金出してくれる人が偉いんです。

112 :名無しさん@お腹いっぱい。:2014/07/12(土) 03:19:42.90 .net
ここシェルスクリプトについての愚痴でもいいんすか?

いま、Visual Cで書かれたソースコードを
c shellにマイグレーションするという
とんでもないプロジェクトに今月から投入された
俺に慰めの言葉とアドバイスをくれ

あと質問だが、shellスクリプトとシェルスクリプト、どっちが正しい表記?

113 :名無しさん@お腹いっぱい。:2014/07/12(土) 04:01:04.76 .net
>>112
君は多分自分の仕事をきちんと理解してないなw

114 :名無しさん@お腹いっぱい。:2014/07/12(土) 04:09:54.37 .net
c shellて忌まわしきはcshのcshだよね

115 :名無しさん@お腹いっぱい。:2014/07/12(土) 07:59:48.46 .net
gccとかmakeとか、シェル上のコマンドを使ってCプログラムを開発という意味だったりして

116 :名無しさん@お腹いっぱい。:2014/07/12(土) 14:35:12.56 .net
>>109-110
実は自作自演

117 :名無しさん@お腹いっぱい。:2014/07/12(土) 14:41:47.48 .net
シェルスクリプトとはほとんど関係ないけど、とりあえずネタふり
http://overthewire.org/wargames/bandit/

118 :名無しさん@お腹いっぱい。:2014/07/12(土) 20:21:13.77 .net
シェルterminalに直接ソースを書いてhello worldってできるの?

119 :名無しさん@お腹いっぱい。:2014/07/12(土) 22:19:06.09 .net
http://peace.2ch.net/test/read.cgi/unix/1331382186/841

120 :名無しさん@お腹いっぱい。:2014/07/14(月) 00:42:07.40 .net
はじめまして、誘導されて来ました。質問させて下さい。 ubuntu 11.20です。

1 yyyy-mm-dd
...
n yyyy-mm-dd

というテキストから、各行を名前に持つディレクトリを
n個 生成するのはどうしたらできますか?
また、できたディレクトリに、各日に撮影されたデータを
移動するうまいやり方があったら教えて下さい。
ファイル名の頭がyyyy-mm-ddとなっているのと、exif情報があります。

iphoneで撮影してdropboxのcamera uploadsに溜まっている 写真を整理しようと思い、

ls -h
cut -c-11
uniq

を調べながら使って冒頭のテキストを作るところまでできたところです。
「それならそもそもこういうやり方をすればもっと上手い」とかでも構いません。
当方プログラミングはほとんどわかりませんが、以上よろしくおねがいします。

121 :名無しさん@お腹いっぱい。:2014/07/14(月) 01:32:38.62 .net
>>120
cat テキスト | xargs mkdir でディレクトリを作れる。

テキストを使わないなら
ls -1 | cut -c -11 | uniq | xargs mkdir
でもいいと思う。

ファイルの移動は、ファイルとディレクトリの 4文字2文字-2文字(日付の部分) が一致することを利用する。
for i in ????-??-?? ; do mv -i "$i"?* "$i"/ ; done

| (パイプ)と xargs と ? と for文 で出来るから、意味を調べていくといいと思う。

122 :名無しさん@お腹いっぱい。:2014/07/14(月) 01:33:41.74 .net
>>120
mkdir2種類。
$ cat dates |while read n date;do mkdir $date;done
$ cut -d ' ' -f 2 dates |xargs mkdir

move
$ find . -mindepth 1 -type d -printf "%f\n"|while read d;do find . -type f -name "$d*" -exec mv {} $d \; ;done

123 :名無しさん@お腹いっぱい。:2014/07/14(月) 01:40:38.50 .net
>>120
そもそもjhead -nで出来た気がする。

124 :名無しさん@お腹いっぱい。:2014/07/14(月) 01:58:51.30 .net
>>123
これで文句ないだろ。
$ jhead -nf%Y-%m%d/%f *.jpeg

-nfのfは重複防止だから、場合によってはない方がいいかも。

125 :名無しさん@お腹いっぱい。:2014/07/14(月) 23:22:43.26 .net
ログファイル等の検索で、
「ある文字列が最初に出た行以下すべてを表示する」場合、sedコマンド以外で簡単な方法ないでしょうか?
(有った気がするのですが忘れてしまいました)

126 :名無しさん@お腹いっぱい。:2014/07/14(月) 23:49:03.52 .net
>>125
grepで-Aをでかくするとか、grepで行番号出させて最初の行番号からtailするとか

127 :名無しさん@お腹いっぱい。:2014/07/15(火) 00:44:39.09 .net
>>125
$ awk '/ある文字列/,0' ログファイル
とか?

128 :名無しさん@お腹いっぱい。:2014/07/15(火) 09:12:14.40 .net
改行または先頭からある文字列までをげとしておいて
先頭からある文字列までをそれで置き換えればいいのさ

129 :名無しさん@お腹いっぱい。:2014/07/15(火) 09:29:12.58 .net
お前は何を言ってるんだ

130 :名無しさん@お腹いっぱい。:2014/07/15(火) 10:10:18.21 .net
>>125
なんで sed じゃだめなん?

131 :名無しさん@お腹いっぱい。:2014/07/15(火) 10:53:40.15 .net
>>125
findじゃないのか?

132 :名無しさん@お腹いっぱい。:2014/07/15(火) 11:20:14.93 .net
>>131
findでどうやるの?

133 :名無しさん@お腹いっぱい。:2014/07/15(火) 11:36:05.62 .net
ぱっと見awkで簡単にいけそうだなっと思ったが
>>127がどうなってんのか簡単過ぎてよくわからないw

134 :名無しさん@お腹いっぱい。:2014/07/15(火) 11:42:15.10 .net
sedがダメという状況でawk使うというのは解決になってない気がしなくもない。

>>133
パターン条件だけ書いてデフォルトprintしてるだけだろ

135 :名無しさん@お腹いっぱい。:2014/07/15(火) 11:48:32.55 .net
>>133
行範囲の終了条件が 0(偽)だからいつまでも一致せず、最後の行までという意味になる。

136 :名無しさん@お腹いっぱい。:2014/07/15(火) 11:50:06.54 .net
>>133
sed -n '/regex/,$p' といっしょ。awk はファイル終端を表す $ が使えないので、
$ のかわりに常に偽の 0 で代用してる。

137 :名無しさん@お腹いっぱい。:2014/07/15(火) 11:52:21.20 .net
ちょっと苦しいが、>>126以上の案が思いつかん…
tail -n $(( $(wc -l < file) - $(grep -c 'pattern' file | head -n 1) )) file
なんかすごい簡単にいけそうなのになにこれキモい…
sedならsed '/pattern/,$!d' fikeでいいのに

138 :名無しさん@お腹いっぱい。:2014/07/15(火) 11:52:49.79 .net
なるほど
,0の部分がよくわからなかったんだ
0が一致しないから終わりまで全部って意味になるのね

139 :名無しさん@お腹いっぱい。:2014/07/15(火) 12:01:32.63 .net
>>127みたいに簡単に書けるならsedでもawkでもいいんじゃね?w

140 :名無しさん@お腹いっぱい。:2014/07/15(火) 12:17:18.82 .net
俺の中ではsedでいいじゃんという結論になっている

141 :名無しさん@お腹いっぱい。:2014/07/15(火) 13:02:52.08 .net
なんでsedじゃだめなんだろう。

142 :名無しさん@お腹いっぱい。:2014/07/15(火) 13:17:40.07 .net
ある文字列の検索が終ったあとは余計なCPUパワーを使わずに単純出力させたい。
sedを使う方法だとログを表示中(| less してるとかを想定)は、ずっとsedプロセスが残ったままで、それを経由するので無駄。
とか?

143 :名無しさん@お腹いっぱい。:2014/07/15(火) 13:19:21.62 .net
>>137
>>126 はこんな感じとして、どういう事?
tail -n "+$( grep -ne "$regex" "$file" | head -n 1 | cut -d : -f 1 )" "$file"

ついでに、マッチした行の n 行下からの印字 (GNU sed)
sed -ne "/${regex}/,\$ { /${regex}/,+$(( n - 1 )) d; p }" "$file"

144 :名無しさん@お腹いっぱい。:2014/07/15(火) 13:29:06.38 .net
>>142 がいいことを言った。
lessで表示する前提なら、

less +/ある文字列 logfile

だけでいいじゃんw

145 :名無しさん@お腹いっぱい。:2014/07/15(火) 13:37:26.67 .net
>>142
それsed以外の方法でもたいてい同じになるんじゃね。

146 :名無しさん@お腹いっぱい。:2014/07/15(火) 13:39:25.76 .net
なぜsed禁止なのか>>125に聞きたい。
外野の憶測じゃないく。

147 :名無しさん@お腹いっぱい。:2014/07/15(火) 13:55:45.10 .net
>>142
つきるめるなら、文字列がマッチした時点でその行の先頭を指してる標準出力ファイルディスクリプタをもったまま
何らかのプログラムをexecするプログラムを作れということか!
いらねえw

148 :名無しさん@お腹いっぱい。:2014/07/15(火) 13:57:06.69 .net
「男は度胸!何でも試してみるもんさ」

149 :名無しさん@お腹いっぱい。:2014/07/15(火) 14:01:24.62 .net
>>146
禁止なんて誰も書いてないだろ
sedより簡単な方法があったような気がするから教えてだろ。

150 :名無しさん@お腹いっぱい。:2014/07/15(火) 14:15:08.24 .net
>>149
> sedより簡単な方法があったような気がするから教えてだろ。
そうは書いてない。

151 :119:2014/07/15(火) 14:28:02.53 .net
みなさんありがとうございました。>>121で思い通りのことができて嬉しいです。
雰囲気以上のことはあまりわかりませんでしたが調べてみます。
使いこなせるようになりたいのでまた疑問ができたら質問させて下さい。
ありがとうございました。

152 :名無しさん@お腹いっぱい。:2014/07/15(火) 15:02:59.04 .net
>>150
どう解釈しても良いけど「sed禁止」と読み取れる
文言はどのへん?

153 :名無しさん@お腹いっぱい。:2014/07/15(火) 15:08:29.18 .net
禁止というのはおれの誤読かもしれないけど
それならそうと>>125が訂正してくれればいい。

154 :名無しさん@お腹いっぱい。:2014/07/15(火) 15:40:34.02 .net
ログファイル等の検索で、
「ある文字列が最初に出た行以下すべてを表示する」場合、sedコマンド以外で簡単な方法ないでしょうか?
(有った気がするのですが忘れてしまいました)

それほど複雑な文言じゃないが

155 :名無しさん@お腹いっぱい。:2014/07/15(火) 15:45:07.25 .net
おそらく >>144 が期待される回答

156 :名無しさん@お腹いっぱい。:2014/07/15(火) 17:23:09.40 .net
sedでも簡単だけど、言語かコマンドかでフィーリングが違うな。
awkでも出来るけど、なるべくcut使ったり。

157 :名無しさん@お腹いっぱい。:2014/07/15(火) 20:26:40.19 .net
awkは「言語としても使えるコマンド」って印象があるなあ
プログラマだからそう思うのかな

158 :名無しさん@お腹いっぱい。:2014/07/16(水) 01:50:47.65 .net
>>144を見てlessって思ったより便利なのかと思って試したんだが、
これlessで眺めるの前提だからうまく機能するんだな
これ利用してファイルに吐き出す方法ないものか

159 :名無しさん@お腹いっぱい。:2014/07/16(水) 02:02:13.79 .net
>>158
表示されてないだけで、読み込まれてはいるんだから、何か違う気が。

160 :名無しさん@お腹いっぱい。:2014/07/16(水) 20:57:53.64 .net
awkとかsed使うくらいならperlの方がいい
ポータブルだしね

161 :名無しさん@お腹いっぱい。:2014/07/16(水) 21:59:50.66 .net
>>160
コマンドとして考えるとperlはちょっとデカいかな
長いスクリプト書くなら、複数プロセスを通すより軽くて良いが

162 :名無しさん@お腹いっぱい。:2014/07/16(水) 22:06:31.32 .net
このスレで言うのもなんだが、awkとsed覚える前にPerl覚えちゃったクチだわ
awk/sed入っててPerl入ってないなんて組み込み系か宗教上の理由じゃない限り有り得ないし

さらにzshが意外とzsh内で完結できる守備範囲広いからそっちの方も勉強するようになって
ますますawk/sedは覚える機会が…

163 :名無しさん@お腹いっぱい。:2014/07/16(水) 22:32:42.77 .net
俺もawk,sed覚える前にperl覚えたけど
大抵のことはbash,awk,sedその他で出来てしまうから
逆にperl書かなくなっちゃた派だな

164 :名無しさん@お腹いっぱい。:2014/07/16(水) 23:01:49.69 .net
perlのワンライナーがキモくてどうも使う気になれない

165 :名無しさん@お腹いっぱい。:2014/07/16(水) 23:08:27.28 .net
俺の場合、インタラクティブにはsed/awk
その組み合わせをメモするついでにシェルスクリプトにする場合もある
何にしてもshebangにsedやawkを書くことはないな、shになる

最初からスクリプトとして書くつもりならperlになるかな
こちらは逆にシェルスクリプトに埋め込むことを滅多にしない

166 :名無しさん@お腹いっぱい。:2014/07/16(水) 23:09:55.07 .net
perlはワンライナーに限らずキモい使い方される事の多い環境。
ワンライナーではキモいコード使うことが多いってだけで、
perlワンライナーのキモさは本質的にperlそのもののキモさ。

キモいけどまぁあれはあれで便利なもんだよ。キモいけど。

167 :名無しさん@お腹いっぱい。:2014/07/16(水) 23:14:05.74 .net
awkとかsedは、ヒアドキュメントにして見づらくならない程度。
長くて2〜30行以内。
あと、拡張正規表現が標準正規表現と互換性(ほんの少しだけど)がないから、めんどくさい。

168 :名無しさん@お腹いっぱい。:2014/07/16(水) 23:15:14.38 .net
perlのキモさを見て使いこなしたくなったけど結局勉強していない

169 :名無しさん@お腹いっぱい。:2014/07/16(水) 23:58:16.92 .net
perlでがっつりスクリプト書くならCで書いちゃうなw
正規表現でさらっと処理するならawkかsedで充分。

170 :名無しさん@お腹いっぱい。:2014/07/17(木) 00:01:12.64 .net
最近流行のキモかわいいって奴

171 :名無しさん@お腹いっぱい。:2014/07/17(木) 00:12:53.36 .net
Rubyのほうが相性いい

172 :名無しさん@お腹いっぱい。:2014/07/17(木) 02:21:44.72 .net
Apacheの1日分のログで、IPアドレスごとに1分ごとの平均接続数を一覧で確認したいのですが、どうゆう方法で1分ごとの平均を出したらいいのでしょうか?あ、スレ違いとかスレ目的とずれてたらスルーしてください。

173 :名無しさん@お腹いっぱい。:2014/07/17(木) 03:58:54.58 .net
>>172
出現回数数えて1日で割ればいいだろ。

174 :名無しさん@お腹いっぱい。:2014/07/17(木) 09:15:03.26 .net
>>172
確かに!

DoSとかクロールとかが埋もれないようにとか思ってたけど、それで十分ですね。
ありがとうございます!

難しく考えすぎてました...orz

175 :名無しさん@お腹いっぱい。:2014/07/19(土) 13:56:55.63 .net
124と似ていますが、行番号だけの表示をさせたい…
シェル作成しているのだが(行番号を取得してログの一定範囲を表示させたい)んだが、sshで別サーバのログをgrep,sed,awkしてたりするんだが、上手くいかない…
わかりづかくて申し訳ない

176 :名無しさん@お腹いっぱい。:2014/07/19(土) 14:08:26.92 .net
わからんなw

177 :名無しさん@お腹いっぱい。:2014/07/19(土) 14:09:31.57 .net
今まで書いた部分をstackoverflowあたりに貼って質問してみれば

178 :名無しさん@お腹いっぱい。:2014/07/19(土) 14:10:19.25 .net
>>175
awk '/ある文字列/{print NR}' logfile

179 :名無しさん@お腹いっぱい。:2014/07/19(土) 14:12:15.92 .net
>>175
sed -n '/ある文字列/=' ログファイル

180 :名無しさん@お腹いっぱい。:2014/07/19(土) 14:17:49.12 .net
>>178-178
最初に一致した行番号だけ表示するならqやexitを追加しとけ。

sed -n '/ある文字列/{=;q}' file
awk '/ある文字列/{print NR;exit}' file

181 :名無しさん@お腹いっぱい。:2014/07/19(土) 14:42:31.15 .net
>>180
>>180
>>180
どうもです。まださわりはじめたばかりでどうも入りづらく…
ちなみに私が実施していたコマンド
set 変数 = `ssh 鯖 " grep -n 文字 ファイル | tail -1 | sed 's/ /: g' | awk '{print $1}'
環境がいまないので教えていただいたのを試してみたい…
ちなみに最後にヒットした行番号を抜き出します。

パイプの使い方がいまいちわからん…このコマンドだと最後の行の文章まで引き出してしまう

182 :名無しさん@お腹いっぱい。:2014/07/19(土) 14:50:17.23 .net
>>181
最後にヒットした行番号かよ
ほれ↓

awk '/ある文字列/{t=NR}END{print t}' ファイル

183 :名無しさん@お腹いっぱい。:2014/07/19(土) 14:56:32.05 .net
>>182
.なんでそんなに分かるんだwww
ありがとうございます。

184 :名無しさん@お腹いっぱい。:2014/07/19(土) 15:38:14.87 .net
手元に何らかのUnix系環境あると楽だぞ
UnixやBSD、LinuxやMacを使ってるならそこで色々試せばいいし
Windowsでも、ちょっとお試し程度ならCygwinでも問題ない
ただCygwin独自の問題もあること考えると仮想マシンにUnix系の環境あると便利

185 :名無しさん@お腹いっぱい。:2014/07/19(土) 15:51:10.13 .net
知らない間に、レス数が増えてるな。なんか、反応が早すぎるよね

>>175 出遅れたけど一応 sed
sed -e '=' "$filename" | sed -n 'N; /'"$regex"'/{ s/\n.*//; h }; ${x; p}'

そして、>>181 のを直してみた
grep -n "$regex" "$filename" | tail -n 1 | cut -d : -f 1

186 :名無しさん@お腹いっぱい。:2014/07/19(土) 21:46:32.14 .net
>>182
もしよろしければなぜそうなるか教えていただきたい…
私が作成したコマンド含めて…

187 :名無しさん@お腹いっぱい。:2014/07/19(土) 23:51:41.96 .net
書いた人じゃないが
awk '/ある文字列/{t=NR}END{print t}' ファイル
ある文字列 にマッチすると、その行の行番号をtに保存する
END(つまりすべての行読み込みが終わった後)に最後にtに保存された行番号を表示する

188 :名無しさん@お腹いっぱい。:2014/07/20(日) 06:34:00.38 .net
>>187
あ、なるほど。
説明さんくす!

189 :名無しさん@お腹いっぱい。:2014/07/20(日) 07:00:55.80 .net
NRはNumber of Recordとかそんな感じの変数。

190 :名無しさん@お腹いっぱい。:2014/07/20(日) 19:48:31.71 .net
テキスト中に現れる<text:s c="n"/>のような文字列を
n個の半角スペースに置き換えるにはどうすればいいでしょうか
たとえば<text:s c="23"/>だったら、半角スペース23個に置き換えられるとうれしいのですが

191 :名無しさん@お腹いっぱい。:2014/07/20(日) 22:09:44.57 .net
>>190
これもawk案件かな。
改行が入ってたりはしないんだな?

192 :名無しさん@お腹いっぱい。:2014/07/20(日) 22:49:16.40 .net
>>190
全ての行をechoで出力するように置換して、
該当の部分を`printf %23s " "`に置換、
それらを評価してテキストを出力する。

この方法は元のテキストで、shが解釈する文字をどの程度使ってるかでコストが変わる。

193 :名無しさん@お腹いっぱい。:2014/07/20(日) 23:03:44.63 .net
>>190,190
とりあえずやっつけで、、、

$ cat hoge.txt | awk '{if(match($0, /^(.*)<text:s +c="([0-9]+)"\/>(.*)$/, m)){printf("%s%" m[2] "s%s\n", m[1], " ", m[3])}else{print}}'

これは <text:s〜> が同一行に複数あったらダメだな。。。
誰かもっとスマートな方法をお願い

194 :名無しさん@お腹いっぱい。:2014/07/20(日) 23:34:45.34 .net
Perl なら一行で…

$ cat hoge.txt | perl -pe 's@<text:s +c="(\d+)"/>@sprintf("%$1s", " ")@ge'

195 :名無しさん@お腹いっぱい。:2014/07/21(月) 00:03:55.79 .net
ついにperlさんが活躍するのか
sedで頑張ろうと思ったがどうやっても複雑になるからあきらめた
前スレに出てたスクリプトを出力するスクリプトを書けばって気はするが、作り方が分からん……

196 :名無しさん@お腹いっぱい。:2014/07/21(月) 05:21:43.96 ID:L6Zz/yiU+
>>190,195
192だが、やってみたらこうなった。
$ cat in.xml|sed -e "s/^\(.*\)\$/echo '\1'/" -e 's|<text:s c="\([0-9]\+\)"/>|'\''"$(printf "%\1s" " ")"'\''|g'|while read;do eval $REPLY;done
printf埋め込むまわりのクォートがわけわからんことに。
こんな感じのを作ってる。入力にシングルクォートがあったら終わりかな。
eval echo '<?xml version="1.0"?>'
eval echo ' <p>'"$(printf "%10s" " ")"'</p>'

197 :名無しさん@お腹いっぱい。:2014/07/21(月) 05:24:03.35 .net
>>191,195
192だが、やってみたらこうなった。
$ cat in.xml|sed -e "s/^\(.*\)\$/echo '\1'/" -e 's|<text:s c="\([0-9]\+\)"/>|'\''"$(printf "%\1s" " ")"'\''|g'|while read;do eval $REPLY;done
printf埋め込むまわりのクォートがわけわからんことに。
こんな感じのを作ってる。入力にシングルクォートがあったら終わりかな。
eval echo '<?xml version="1.0"?>'
eval echo ' <p>'"$(printf "%10s" " ")"'</p>'

198 :名無しさん@お腹いっぱい。:2014/07/21(月) 06:28:07.01 .net
sed で2通り。2番目は、長いです
1. POSIX shell and GNU sed
#!/bin/sh
ReTag1='<text:s +c="'
ReTag2='"/>'

sed -re '
 : Loop
  s@^(.*)'"${ReTag1}"'([0-9]+)'"${ReTag2}"'(.*)$@echo '\''\1'\''"$( printf "%\2s" " " )"'\''\3'\''@e
 t Loop
'

199 :名無しさん@お腹いっぱい。:2014/07/21(月) 06:29:23.32 .net
2. 連投失礼します
ReTag1='<text:s \{1,\}c="'
ReTag2='"/>'

sed -e '
# using: unix.stackexchange.com/questions/36949/ the answer of Simon Richte
: Loop1
\@'"${ReTag1}"'[0-9]\{1,\}'"${ReTag2}"'@ {
: Loop2
s@\('"${ReTag1}"'[ <]*\)0\([0-9]*'"${ReTag2}"'\)@\1<\2@
s@\('"${ReTag1}"'[ <]*\)1\([0-9]*'"${ReTag2}"'\)@\1< \2@
s@\('"${ReTag1}"'[ <]*\)2\([0-9]*'"${ReTag2}"'\)@\1< \2@
s@\('"${ReTag1}"'[ <]*\)3\([0-9]*'"${ReTag2}"'\)@\1< \2@
s@\('"${ReTag1}"'[ <]*\)4\([0-9]*'"${ReTag2}"'\)@\1< \2@
s@\('"${ReTag1}"'[ <]*\)5\([0-9]*'"${ReTag2}"'\)@\1< \2@
s@\('"${ReTag1}"'[ <]*\)6\([0-9]*'"${ReTag2}"'\)@\1< \2@
s@\('"${ReTag1}"'[ <]*\)7\([0-9]*'"${ReTag2}"'\)@\1< \2@
s@\('"${ReTag1}"'[ <]*\)8\([0-9]*'"${ReTag2}"'\)@\1< \2@
s@\('"${ReTag1}"'[ <]*\)9\([0-9]*'"${ReTag2}"'\)@\1< \2@
t Loop2

200 :197 の続き:2014/07/21(月) 06:31:35.30 .net
  : Loop3
   s@\('"${ReTag1}"'< *\) <\([ <]*'"${ReTag2}"'\)@\1< \2@
   t Loop3
  
   s@'"${ReTag1}"'<*\( *\)'"${ReTag2}"'@\1@g
 }
 t Loop1
'
197 のインデントを置換するのを忘れた

201 :名無しさん@お腹いっぱい。:2014/07/21(月) 06:38:37.60 .net
197 ですが、@\1<数字分の半角スペース\2@ で置換します
連続した半角スペースが、1つになってしまったので、読み替えて下さい

202 :189:2014/07/21(月) 11:38:36.49 .net
>>190です。みなさんありがとうございます。
いただいたどの案でも目的を達することができました。

203 :189:2014/07/21(月) 11:39:16.74 .net
>>192
printfを使うというのは目からウロコでした。
ある文字を指定された回数だけ出力する(expand?のような、あるいはBASICの
STRING?のような)コマンドを探したりしていたのですが見つからず…

204 :189:2014/07/21(月) 11:40:06.63 .net
>>191,192
できました。同一行に複数ある場合ですが、ちょっと後出しみたいで申し訳ないのですが、
入力をあらかじめタグの切れ目で改行しておけばよいので全然問題ないです。

205 :189:2014/07/21(月) 11:40:55.78 .net
>>194
ううむ、簡潔ですね。さすがperlです。sedやawkでだめならperlかなと思っていたので
そのものズバリの回答ありがたくいただきました。

206 :189:2014/07/21(月) 11:41:42.39 .net
>>197
ご明察のとおり元のテキストファイルはxmlファイルで、
OpenOffice Writerの文書ファイルからcontent.xmlを取り出したものです。
evalを使ったスクリプト、期待どおり動作しました。入力中にシングルクォートは
ありませんでしたが、アスタリスクがあって、ちょっと副作用出ました。
この辺が>>192さんのおっしゃるコストでしょうか。

207 :189:2014/07/21(月) 11:42:20.07 .net
>>198
GNU sedだとeコマンドが使えるのですね。ループの使い方とあわせてとても勉強になりました。

>>199-199
うーん、そういう方法があったか!と唸ってしまいました。
元記事Simon Richterさんのsedで加減の演算を実装してしまう方法はとてもマニアックですが
sedでもここまでできるという見本のような使い方だと思いました。

208 :189:2014/07/21(月) 11:47:24.63 .net
上にもちょっと書きましたが、入力ファイルはOpenOffice Writerの.odtファイルに含まれているcontent.xmlで、
unzip -qq -c document.odt content.xml | sed -e 's,<[^>]\+>,,g'
このような感じのフィルタスクリプトでxmlタグを取り除いてやると、元の文書のうち文字情報だけを
取り出すことができるので、これを~/.lessfilterに登録しておけばlessでファイルの内容をさっと確認
できるなと思ったのが出発点です。

しかし複数のスペースが入力されているところは<text:s text:c="n">(すみません、正しくはこうでした)
のようにxmlの記法?でまとめられてしまっていて、これがsedでは(というか自分の力量では)
うまく変換できなかったので、質問させていただいた次第です。

209 :名無しさん@お腹いっぱい。:2014/07/21(月) 12:59:04.26 .net
xmlなんだからパーサーに食わせればいいと思う。

210 :名無しさん@お腹いっぱい。:2014/07/21(月) 13:30:11.09 .net
パーサー使っていいならodt2txtもありになってしまうじゃん
あくまで標準的なコマンドでやりたかったんじゃないの?

211 :名無しさん@お腹いっぱい。:2014/07/21(月) 13:31:59.53 .net
>>206
>>197だけど、evalは危険なので気をつけて下さいね。何らかの方法で任意のコマンドが実行できるかも知れない。

>>209
xmlstarletでやろうとしたけど挫折した。純粋なxsltなら出来そうだけど。

212 :名無しさん@お腹いっぱい。:2014/07/21(月) 13:40:58.27 .net
>>210
時間の無駄。
XMLパーサの再発明(しかも超劣化版)してどうするの?

213 :名無しさん@お腹いっぱい。:2014/07/21(月) 14:10:56.03 .net
別にパーサでやるのも、あくまでシェルスクリプトでやるのもアリでしょ。
そこの議論やるより、スクリプトを書いたほうが建設的。

214 :名無しさん@お腹いっぱい。:2014/07/21(月) 14:18:33.58 .net
>>212
なんでも使える環境で作業してるなら Perl でも Python でも Ruby でも使えば良いじゃん
なんでこのスレいるの?

215 :名無しさん@お腹いっぱい。:2014/07/21(月) 18:39:51.57 .net
最近は>>190みたいにxslt使うまでもないのは
s.split(/<(^[>]+)>/m).forEach
みたいな感じでnode.jsだな 改行入っててもOKだし

216 :名無しさん@お腹いっぱい。:2014/07/21(月) 22:19:23.30 .net
今回はperlさんが最適解っぽいな
しかしawkで>>193のようなやり方があるとは
matchの3つ目の引数使って後方参照出来るってことだよな?
これは使いこなすと強そうだ

217 :名無しさん@お腹いっぱい。:2014/07/21(月) 22:55:42.90 .net
gawk限定でもいいのかっていうのはこのスレではやや気になる。
自分だけなら好きなように使うけど(特にgawk4.0以降の多次元配列)。

218 :名無しさん@お腹いっぱい。:2014/07/21(月) 23:04:16.52 .net
pythonやrubyは?

219 :名無しさん@お腹いっぱい。:2014/07/22(火) 01:25:48.78 .net
#!gwak
と書いて置けばいいさ

220 :名無しさん@お腹いっぱい。:2014/07/22(火) 02:03:04.51 .net
>>219
一行目からtypoってのはせつない。

221 :名無しさん@お腹いっぱい。:2014/07/22(火) 02:19:18.56 .net
shebang行に相対パスは環境依存…とかそれ以前にグワック

222 :名無しさん@お腹いっぱい。:2014/07/22(火) 14:57:15.09 .net
空白の行を取り除くとして、方法が何通りかあると思うんですけど
どんな方法がありますか?また一般的な方法はどれですか?

223 :名無しさん@お腹いっぱい。:2014/07/22(火) 15:00:37.53 .net
>>222
grep -v ^$
空行ならこうだけど、空白の行なら'^ \+$'かな。

224 :名無しさん@お腹いっぱい。:2014/07/22(火) 15:54:13.53 .net
「空白行を取り除く」という言葉を重視するなら sed かな

225 :名無しさん@お腹いっぱい。:2014/07/22(火) 16:03:13.55 .net
tr -s \\n #空行を取り除く

226 :名無しさん@お腹いっぱい。:2014/07/22(火) 16:09:28.69 .net
質問は空行じゃなくて空白行。

227 :名無しさん@お腹いっぱい。:2014/07/22(火) 16:14:47.98 .net
空白行と空行ってなにか違うんですか?

228 :名無しさん@お腹いっぱい。:2014/07/22(火) 16:20:14.87 .net
空行は何もない行。
空白行は空白のみがある行。

229 :名無しさん@お腹いっぱい。:2014/07/22(火) 16:31:35.12 .net
s/\n+/\n/m

230 :名無しさん@お腹いっぱい。:2014/07/22(火) 16:32:18.04 .net
s/\n\s*\n/\n/m

231 :名無しさん@お腹いっぱい。:2014/07/22(火) 16:35:12.21 .net
それじゃ答えになってない。

232 :名無しさん@お腹いっぱい。:2014/07/22(火) 16:39:33.57 .net
sed様のお手を煩わすまでもない、
お前など、このgrepが排除してやるわ

# 仕様後出しアタック

grepを倒したからと言っていい気になるなよ
奴は正規表現四天王の中でも最弱

ここまで妄想した。

233 :名無しさん@お腹いっぱい。:2014/07/22(火) 16:42:45.97 .net
>>229
>>230
/^ \+$/d

sだけがsedではない。

234 :名無しさん@お腹いっぱい。:2014/07/22(火) 16:49:27.94 .net
>>229>>230はsedとは言ってない。

235 :名無しさん@お腹いっぱい。:2014/07/22(火) 18:57:35.09 .net
汎用性を考慮して行頭、行末、行頭と行末の空白文字を取り除くスクリプトを用意
#!/bin/sh
progname=`basename $0`
case $progname in
ltrim) sed -e 's/^[[:space:]]\+//g' "$@" ;;
rtrim) sed -e 's/[[:space:]]\+$//g' "$@" ;;
lrtrim) sed -e 's/^[[:space:]]\+//g' -e 's/[[:space:]]\+$//g' "$@" ;;
*) echo "unsupported program name: $0" 1>&2 ; exit 1 ;;
esac

誰かファイル末尾の空行を削除するスクリプト作って

236 :名無しさん@お腹いっぱい。:2014/07/22(火) 19:48:19.55 .net
少なくとも空行、空白行削除なら
>>223のをちょいとだけいじって
grep -v '^ *$'
でいい気がするんだが
sed使うほどでもないだろうこれ

237 :名無しさん@お腹いっぱい。:2014/07/22(火) 20:19:58.02 .net
>>228
ちょっとまって。
空白しかないんでしょう?
改行があったらダメじゃん?
でも改行ないと行じゃないよ?
あれ?

238 :名無しさん@お腹いっぱい。:2014/07/22(火) 20:21:24.69 .net
>>236
仕様後出しアタック

っタブ

239 :名無しさん@お腹いっぱい。:2014/07/22(火) 20:23:59.82 .net
全角スペースもお願いします。
全角スペースに見える未定義コードもお願いします。

240 :名無しさん@お腹いっぱい。:2014/07/22(火) 21:19:36.04 .net
>>235 sed でタブと全角スペース込み
unnamed)
 sed -e '
  : Loop
   N
   $ d
  /^[[:space:]\n]*$/ b Loop
 '
;;

241 :名無しさん@お腹いっぱい。:2014/07/22(火) 21:20:33.95 .net
>>239
お前みたいな曖昧な提案しかできない奴が仕様をまとめるから炎上するんだ

242 :238:2014/07/22(火) 21:34:16.78 .net
一々言う事でもないけど、"$@" つけ忘れた
こういうミスを、書き込む前に気付く様な人に、いつかなりたい

243 :名無しさん@お腹いっぱい。:2014/07/22(火) 22:29:32.36 .net
>>236
sedのdコマンドのほうが、意味的に近いかなと思うんよね
grepはどうしても「抽出する」イメージが強いコマンドだし

244 :名無しさん@お腹いっぱい。:2014/07/22(火) 22:30:45.89 .net
>>239
[[:space:]]
これの対象にならないならもうだめぽ

245 :名無しさん@お腹いっぱい。:2014/07/22(火) 22:35:40.42 .net
sedっていうとどうも編集役っていう先行イメージがな。置換とか
行の一部を編集ならsed、行丸ごと処理ならgrepだと勝手に思ってる
同じ処理ならgrepのほうが高速に動く……多分

246 :名無しさん@お腹いっぱい。:2014/07/22(火) 22:40:11.60 .net
>>239
バカには見えない文字があるので仕様通りです。

247 :233:2014/07/22(火) 23:00:49.86 .net
>>240
おお、さっそく作ってくださってありがとうございます。
tac と組み合わせればファイル先頭の空行も取り除くことができるので願ったり叶ったりです。

自分も早くパターンスペースやホールドスペース、ループを自在に操れるようになりたいです。

248 :名無しさん@お腹いっぱい。:2014/07/23(水) 10:33:53.58 .net
具体的な話しじゃないけど
無印良品のデータベースって市販の管理ソフトだと
効率が悪いんで、txtベースで資料を造ってボーンシェルかなにかで
検索システム造ったと聞いたが、cat|grepとかだったのかな。

249 :名無しさん@お腹いっぱい。:2014/07/23(水) 10:45:35.15 .net
>>248
話があやふやだな。
ぐぐればすぐソース出てくるじゃん。
http://www.atmarkit.co.jp/news/200909/07/lltv03.html

> cat|grepとかだったのかな。
UUOC

250 :名無しさん@お腹いっぱい。:2014/07/23(水) 11:47:14.88 .net
>>249
ありがとう。
ググルよりオマエに頼ってオマエを愛したい。

251 :247:2014/07/23(水) 11:49:25.56 .net
やだよ気持ち悪い。

252 :名無しさん@お腹いっぱい。:2014/07/23(水) 12:35:21.83 .net
>>232 >>250-249 笑った。四天王の中でも最弱とか、よく出てきそうなフレーズだなあ
と思って調べると、有名なネタですか

先頭の空行のも書いてみました。正規表現で2回走査する所がいまいちですが
unnamed2)
sed -e '
 0, /[^[:space:]]/ {
  /[^[:space:]]/! d
 }
'
;;

[ここか[:space:]ここに]
空白文字を足せば解決の様な気がしますが、落とし穴?

253 :名無しさん@お腹いっぱい。:2014/07/23(水) 18:59:04.95 .net
>>238
grep -v '^[[:space:]]*$'
ちょっと苦しいか

254 :名無しさん@お腹いっぱい。:2014/07/23(水) 23:57:04.71 .net
>>252
ファイル先頭の空行を削除するスクリプトありがとうございます。
アドレス0の使い方を学びました!

255 :名無しさん@お腹いっぱい。:2014/07/24(木) 13:40:13.62 .net
>>194
Perl は 'x' で文字列のリピートができるのか… '*' じゃないんだな

$ cat hoge.txt | perl -pe 's@<text:s +c="(\d+)"/>@" " x $1@ge'

256 :名無しさん@お腹いっぱい。:2014/07/24(木) 13:43:45.55 .net
catが無駄です

257 :名無しさん@お腹いっぱい。:2014/07/24(木) 13:49:57.72 .net
cat始まりとか割とよくやるよな。
最初だけcurl $url|tee cache|した時とか特に。

258 :名無しさん@お腹いっぱい。:2014/07/24(木) 13:55:08.80 .net
cat始まりで実行するのは素人。
コマンドライン上、ファイルを最初に書きたいなら、

< file script > outfile

ってやればいいだけ。catもパイプも要らん。

259 :名無しさん@お腹いっぱい。:2014/07/24(木) 13:57:57.68 .net
問題:この話題は過去何回目でしょう?

260 :名無しさん@お腹いっぱい。:2014/07/24(木) 14:22:21.45 .net
スクリプトではなく対話のシェルに打ち込むなら
ネコを使っておいた方がヒストリを検索するときに
まとまっていて楽w

261 :名無しさん@お腹いっぱい。:2014/07/24(木) 15:05:56.09 .net
>>256
そのツッコミが無駄

262 :名無しさん@お腹いっぱい。:2014/07/24(木) 15:55:01.75 .net
>>258
なるべくなら少ない方法を使い回したい。
あと入力がgzのものがあって、zcatに置き換えるのはありがち。

263 :名無しさん@お腹いっぱい。:2014/07/24(木) 18:41:09.48 .net
おれも最初に cat するクセがあったんだけど、以前このスレで違いを教わってやめた

cat するのとしないのとの、実行時間の違い
対象ファイルは DVD 版 KNOPPIX にあるファイル KNOPPIX (ややこしいな)

$ du -h KNOPPIX
4.0G KNOPPIX

$ time bash -c 'tail KNOPPIX > /dev/null'
real 0m1.811s
user 0m0.000s
sys 0m0.004s

$ time bash -c '< KNOPPIX tail > /dev/null'
real 0m0.182s
user 0m0.000s
sys 0m0.004s

$ time bash -c 'cat KNOPPIX | tail > /dev/null'
real 9m6.519s
user 0m4.148s
sys 0m28.584s

264 :名無しさん@お腹いっぱい。:2014/07/24(木) 19:05:01.60 .net
そんな差あったのか
パラメータにファイル指定するより標準入力に突っ込んだほうが早いというのは知らなかった
俺も今後は控えよう

265 :名無しさん@お腹いっぱい。:2014/07/24(木) 19:19:08.09 .net
その例は・・・w
catの次が標準入力を先頭から普通に読むタイプのフィルタならそこまで差はつかないと違う?
tailはちょっと特殊な読み方をするんじゃないのかな

266 :名無しさん@お腹いっぱい。:2014/07/24(木) 19:39:35.46 .net
じゃあ、tailの代わりに wc -c でどぞ。 -c も付けるんだぞ。

267 :名無しさん@お腹いっぱい。:2014/07/24(木) 19:56:43.08 .net
>>263の3番目だけは遅いブロックデバイスへのブロックリードが大量に発生するんだよね
catが全部読んでtailに渡しながら、tailは先頭から改行カウントするしかないからね
その結果I/O待ちのidle時間が膨大になる

1番目と2番目はtailがKNOPPIXのファイル記述子を直接得られるので、seekして後ろの方から読んで改行を探せる
その結果ブロックリードの量が激減するので時間がかからない

まあtailの特殊事情だから、wc -cならここまで差はつかないだろう

268 :名無しさん@お腹いっぱい。:2014/07/24(木) 20:00:30.78 .net
>>267
wc -c こそ大差がつくんだが、、

269 :名無しさん@お腹いっぱい。:2014/07/24(木) 20:09:45.96 .net
ほう。wc -c の方が大差がつくとなると何か自分が知らない仕組みがあるのかなあ?
とても興味があります

270 :名無しさん@お腹いっぱい。:2014/07/24(木) 20:17:46.27 .net
おお。たしかに差がでるなあ?なんでcat通したwcはこんな遅いんだ?

271 :名無しさん@お腹いっぱい。:2014/07/24(木) 20:19:56.37 .net
並列化が云々

272 :名無しさん@お腹いっぱい。:2014/07/24(木) 20:24:59.10 .net
ああ、なるほどwそりゃそうだw
wc -cだとデータの中身は見なくていいのね
だからファイル記述子が直接得られりゃ、即効で終われるのか

273 :名無しさん@お腹いっぱい。:2014/07/24(木) 20:30:26.87 .net
「cat file|」だと後段の入力はパイプだけど、「<file 」だと後段の入力はファイルになるんだっけ。
大抵は大丈夫だけど、物によっては動作自体異なる場合もあるのかな。

>>263>>264
2つ目ってキャッシュ効いてたりしないよな?

274 :名無しさん@お腹いっぱい。:2014/07/25(金) 08:31:16.26 .net
>>257
でも今回はそうじゃない。

275 :名無しさん@お腹いっぱい。:2014/07/25(金) 08:52:07.01 .net
>>274
>>262

276 :名無しさん@お腹いっぱい。:2014/07/25(金) 08:54:14.00 .net
>>275
>>274

277 :名無しさん@お腹いっぱい。:2014/07/25(金) 09:13:13.05 .net
>>276
言っている意味わかんないんなら黙ってろよ。

278 :名無しさん@お腹いっぱい。:2014/07/25(金) 09:28:17.80 .net
今回はzcatする予定もない

279 :名無しさん@お腹いっぱい。:2014/07/25(金) 10:07:22.00 .net
260 名無しさん@お腹いっぱい。 sage 2014/07/24(木) 15:55:01.75
>>258
なるべくなら少ない方法を使い回したい。

280 :名無しさん@お腹いっぱい。:2014/07/25(金) 10:18:05.92 .net
>>279
今回は使い回す予定もない

cat file |
より
< file
の方がタイプ数も少ない

281 :名無しさん@お腹いっぱい。:2014/07/25(金) 10:19:21.44 .net
>>280
好きにしろよ。ただし押し付けるな。

282 :名無しさん@お腹いっぱい。:2014/07/25(金) 10:20:16.66 .net
>>279は使いまわすんだよ。

283 :名無しさん@お腹いっぱい。:2014/07/25(金) 13:11:52.68 .net
>>260
<file gzip -d|
zcat file|
<file
cat file|
260の件と合わせてヒストリ集めるならリダイレクトの方がまとまりやすいかも

284 :名無しさん@お腹いっぱい。:2014/07/25(金) 14:36:59.66 .net
じゃそういう事で、
・cat|すんなハゲ
をテンプレに追加ね

285 :名無しさん@お腹いっぱい。:2014/07/25(金) 15:32:43.14 .net
              彡⌒ミ
             (´・ω・`) 三 また禿の話してる
             (|   |)
              (γ /  三
               し
              ○   三
ス───────────────────────────

286 :名無しさん@お腹いっぱい。:2014/07/25(金) 17:01:40.93 .net
cutすんなハゲ


   ∧_∧
   ( ;´Д`)
   ( つ 彡⌒ミ
   ) 「( ・∀・)
     |/~~~~~~ヽ

287 :名無しさん@お腹いっぱい。:2014/07/25(金) 17:13:54.07 .net
使いやすいほうでいい

288 :名無しさん@お腹いっぱい。:2014/07/26(土) 09:12:27.17 .net
無駄にかき回したくは無いが...テンプレと云う事で

対話シェルで入力するコマンドラインを、使いまわす場合、
当然変化するので、
複数ファイルになる場合や参考*1の様な例が有る事を考えると、
テンプレを意識する様な一般的な結論に至らない様に思います

同参考を読んでいると、スクリプトの場合でも、
cat | command の有用な事が有るので、併記するとか、
何かもう少し書き方を工夫する必要が有る様に思います
少し考えてみたので、次レスで

参考*1
Useful use of cat(1)
http://www.in-ulm.de/~mascheck/various/uuoc/
> ( cmd; cat file; cmd ) | cmd
> cat > textfile
> cat log1 log2 log3 | tr '[:upper:]' '[:lower:]'
> easy "intuitive" switching on the command line between different types input
> cat<<EOF|cmd

289 :名無しさん@お腹いっぱい。:2014/07/26(土) 09:13:21.15 .net
>>257 >>262 >>262 >>284 の主張も
9.b のリンク先に入っているので円満解決か?
具体的なテンプレ案を書いておきます

>>256-281 の議論を経て >>284 の提案 に有用な例を加えた
追加
□C. 初心者へのアドバイス
9. cat|すんなハゲ
 a. 詳細は "Useless Use of Cat" UUOC で検索して下さい
 b. 有用な場合も有ります Useful use of cat(1) 英文
  http://www.in-ulm.de/~mascheck/various/uuoc/

290 :名無しさん@お腹いっぱい。:2014/07/26(土) 10:58:33.06 .net
>>288
そのページはcatの有効的な使い方であって、cat|の有効的な使い方では無い
しかもこれ↓インチキ引用だし

> easy "intuitive" switching on the command line between different types input
> cat<<EOF|cmd

291 :名無しさん@お腹いっぱい。:2014/07/26(土) 11:00:53.46 .net
ああ、cat|だと本来のconcatも含まれちまうか。
cat file|すんなハゲ
かな

292 :名無しさん@お腹いっぱい。:2014/07/26(土) 11:26:34.76 .net
cat hoge | するなっていうかさ、してもいいんだけどさ。
無駄にやってダサいって思わんもんかな。
特に cat hoge | grep fuiga とか。

293 :名無しさん@お腹いっぱい。:2014/07/26(土) 11:37:37.21 .net
>>292
人に見せるもんじゃないしなぁ

294 :名無しさん@お腹いっぱい。:2014/07/26(土) 11:42:40.65 .net
多様性を殺したいのならwindowsだけ使ってればいいのに。

295 :名無しさん@お腹いっぱい。:2014/07/26(土) 11:43:23.99 .net
行番号つける時、cat file | cat -n とかw

296 :名無しさん@お腹いっぱい。:2014/07/26(土) 11:46:51.48 .net
最初にcatして中身見て、後を付け足して行くだろ。
< $file cat から始めるの?

297 :名無しさん@お腹いっぱい。:2014/07/26(土) 11:47:44.63 .net
>>296
zshなら桶

298 :名無しさん@お腹いっぱい。:2014/07/26(土) 11:53:46.86 .net
zshは、 <file だけで中身表示できる。catいらん。

299 :名無しさん@お腹いっぱい。:2014/07/26(土) 12:19:00.70 .net
zsh使いって顧客先のサーバに無断でzsh入れて使ってそう

300 :名無しさん@お腹いっぱい。:2014/07/26(土) 13:31:13.78 .net
ちらほらと行頭に< file の記述を見るんだけど、
wc -l < file
< file wc -l
だったらお前らはどっちが正しいって思うの?

301 :名無しさん@お腹いっぱい。:2014/07/26(土) 13:43:38.66 .net
>>300
どちらも正しい。
強いて言えば <file wc -l の方がcsh馬鹿よけになる。(cshではエラーになるので)

302 :名無しさん@お腹いっぱい。:2014/07/26(土) 13:45:58.98 .net
前者かな。cshでも使えるので

303 :名無しさん@お腹いっぱい。:2014/07/26(土) 13:58:36.12 .net
csh馬鹿は、引数そのまま渡す時に "$@" と書くべきところを $* とか書くんだよな。
csh撲滅すべし。

304 :名無しさん@お腹いっぱい。:2014/07/26(土) 14:01:11.67 .net
好きなように書けばいいよ
書きやすい
読みやすい
GOLF
速い

305 :名無しさん@お腹いっぱい。:2014/07/26(土) 14:02:29.67 .net
スレタイ的に人に見せるものなので
楽しい
楽しそう
を追加

306 :名無しさん@お腹いっぱい。:2014/07/26(土) 15:00:44.36 .net
すまん、俺がバカなのかもしれないが、
>>301は後者を推しつつ、>>302は前者を推してて
どちらも理由がcshの為なんだけどどういう事なんだ

307 :名無しさん@お腹いっぱい。:2014/07/26(土) 15:04:52.20 .net
eshellは許される
< が移植されてないから

308 :名無しさん@お腹いっぱい。:2014/07/26(土) 15:18:13.74 .net
    |  |
 \      /         ____     , -‐……‐--. . . 、          \ | | /
\           /     /. : : : : : : : :ヽ-‐.: :_;. --- .._: : : : : : : :\       \      /
_  争  も  _   /, -‐==ミ: : : : _,ィニ-‐……ー-: 、`ヽ、: : : : ヽ、      _   争   _
_  え  っ  _     . .:´: : : : : : : ≠:7: : : : : : : : : : : : :ヽ、 ヽ| : i : : :,     _    え   _
_   : . と   _   /.: : : : -‐: :7´: : /:,ハ : : : :ヽ : : : ゝ-- :\ | : :! : : : ,   _    :   _
_  :      _ /, -‐/.: : : : :i : : /ィ:爪: : :\ :\ : : :\: : :`ト : !: : : :′   _   :    _
             〃  /. : : : : : : |.:イ :ハ:| \: .、\: : xィ¬ト、: :| : : ! : : : : :,        
/          \   /.: :/.: : : : /l : |/Гト、       / |_,ノ0:::ヽ : : :i : : : : :′ /        \
 /  |  |  \    | .:/.:/. : : :i: i : | |ノ0:::ト :::::::::::::   |: :∩::::::ト: : : !: : : : : : :,  / | | \
             ∨i: |: : : : |: :ヽ| |::∩::| ::::::::::::::::  !.::∪::::::| |: : :i : : : : : : ′            ,ィ /〉
               |: |: : i : :', : |  |::∪::| ::::::::::::::::  !: : : : : :||: : i : : : : : : : :,          / レ厶イ
                ヽハ: : :、: :ヽ|  l : : : |:::::  ,  ::::└――┘ ! : : i : : : : : : : ′        /   ⊂ニ、
                い、: :\/   ̄ ̄                 ', : : i : : : : : : : : ,     _, -‐'    ⊂ニ,´
    r 、  _          ヽ: :〈        <  ̄ フ         |: : : ! : : : : : : : :′,.-‐T   _,. -‐'´ ̄
    くヾ; U|           | : \                   /| : : :i : : : : :_, -‐'    |  /
   r―'   ヽ、             | : : : \               イ: : :| : : :i_,. -

309 :名無しさん@お腹いっぱい。:2014/07/26(土) 15:36:03.04 .net
>>306
>>301 は反csh派。>>302 はcsh馬鹿。

310 :名無しさん@お腹いっぱい。:2014/07/26(土) 16:34:31.90 .net
tcshは< file catできるんじゃね?w

311 :287:2014/07/26(土) 18:54:23.44 .net
とりあえず、不適切なら □C.-9. b. を削除したいと思いますが、その前に
>>290 さんの主張がよく分からないので2つ質問します

もともと、"This Week's Useless Use of Cat Award" から派生した話ですから、
cat の有効的な使い方を挙げています
しかしページ中に cat| が有り、それで十分ではないでしょうか?

また、インチキ引用の理由がよく分かりません。もう少し詳しくお願いします

次に、>>291 "cat file|すんなハゲ" について
"cat|すんなハゲ" の方がリズムと勢いが有り、タイトルとしては良さげで
残念ですが、"cat file|すんなハゲ" という事で

あとは、"This Week's Useless Use of Cat Award" ネタが
火を吹いていると理解してます

312 :名無しさん@お腹いっぱい。:2014/07/26(土) 20:11:42.88 .net
>>311
catが有効な場合もあり(あんたが引用したページにもある)、catを一切使うなと
言っているのではない。cat file一つ | するのはアホと言っている。

> また、インチキ引用の理由がよく分かりません。もう少し詳しくお願いします
上の三つは具体的なコマンドだったが、次の
> easy "intuitive" switching on the command line between different types input
は次行の
> cat<<EOF|cmd
の説明に見える、ところがcat <<EOFはヒアドキュメントなのでインチキと言った。
ちなみに、ヒアドキュメントは<<EOF cmdで用が足りるね

313 :287:2014/07/26(土) 21:54:46.82 .net
>> 288 >>312
なるほど、分かりました。...ということは、削除しないでよろしそうですね
あと、確かに <<EOF cmd で用が足りそうですね

ということで、改めて、修正案を挙げておきます
ついでに、>>98-101 でテンプレの長さについて意見をいただいていましたが、
話題が尽きた時を狙っていましたが、良い機会ですので
まとめさせていただきます

>>256-281 の議論を経て >>284 の提案 に >>288-289 の議論で修正
追加(追加案の修正)
□C. 初心者へのアドバイス
9. cat file|すんなハゲ
 a. 詳細は "Useless Use of Cat" UUOC で検索して下さい
 b. 有用な場合も有ります Useful use of cat(1) 英文
  http://www.in-ulm.de/~mascheck/various/uuoc/

314 :名無しさん@お腹いっぱい。:2014/07/26(土) 21:59:56.66 .net
連投規制は特に問題でないと思うので >>54 は省き、今までの長さに関して参考に
なる書き込みを挙げました

>>50 ( F.2 までをみて ) 学習用文書はいらない。充実してても考え物
>>66 長文すぎて読む気がおきない
>>77 自分で勝手に決めて良い
>>98 長くない。スレを立てる人が面倒で無ければ付ければ良い
>>99 長いから何が困るってこともないが、議論で長文が続くのは迷惑
>>100 100レス超のテンプレもある。大した事はない
>>101 ( >>71 では ) 短すぎかも

315 :名無しさん@お腹いっぱい。:2014/07/26(土) 22:00:57.65 .net
>>99 は長い方のテンプレを否定する訳ではなさそうなので、特にレスが無ければ
長い方 ( >>42-45 >>47-48 >>56-60>>61-62 >>313 の修正を加えたもの )
にしたいと思います
出来れば、さらに私の未熟な案を書き変えていただきたいです

特にテンプレ議論の為に別スレを設ける程では無いので、
>>99 には申し訳ないですが、ここで続けさせていただきます。すみません

>>98 >>99 >>100 >>101 意見の衝突は、ある意味不快な思いをするものですが、
あえて書き込んでいただき、ありがとうございます

316 :名無しさん@お腹いっぱい。:2014/07/26(土) 22:08:51.37 .net
説明書みたいなテンプレが欲しかったら wiki に隔離して
そっちでやればいいんじゃないの

クソ長いテンプレを毎回コピペするなんて
シェルスクリプトを扱うような人間がやるもんじゃないと思うが

317 :名無しさん@お腹いっぱい。:2014/07/26(土) 22:39:26.90 .net
抜けていました
ポータビリティーを可搬性に書き変えます

>>316
短いテンプレだと、
>>71-72>>313 の修正を加えたもの
もしくは、それに部分的に追加したものですかね

私は、wiki は別の場所だと思っているので作りませんが、
皆さんの意見が反映されたものになればと思っています

318 :名無しさん@お腹いっぱい。:2014/07/26(土) 22:44:16.39 .net
勝手にやってろって感じ

319 :名無しさん@お腹いっぱい。:2014/07/26(土) 23:26:52.32 .net
流れを止めて申し訳ない
さらにレスをいただいて、必要が有ればまとめたいと思います

>>310 tcsh から、続けて下さい

320 :名無しさん@お腹いっぱい。:2014/07/27(日) 01:32:50.94 .net
>>314
>>100>>101は明らかに冗談だろ

321 :名無しさん@お腹いっぱい。:2014/07/27(日) 06:15:49.19 .net
明らかとは言えないが、冗談ともとれる
冗談ともとれるが、しかしながら、
意見を聞いておいてこれは冗談でしょと、
勝手に、気軽に、決めつけられる程ではない

322 :名無しさん@お腹いっぱい。:2014/07/27(日) 06:24:08.29 .net
Q. シェルスクリプト は UNIX の勉強に使えますか?
A. シェルスクリプト は UNIX に慣れた人間が スクリプト言語を気取るのには向いていますが、
  UNIX の勉強には向いていません。

323 :名無しさん@お腹いっぱい。:2014/07/27(日) 06:38:56.46 .net
>>322
UNIXの勉強って何だよ。

324 :319:2014/07/27(日) 06:41:49.25 .net
訂正
>>100 は冗談を言っているのは確かだが、同時に意見にもなっている
その意見についてまで、冗談と切り捨てられる程はっきりしていない

>>101 も、>>100 を受けて冗談で発言したともとれる
とれるが、これも冗談と切り捨てられる程ではない

325 :名無しさん@お腹いっぱい。:2014/07/28(月) 02:21:28.17 .net
結局、どうやったらハゲないかの結論は出たの?

326 :名無しさん@お腹いっぱい。:2014/07/28(月) 04:25:48.67 .net
早く寝る

327 :名無しさん@お腹いっぱい。:2014/07/28(月) 16:41:27.99 .net
#!/bin/sh
#maemuki ハゲててもかっこいい有名人
#maemuki 渡辺謙 ブルース・ウィリス 竹中直人 所ジョージ ジャン・レノ
#maemuki ジェイソン・ステイサム ショーン・コネリー 西村雅彦
#maemuki ウィリアム王子 ジダン ユル・ブリンナー 松平健
#maemuki ショーン・コネリー ニコラス・ケイジ

case "$1" in
--maemuki)
 sed -ne '/^#maemuki / {s/^#maemuki //; s/ /\n/g; p}' "$0"
;;
*)
 echo 'ハゲの話が終ったら起こしてね'
;;
esac

328 :名無しさん@お腹いっぱい。:2014/07/30(水) 22:13:48.68 .net
expr 0 + 0の終了ステータスってなんで1なの?

329 :名無しさん@お腹いっぱい。:2014/07/30(水) 22:16:09.78 .net
>>328
man expr に書いてなかったの?

330 :名無しさん@お腹いっぱい。:2014/07/30(水) 22:29:24.87 .net
>>329
ありがとう
結果が0かnullの時は1を返すって書いてあった
そういう仕様ということか

331 :名無しさん@お腹いっぱい。:2014/07/30(水) 23:34:20.07 .net
exprにはそろそろご退場願いたいもんだ。

332 :名無しさん@お腹いっぱい。:2014/07/30(水) 23:54:34.93 .net
でも$(())ってshにあったっけ

333 :名無しさん@お腹いっぱい。:2014/07/31(木) 05:43:36.38 .net
exprの文字列処理は $(( ))ではできない。

334 :名無しさん@お腹いっぱい。:2014/07/31(木) 09:13:26.43 .net
そして expr 0123 : '\(.\)' のように、
文字列を切り出した結果が 0 になるときも 1 で終了するのであった。
計算で 0 になったときはともかく、
正規表現にちゃんとマッチしてるのにエラーっぽい終了コード返すのはマジで勘弁してくれ。

335 :名無しさん@お腹いっぱい。:2014/07/31(木) 11:25:08.92 .net
catで始めておくと、差し替えが楽だよね
zcatに限らず

336 :名無しさん@お腹いっぱい。:2014/07/31(木) 11:29:08.36 .net
そういう終った話題はいいです。

337 :名無しさん@お腹いっぱい。:2014/07/31(木) 12:27:01.65 .net
>>332
Solarisもksh93になったことだし。
古い環境以外では、禁止してもいいだろ。

338 :名無しさん@お腹いっぱい。:2014/07/31(木) 12:34:30.79 .net
>>337
>>333

339 :名無しさん@お腹いっぱい。:2014/07/31(木) 12:46:14.65 .net
Solarisの basename/dirnameコマンドは、exprを使って実装されてる。

340 :名無しさん@お腹いっぱい。:2014/07/31(木) 12:55:14.92 .net
たぶん話がかみ合ってない。
シェルの中でループとか単純な計算をするのに、わざわざexpr使うのは、読みくくなるし速度も劇落ちになるので、使うなってことだろ。

341 :名無しさん@お腹いっぱい。:2014/07/31(木) 13:00:58.00 .net
そういう意味にはとれないな。
おそらく >>331 は exprの数値計算しか知らなくて、数値計算は $(())にやらせて
expr自体退場(廃止)したいという意味で書かれたと思われる。

で、exprって文字列処理にも使うんだよ、、って指摘されて恥さらし。

342 :名無しさん@お腹いっぱい。:2014/07/31(木) 13:08:50.97 .net
libgmp使ってるexprだと、exprの方が数値計算も優秀だな。

$ expr 11111111111 '*' 11111111111
123456790120987654321
$ echo $((11111111111 * 11111111111))
-5670418394979206991 ←ww

343 :名無しさん@お腹いっぱい。:2014/08/03(日) 06:41:46.30 .net
$ echo '11111111111 * 11111111111' | bc
123456790120987654321
計算結果が、美しいな

POSIX でないけど正規表現でのマッチングなら、[[ str =~ re ]] もあるね

344 :名無しさん@お腹いっぱい。:2014/08/13(水) 08:09:42.72 .net
シェルスクリプトのシの字もわからない者です。
質問させてください。
シェルスクリプトはコマンドの集合体と認識しているのですが、可能かどうか。
また可能であるならばどのようにすれば書き方をすれば良いかお聞きしたいです。

複数のコマンドの出力結果を一つのシェルスクリプトにまとめた上で、一行で出力出来たらいいなと思っているんですが可能でしょうか?

345 :名無しさん@お腹いっぱい。:2014/08/13(水) 08:17:49.57 .net
>>344
| tr -d '\n'

346 :名無しさん@お腹いっぱい。:2014/08/13(水) 08:24:21.13 .net
>>345 さん
ありがとうございます。
ただこれが何を意味しているのかすらわからないです。
一応ネットなどで基礎的なものも見たのですがイマイチわからなくて。
少しでも良いので説明してもらえないでしょうか?

347 :名無しさん@お腹いっぱい。:2014/08/13(水) 08:47:45.57 .net
man tr
tr - translate or delete characters
tr [OPTION]... SET1 [SET2]
Translate, squeeze, and/or delete characters from standard input, writing to standard output.
-d, --delete delete characters in SET1, do not translate

348 :名無しさん@お腹いっぱい。:2014/08/13(水) 10:17:30.68 .net
>>344
「シェルスクリプトのシの字もわからない」って要約すれば
「基本すら調べるの面倒だから一から十まで教えろ」ってことでいいんだよね?

349 :名無しさん@お腹いっぱい。:2014/08/13(水) 10:20:18.29 .net
>>344
まずはこれを日本語に書き直してからだ

350 :名無しさん@お腹いっぱい。:2014/08/13(水) 10:20:51.99 .net
粘着されてもうざいから、答えてやる。意味は自分で調べろ。

{ cmd1; cmd2; cmd3; } | tr -d '\n'

351 :名無しさん@お腹いっぱい。:2014/08/13(水) 10:29:03.26 .net
>>347-348
ありがとうございます。

352 :名無しさん@お腹いっぱい。:2014/08/13(水) 10:48:16.88 .net
ただこれが何を意味しているのかすらわからないです。
一応ネットなどで基礎的なものも見たのですがイマイチわからなくて。
少しでも良いので説明してもらえないでしょうか?

353 :名無しさん@お腹いっぱい。:2014/08/13(水) 10:52:56.74 .net
挿入ネタはいいです

354 :名無しさん@お腹いっぱい。:2014/08/13(水) 11:02:28.67 .net
挿入ネタって何ですか?

355 :名無しさん@お腹いっぱい。:2014/08/13(水) 13:53:13.00 .net
いつもの釣りの人だろ。
相手しちゃいかん。

356 :名無しさん@お腹いっぱい。:2014/08/18(月) 00:08:16.70 .net
>>352
trは標準入力から読み込んだ文字を置き換え、切り詰め、削除し、標準出力に書き込みます。
つまり結果を受け取り出力します。
この場合、いくつかのコマンド結果をパイプでtrに渡し、改行を削除して、まとめて出力しています。
最初の回答の man tr ... はtrのマニュアルから参照した説明です。
つまり、この方はtrを使うといいよと言っている。

しかし、あなたはこのことに何の目的があるのでしょうか?
よく分かりませんが、とにかく可能だということですね。

357 :名無しさん@お腹いっぱい。:2014/08/18(月) 00:20:04.68 .net
ぜんぜん意味を汲み取れない。
さぽせんの人って、こういうのを相手にしてるんだろうな。
大変だなすごいな。

358 :名無しさん@お腹いっぱい。:2014/08/18(月) 00:22:28.56 .net
>>344, 354
なんでお前さんはそんなに挑発的な文章を書くんだ? 無自覚なのか?

まぁそれは置いておくとしても
お前さん自身は理論的に考え、説明しているつもりで「俺の言っていることを理解できないヤツがアホ」くらい思っているのだろうが
実際は自身の説明の仕方が悪いということくらいは気付いた方がいい

359 :名無しさん@お腹いっぱい。:2014/08/18(月) 00:28:30.23 .net
この方とかあなたとかが誰を指すのかさっぱりわからない。

360 :354:2014/08/18(月) 00:40:35.08 .net
354の私は通りすがりで、誰かに不快な思いをさせるつもりはありません。
本当に分からない人の気持ちも分かるから念のためと思い、書き込みました。
親切心です。失礼しました。(^^;

361 :名無しさん@お腹いっぱい。:2014/08/18(月) 00:42:23.14 .net
みんな混乱してカオスになっただけじゃねーかw

362 :354:2014/08/18(月) 00:44:22.34 .net
この方とは回答してくれた人で、あなたは350の質問者を指していました。

363 :名無しさん@お腹いっぱい。:2014/08/18(月) 08:46:56.20 .net
この説明で初心者向けと思ってるからITは怖い

364 :名無しさん@お腹いっぱい。:2014/08/18(月) 08:51:01.71 .net
この説明でわからないようなゆとり初心者は恐い

365 :名無しさん@お腹いっぱい。:2014/08/18(月) 10:30:51.05 .net
シェルスクリプトのシの字も分からないゆとりには、シェルスクリプトとはなんぞやから始まって種類、文法も教えなきゃいけないの?
時給とか貰えるの?

366 :名無しさん@お腹いっぱい。:2014/08/18(月) 10:41:51.03 .net
>>363
んじゃ君が初心者向けに教えてあげてよ。

367 :名無しさん@お腹いっぱい。:2014/08/18(月) 10:53:03.78 .net
えー、
シェル、というのは貝を表す英語で、スペルはshellです。
UNIXにおけるシェルは、貝とは関係ないのですが、
むかし、サンOSというOSにあったサンビューというデスクトップに
シェルツールというウィンドウがあり、このウィンドウのアイコンには
貝の絵が書かれていました。
あ、、長くなるので今日のシェル講座はここまでにします。
ではまた来週。

368 :名無しさん@お腹いっぱい。:2014/08/18(月) 11:07:46.92 .net
それぞれ入力してあとは自分で考えな

普通に出力
echo hello

コマンドをまとめる
{ echo hello1; echo hello2; echo hell3; }

まとめたコマンドの結果から改行をなくす
{ echo hello1; echo hello2; echo hell3; } | tr -d '\n'

369 :名無しさん@お腹いっぱい。:2014/08/18(月) 11:11:46.58 .net
つshell=+貝殻

370 :名無しさん@お腹いっぱい。:2014/08/18(月) 11:30:07.45 .net
ドシロートがちょっと通りますよ…

$ unset a;for i in {1..9}; do a+=$i;echo $a; done
$ unset a;for i in {1..9}; do : $[a+=i];echo $a; done

bashだけど、そ〜なのか〜って感じ

371 :名無しさん@お腹いっぱい。:2014/08/18(月) 11:30:53.52 .net
> 複数のコマンドの出力結果を一つのシェルスクリプトにまとめた上で、

って書いてあるのをそのまま読み取ると
複数のコマンドを実行した結果そのものがコマンドになっていて
それを一つのシェルスクリプトにまとめたいと言っているように受け取れるかな
つまりシェルスクリプトを動的に生成したいのか?とか

372 :名無しさん@お腹いっぱい。:2014/08/18(月) 13:23:56.51 .net
じゃconfigureで

373 :名無しさん@お腹いっぱい。:2014/08/18(月) 23:42:46.87 .net
ありがとうございます。
ただこれが何を意味しているのかすらわからないです。
一応ネットなどで基礎的なものも見たのですがイマイチわからなくて。
少しでも良いので説明してもらえないでしょうか?

374 :名無しさん@お腹いっぱい。:2014/08/18(月) 23:59:27.37 .net
configure コマンドを使用すると、次のチーム プロジェクト設定を管理できます。

しかし、あなたはこのことに何の目的があるのでしょうか?
よく分かりませんが、とにかく可能だということですね。

375 :名無しさん@お腹いっぱい。:2014/08/19(火) 17:44:32.47 .net
設定済みtcshからzshに乗り換えました tcshではシンボリックリンクで cd ..したところパスが展開されて親ディレクトリに移動しました
zshに乗り換えてからはシンボリックリンクが置いてあるディレクトリに戻ります
どう設定すれば親ディレクトリにいけるでしょうか

376 :名無しさん@お腹いっぱい。:2014/08/19(火) 17:52:31.84 .net
cd -P

377 :名無しさん@お腹いっぱい。:2014/08/19(火) 17:56:52.92 .net
set -w

378 :名無しさん@お腹いっぱい。:2014/08/19(火) 17:56:54.07 .net
>>376 試したところ
リンクが置いてあるディレクトリに飛んで
パス展開、親ディレクトリ移動はされませんでした
解答ありがとうございます

379 :名無しさん@お腹いっぱい。:2014/08/19(火) 17:59:32.15 .net
>>377 ありがとうございます!
まさしく求めていたものです

380 :名無しさん@お腹いっぱい。:2014/08/19(火) 18:02:45.22 .net
zshスレあるよ

zsh その7
http://peace.2ch.net/test/read.cgi/unix/1337844883/

381 :名無しさん@お腹いっぱい。:2014/08/19(火) 18:19:48.13 .net
>>380 案内どうもです

382 :名無しさん@お腹いっぱい。:2014/08/19(火) 18:46:21.17 .net
せっかくのシンボリックリンク追従機能を無効にするのかよw
せめて cd -P でそのコマンドだけ一時的に無効にする方法にしとけよ。

383 :名無しさん@お腹いっぱい。:2014/08/19(火) 18:53:28.22 .net
Pオプションの意味を理解できてなかった なるほど
後々困るのも嫌なので>>390 助言ありがとうございます

384 :名無しさん@お腹いっぱい。:2014/08/19(火) 19:55:01.47 .net
うーむ、目からうろこだな >>390

385 :名無しさん@お腹いっぱい。:2014/08/19(火) 19:56:54.78 .net
何者なんだ>>390

386 :名無しさん@お腹いっぱい。:2014/08/19(火) 20:00:35.37 .net
期待してるぞ。>>390

387 :名無しさん@お腹いっぱい。:2014/08/19(火) 20:01:16.48 .net
3九丸不成

388 :名無しさん@お腹いっぱい。:2014/08/19(火) 21:05:26.91 .net
期待age

389 :名無しさん@お腹いっぱい。:2014/08/19(火) 21:11:13.31 .net
ksk

390 :名無しさん@お腹いっぱい。:2014/08/19(火) 21:20:59.24 .net
プレッシャードキドキ

391 :名無しさん@お腹いっぱい。:2014/08/19(火) 21:52:25.48 .net
 。 。
 / / ウロコじゃなくて目玉がポーン!
( Д )

392 :名無しさん@お腹いっぱい。:2014/08/19(火) 22:10:00.24 .net
 \                    /
   \  丶       i.   |      /     ./       /
    \  ヽ     i.   .|     /    /      /
      \  ヽ    i  |     /   /     /
   \
                                  -‐
  ー
 __          わ た し で す            --
     二          / ̄\           = 二
   ̄            | ^o^ |                 ̄
    -‐           \_/                ‐-

    /
            /               ヽ      \
    /                    丶     \
   /   /    /      |   i,      丶     \
 /    /    /       |    i,      丶     \

393 :名無しさん@お腹いっぱい。:2014/08/19(火) 22:29:52.06 .net
・・・・・・

394 :名無しさん@お腹いっぱい。:2014/08/19(火) 22:33:08.05 .net
がっかりだよ

395 :名無しさん@お腹いっぱい。:2014/08/19(火) 22:59:17.61 .net
ハイ、カイサーン

396 :名無しさん@お腹いっぱい。:2014/08/19(火) 23:52:29.88 .net
sedの使い方の質問はここで良いでしょうか?

397 :名無しさん@お腹いっぱい。:2014/08/20(水) 00:04:59.76 .net
↓これよりも、ここの方が適切だと思った理由は?
http://peace.2ch.net/test/read.cgi/unix/1085730992/

398 :名無しさん@お腹いっぱい。:2014/08/20(水) 00:04:59.78 .net
sed
http://peace.2ch.net/test/read.cgi/unix/1085730992/

399 :名無しさん@お腹いっぱい。:2014/08/20(水) 00:05:29.71 .net
>>398
失礼しました。

400 :名無しさん@お腹いっぱい。:2014/08/20(水) 00:05:34.37 .net
2/100sで被ったわ

401 :名無しさん@お腹いっぱい。:2014/08/28(木) 13:44:30.46 .net
シェルスクリプトで、小数点を 切り上げ たいのですけども。
bc や awk など、どうやるにしても大変で、さくっとできるスマートな方法知りませんか?

402 :名無しさん@お腹いっぱい。:2014/08/28(木) 14:12:52.50 .net
>>401
http://blog.trippyboy.com/2011/shell/bash%E3%81%A7%E5%9B%9B%E6%8D%A8%E4%BA%94%E5%85%A5%E3%81%97%E3%81%9F%E3%81%84%E3%81%AE%E5%B7%BB/

403 :名無しさん@お腹いっぱい。:2014/08/28(木) 14:16:02.57 .net
>>402
四捨五入じゃなくて「切り上げ」です。
しかも、そのリンク先の方法は知ってますし、それでは大変なのでもっとさくっとできるスマートな方法を質問してます。

404 :名無しさん@お腹いっぱい。:2014/08/28(木) 14:18:41.71 .net
あぁ、すまん。
なんか勘違いした。

405 :399:2014/08/28(木) 14:22:46.50 .net
ありがとうございます。
四捨五入のやりかたなので、読み飛ばしていましたけど…
アルゴリズム的には「切り上げ」ならば、0.999 を足せばいいのかな?

406 :名無しさん@お腹いっぱい。:2014/08/28(木) 14:26:14.70 .net
それだと 4.0001 が切り上がらないんでは。

407 :名無しさん@お腹いっぱい。:2014/08/28(木) 14:27:08.86 .net
>>405
だめだろ。
でかい整数を引いて負にしてから小数点以下を削って同じ整数を足すか、
0から引いて負にしてfloorとってまた0からひくか。

408 :名無しさん@お腹いっぱい。:2014/08/28(木) 14:32:24.29 .net
シェルスクリプトだから、扱う数値はすべて正の数としていいよね。
小数点以下がすべて0か、または空文字列であることを判定して、
そうじゃない場合は1を加算、のアルゴリズムでいいと思う。

409 :名無しさん@お腹いっぱい。:2014/08/28(木) 14:33:03.16 .net
>>408
> シェルスクリプトだから、扱う数値はすべて正の数としていいよね。
なんでそうなるんだw

410 :399:2014/08/28(木) 14:37:03.83 .net
どなたか本音を代弁してくれてたw

>>406
そこは、欲しい精度まで 9 を追加する感じに。

他に思いつきですが、正規表現で [0-9]*.[1-9] で条件判定して整数の 1 を足す感じで試してみます。
これも、精度がほしかったら [0-9]*.[0-9][1-9] と増やす感じ?
今回は小数点第3位(ミリ秒単位)まであればいいので、どっちかで逃げてみます。
ありがとうございました。

411 :名無しさん@お腹いっぱい。:2014/08/28(木) 14:43:01.99 .net
>>402よりだいぶ長くなったけど。
awk '{ n = int($1); if (n==$1) print n; else print n+1 }'

412 :名無しさん@お腹いっぱい。:2014/08/28(木) 14:44:58.40 .net
>>411
あ、これ負の数のときだめだ。
まぁシェルスクリプトだから、扱う数値はすべて正の数としていいよね。

413 :名無しさん@お腹いっぱい。:2014/08/28(木) 14:47:50.25 .net
これでいいか。
awk '{ n = int($1); if (n==$1 or n<=0) print n; else print n+1 }'

414 :名無しさん@お腹いっぱい。:2014/08/28(木) 20:09:05.06 .net
>>299
slも入ってると思うから確認してみろ

415 :名無しさん@お腹いっぱい。:2014/08/29(金) 01:48:55.50 .net
シェルスクリプトで精度求める気になれない。そこだけコマンド化する。

416 :名無しさん@お腹いっぱい。:2014/08/29(金) 12:46:41.55 .net
>>415
そういう誰でもできる方法でいいなら
いちいちこのスレで聞かない

417 :名無しさん@お腹いっぱい。:2014/08/29(金) 12:53:39.00 .net
> シェルスクリプトで精度求める気になれない
などと意味不明の言葉を口走っており。動機は不明。

418 :名無しさん@お腹いっぱい。:2014/08/29(金) 12:59:42.77 .net
>>413なら精度関係ないよ。

419 :名無しさん@お腹いっぱい。:2014/08/29(金) 13:17:22.52 .net
内部では倍精度浮動小数とかだろうけど、ulpが1を越えるような大きな整数だとどうなるんだろうな

420 :名無しさん@お腹いっぱい。:2014/08/29(金) 13:39:48.42 .net
>>419
整数だから処理しなくていいんじゃないの?

421 :名無しさん@お腹いっぱい。:2014/08/29(金) 13:41:25.69 .net
整数堂々と勝負する。

422 :名無しさん@お腹いっぱい。:2014/08/29(金) 13:53:59.75 .net
bash考えたヤツって相当頭悪いんだろうな

423 :名無しさん@お腹いっぱい。:2014/08/29(金) 14:00:39.34 .net
>>422
なんでそう思ったの?

424 :名無しさん@お腹いっぱい。:2014/08/29(金) 21:43:45.47 .net
>第4章 コマンドは、臆さず作れ。大人気ない大人にならぬために

1億人が同じ処理に別々のコマンド作ってたら・・・、どっちが大人げないかなぁ。。。

425 :名無しさん@お腹いっぱい。:2014/08/29(金) 22:06:49.40 .net
「1億人が〜」って言うのが大人気ない

426 :名無しさん@お腹いっぱい。:2014/08/29(金) 22:09:34.31 .net
>>425
全世界で考えれば大した数じゃあないでしょ?

427 :名無しさん@お腹いっぱい。:2014/08/29(金) 22:11:07.54 .net
大した数だよw

428 :名無しさん@お腹いっぱい。:2014/08/29(金) 22:21:31.55 .net
時間軸ずらした「延べ」人数だったら?

429 :名無しさん@お腹いっぱい。:2014/08/29(金) 22:40:32.59 .net
あ、「延べ」じゃおかしいか
「世代別の実数」のほうがいいか

430 :名無しさん@お腹いっぱい。:2014/08/30(土) 00:23:33.88 .net
手を動かさなければ、いつまでたっても大人気ないコードを生みだすプログラマを卒業することはできないのだ。

431 :名無しさん@お腹いっぱい。:2014/08/30(土) 02:55:29.82 .net
新しい言語を学ぶために "Hello, world!" してる人に向かって
「Hello, world! を表示するコマンドは1億人が作ってるんだ大人げない!」
とか言わないよな普通

432 :名無しさん@お腹いっぱい。:2014/08/30(土) 12:28:42.62 .net
なんか大人げない話題が続いている

433 :名無しさん@お腹いっぱい。:2014/08/30(土) 14:13:33.67 .net
# iif cond cmd
# iif "$n = 'm'" "menu_start"
# iif "$n = 'e'" "edit_history"
# @param1 cond
# @param2 cmd
function iif()
{
echo "iif $1"
if eval "[ $1 ]";then
eval "$2"
fi
}

434 :名無しさん@お腹いっぱい。:2014/08/30(土) 19:14:19.60 .net
hello, world

435 :名無しさん@お腹いっぱい。:2014/08/30(土) 21:21:52.95 .net
Linux全般に言えるのは、逆引きマニュアルのサイトが極めて少ないってこと
abc順なんてコマンド知った上での確認にしか使えないよな
やっぱこれでメシ食ってる人もいるから閉鎖的・保守的なんかいな
これもまた、技術は進んでも人間はー、だな

436 :名無しさん@お腹いっぱい。:2014/08/30(土) 21:30:14.10 .net
Linuxの話はLinux板で。

437 :名無しさん@お腹いっぱい。:2014/08/30(土) 21:41:41.14 .net
bashなんかをチョット使うためにネットで探す側にとっちゃUでもLでもどーでもいいわけで

438 :名無しさん@お腹いっぱい。:2014/08/30(土) 21:50:07.24 .net
なら「Linux全般に言えるのは」なんて限定つけなくていいでしょ。

439 :名無しさん@お腹いっぱい。:2014/08/30(土) 22:01:03.44 .net
>>432
大人気ない話題, 大人気だな(ドヤ

440 :名無しさん@お腹いっぱい。:2014/08/30(土) 22:10:08.01 .net
>>435
man -k

サイトが必要とされてると思うなら、お前が作ってもいいんだぜ。

441 :433:2014/08/30(土) 22:11:53.32 .net
わりーわりー、じゃあ「UNIX・Linux全般に言えるのは」に訂正ね

やれやれ・・・

442 :433:2014/08/30(土) 22:15:41.48 .net
>>440
遠慮しときまーす
音楽再生するのにスクリプトが必要だっただけなんで
ほかの事に時間つかいまーす

443 :名無しさん@お腹いっぱい。:2014/08/30(土) 22:41:00.39 .net
果実を食い荒らすことしかしない奴。

444 :名無しさん@お腹いっぱい。:2014/08/30(土) 22:54:58.21 .net
       ∧         ∧
        / ヽ        ./ .∧
     /   `、     /   ∧
    /       ̄ ̄ ̄     ヽ         ,-v-、
  ( ̄ ̄ ̄ ̄ ̄月曜日  ̄ ̄ ̄)     / _ノ_ノ:^)
   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄.\    / _ノ_ノ_ノ /)<やぁ、気分はどうだい?
  /:::::::::: ヽ-=・=-′ ヽ-=・=-   /   / ノ ノノ//   夏休みは終わりだよ。
  ヽ:::::::::::    \___/     /   ノ ̄ ̄)____ノ
    ヽ__::::::::::::::  \/      /    /" / ̄   ノ
  /\\          //\   ヽ   ゙   ノ
 |   \\       //  |\ /`ー''"ー'

445 :433:2014/08/30(土) 22:59:57.98 .net
しかし幼稚なレスしか返ってこんねー
マジで小学生レベルだもんなぁ
話の趣旨に対して何の言及もないんだもんな
ま、しょっちゅう使ってる人が一番わかってて「何をいまさら」で、レスするのもアホらしいからスルーされてるんだろう、と思う

446 :名無しさん@お腹いっぱい。:2014/08/30(土) 23:06:00.30 .net
お前具体的な話何もしてないじゃん
煽りに対しては煽りしか返ってこないだろそんなもん

447 :433:2014/08/30(土) 23:08:49.51 .net
具体的にはこのスレの全員死んでほしいんだよ

448 :名無しさん@お腹いっぱい。:2014/08/30(土) 23:11:02.53 .net
rm -rf /

449 :433 439 440 443:2014/08/30(土) 23:17:48.46 .net
ははは、こりゃ幼稚園レベルだ。IDないからってなぁ
オトナゲナイどころの話じゃないねぇ
じゃあさいなら(433 439 440 443で発言したものでーす)


445 名前:433[sage] 投稿日:2014/08/30(土) 23:08:49.51
具体的にはこのスレの全員死んでほしいんだよ

450 :名無しさん@お腹いっぱい。:2014/08/31(日) 01:19:27.47 .net
小学生でも独学でサーバー構築できる時代ですし
小学生が常駐してても何もおかしくはない

そんな時代なのに情報の探し方を知らない大人はいなくならないんだよなぁ

451 :名無しさん@お腹いっぱい。:2014/08/31(日) 02:34:39.38 .net
>>447
自殺はよくないぞ。
俺は一応止めたからな。

452 :名無しさん@お腹いっぱい。:2014/08/31(日) 18:47:03.58 .net
# iif cond cmd1 [cmd2]
function iif()
{
if eval "[ $1 ]";then
eval "$2"
else
if [ $# -eq 3 ]; then
eval "$3"
else
:
fi
fi
}

453 :名無しさん@お腹いっぱい。:2014/08/31(日) 18:54:52.98 .net
function show_arr()
{
local var_name=$1
eval local arr=(\"\${$var_name[@]}\")
local i=0
for a in "${arr[@]}"; do
echo "$i $a"
++ i
done
}

454 :名無しさん@お腹いっぱい。:2014/09/03(水) 19:17:02.10 .net
羽ばたきは反則だろw

455 :名無しさん@お腹いっぱい。:2014/09/03(水) 20:25:11.15 .net
そう?

456 :452:2014/09/04(木) 10:58:52.18 .net
ごめんごめん、鳥人間コンテストの誤爆 orz

457 :名無しさん@お腹いっぱい。:2014/09/06(土) 09:02:25.48 .net
過疎ってきて、残念だな

比較的短時間でレスが付くが、住人同士の書き込みはないし
ひたすら質問を待っているようだが
>>444 >>447 の様な調子だと、気味悪くて、質問とか出来ないよね

458 :名無しさん@お腹いっぱい。:2014/09/06(土) 09:13:54.24 .net
挿入ネタはいいです

459 :名無しさん@お腹いっぱい。:2014/09/06(土) 13:27:08.22 .net
既読スルー

460 :119:2014/09/06(土) 17:32:44.85 .net
お久しぶりです119です。その節はお世話になりました。また質問させてください。
「dropboxとevernoteに同じpdfファイルがあったらdropboxのを削除」ってなんとか
自動化できませんか?多分できないかもですが200本ぐらいあって嫌気が差して。。。
今度はubuntu14.04です。geeknoteのインストールはできました。
よろしくお願いします。

461 :名無しさん@お腹いっぱい。:2014/09/06(土) 19:25:15.36 .net
geeknoteってテキストしか取得できないんじゃなかったか
evernote APIを直接叩いてファイルハッシュを取得した方が確実では

462 :名無しさん@お腹いっぱい。:2014/09/06(土) 19:47:39.71 .net
未読スルー

463 :119:2014/09/06(土) 22:44:57.62 .net
ふええ

464 :名無しさん@お腹いっぱい。:2014/09/07(日) 00:53:04.47 .net
cronとかで定期実行
md5sumなどで同一性のチェック
rm で削除か?

pdfだけなら同一性のチェックはファイルネームとサイズだけ見ても大丈夫かもしれない

465 :ジジイ:2014/09/07(日) 01:19:39.17 .net
助けてあげたいが、dropboxとかevernoteとかそんなハイカラなものは使ったことがないし
どんなものかも知らない 

466 :名無しさん@お腹いっぱい。:2014/09/07(日) 07:57:58.48 .net
evernoteならen-mediaタグかどっかにmd5持ってた気がしたから
ファイル名で検索→ノート取得→ハッシュ値取得が楽だと思う

dropboxはシェルスクリプトでいけるけどevernoteは面倒だな
俺ならRubyで書いてしまう

467 :名無しさん@お腹いっぱい。:2014/09/07(日) 10:23:46.37 .net
>>466
全ノート(もしくはpdfが含まれていそうなノート)をエクスポートすればシェルスクリプトだけで存在確認できるかも
Enexファイルはxmlだしgrepできる

で、今試したらいけた
$ grep 'hash="<PDFファイルのMD5>"' ./エクスポート結果.enex
<en-media type="application/pdf" style="cursor:pointer;" width="100%" height="62046" hash="<PDFファイルのMD5>"/>

あとは>>464の手順で問題ないと思うけどどうだろうか

468 :名無しさん@お腹いっぱい。:2014/09/07(日) 11:01:38.80 .net
>>467
自分が吐いた決め打ちフォーマットじゃないんだから
一般的なXMLとして扱うのが普通じゃないかな?
xmlにgrepとか笑い話だよ

469 :名無しさん@お腹いっぱい。:2014/09/07(日) 11:36:30.18 .net
>>468
em-mediaタグのtype見てhash値検索するように改変してくれてもいいのよ

個人利用レベルなら hash="" だけで十分でないかと思うけどね
Enexファイルは数十GB以上になることだってあるんだろうし、できることなら高速な方がいいでしょ

470 :名無しさん@お腹いっぱい。:2014/09/07(日) 13:08:07.21 .net
>>460
fuseとかでmountされてるなら簡単そうだ。

471 :名無しさん@お腹いっぱい。:2014/09/07(日) 13:13:22.51 .net
>>468
xmlstarlet sel -t -v //hash
とかか。
値のマッチってどう書くんだっけ。

472 :名無しさん@お腹いっぱい。:2014/09/07(日) 13:15:48.55 .net
hashは属性か。
//en-media[@hash=値]
だっけ。

473 :名無しさん@お腹いっぱい。:2014/09/07(日) 14:51:02.99 .net
xmlstarlet sel -t -m "//en-media[@type='application/pdf']" --if "@hash='<PDFファイルのMD5>'" -c . -n

正規表現並にソラで使えるようにならないとな。

474 :119:2014/09/07(日) 15:15:43.65 .net
レスありがとうございます。勉強します。

475 :名無しさん@お腹いっぱい。:2014/09/07(日) 15:46:39.05 .net
>>473
xmlstarlet って使ったことなかったから興味本位で実行してみたら落ちた
そのままじゃ使えないのかな?
hoge.enex は 4 GB くらい

$ xmlstarlet sel -t -m "//en-media[@type='application/pdf']" --if "@hash='<PDFファイルのMD5>'" -c . -n /hoge.enex
Attempt to load network entity http://xml.evernote.com/pub/evernote-export3.dtd
hoge.enex: xmlSAX2Characters: huge text node: out of memory

476 :名無しさん@お腹いっぱい。:2014/09/07(日) 15:56:20.46 .net
>>475
修行中なので詳しい訳ではない。
ストリーム処理だと思うから、深さの方が関係ありそうな気がするけど。
あとは-nの前に-bを入れてみるとか。

477 :名無しさん@お腹いっぱい。:2014/09/07(日) 15:59:06.67 .net
馬鹿でかいtext nodeがあるのか。

478 :名無しさん@お腹いっぱい。:2014/09/07(日) 16:42:53.09 .net
xmlをgrepしたらいけないの?

479 :名無しさん@お腹いっぱい。:2014/09/07(日) 17:47:26.60 .net
evernote ってバイナリを base64 で保存してるんでしょ?
とんでもないサイズの値があっても不思議ではないな

480 :119:2014/09/07(日) 17:51:49.12 .net
お世話になります。なんかわかってきました。
find . -type f -exec md5sum {} \; > ~/md5sum.txt

md5checksum.txt
ができました。これの一列目が<PDFファイルのMD5>なのでxmlstarlet sel かgrepできればいいんですよね。
>>475はEntity 'nbsp'って怒られました。-nの前に-bでも一緒でした。エラーメッセージ?をコピペした方がいいんだろうか。
>>467のやり方ですけど、ためしにひとつのハッシュ値でgrepしたらありました!で続きはどうしたらいいんでしょうか。
一列目<PDFファイルのMD5>を取り出す
→xargsかなんか使ってgrepかfindか何かに渡す
→ヒットしたハッシュ値を持つファイルを一覧化
→見ながら削除(rmとか怖い)
みたいな感じでしょうか?教えてください!Evernote-test-2014-09-07.enexは181mbです。
あと残念ながらdropbx内のpdfのファイル名とevernoteのノート名とそこに添付されてるpdfファイル名がばらばらのがあります。
のでハッシュ値を使うしかないみたいです。

481 :名無しさん@お腹いっぱい。:2014/09/07(日) 19:07:01.61 .net
>>480
grepしちゃいけないってことはないけど、順番が逆だったり、変なとこに改行あったりで、やりにくい時もある。だから自分はxmlstarletも慣れるため、なるべく使ってる。

>>480
xmlstarlet valで出るエラーなら、ちゃんとしたxmlでないのかも。どのルール(dtd)使うのかが一致してなさそう。無視するオプションもあった気がするけど。
無理にxmlstarlet使う必要はない。

482 :名無しさん@お腹いっぱい。:2014/09/08(月) 09:25:12.72 .net
>>574
たまにやるからいいのよ。普段は服きとけって思うもん。
んで、たまーに特別企画で脱ぐ。

むしろすっぽんぽんにならなくていいよ。

まあ、でも、服着てる写真が一番ってのは同意。

483 ::2014/09/08(月) 10:03:15.93 .net
>>482
お前ときたら...

484 :名無しさん@お腹いっぱい。:2014/09/08(月) 11:42:58.09 .net
わざと誤爆してスレ活性化って最近はやってるの?

485 :名無しさん@お腹いっぱい。:2014/09/08(月) 13:01:45.35 .net
流行ってないよ。

486 :名無しさん@お腹いっぱい。:2014/09/08(月) 13:10:13.06 .net
じゃあはやらせようね

487 :名無しさん@お腹いっぱい。:2014/09/08(月) 13:37:07.07 .net
>>574 の貼る画像に期待。

488 :名無しさん@お腹いっぱい。:2014/09/08(月) 20:48:30.29 .net
>>481
トンクス
試してみる、そのツール

489 :名無しさん@お腹いっぱい。:2014/09/08(月) 23:33:21.80 .net
もう板全体を3人くらいしか見てないからなぁ

490 :名無しさん@お腹いっぱい。:2014/09/10(水) 00:47:47.39 .net
それはないやろ。Unix板、200人くらいは書き込んでると思うけど

491 :名無しさん@お腹いっぱい。:2014/09/10(水) 10:32:23.40 .net
>>490

俺とオマエだけだよ、あとは犬板

492 :名無しさん@お腹いっぱい。:2014/09/10(水) 10:36:45.77 .net
んなわけないだな

493 :名無しさん@お腹いっぱい。:2014/09/10(水) 10:36:46.21 .net
DOSの操作性を超えたunixはありますか?

494 :名無しさん@お腹いっぱい。:2014/09/10(水) 10:37:15.14 .net
>>493
unixの操作性を超えたDOSってある?

495 :名無しさん@お腹いっぱい。:2014/09/10(水) 10:38:39.37 .net
そういう意味じゃなくてunixって未だにDOSの操作性を超えてませんよね?

496 :名無しさん@お腹いっぱい。:2014/09/10(水) 10:42:46.89 .net
zshよりcommand.comの方が操作性に優れるという人現る

497 :名無しさん@お腹いっぱい。:2014/09/10(水) 10:42:50.33 .net
>>494
改変コピペにかまうな

498 :名無しさん@お腹いっぱい。:2014/09/10(水) 10:43:29.62 .net
>>495
そう思ってる人に、超えるUNIXは無いだろうね。
あくまでも君の評価規準なわけだし。

499 :名無しさん@お腹いっぱい。:2014/09/10(水) 10:46:26.75 .net
そういう意味じゃなくてunixって未だにDOSの操作性と同等レベルという意味だろ

500 :名無しさん@お腹いっぱい。:2014/09/10(水) 12:21:16.54 .net
Disk Operating System ?

501 :名無しさん@お腹いっぱい。:2014/09/10(水) 12:39:07.21 .net
構うな構うな

502 :名無しさん@お腹いっぱい。:2014/09/10(水) 13:28:40.18 .net
>>499
VUEって知ってるか?

503 :名無しさん@お腹いっぱい。:2014/09/10(水) 14:30:43.32 .net
このスレ、俺とお前の2人しかいない説、間違いであることが
釣り師によって暴かれたw

504 :名無しさん@お腹いっぱい。:2014/09/10(水) 14:40:01.88 .net
なるほど。釣り師含めて3人しかいないんですねw

505 :名無しさん@お腹いっぱい。:2014/09/10(水) 14:43:45.02 .net
いや、俺で5人目。

506 :名無しさん@お腹いっぱい。:2014/09/10(水) 14:56:25.60 .net
全部多重人格のお前

507 :名無しさん@お腹いっぱい。:2014/09/10(水) 14:59:22.25 .net
>>493
先に「DOSの操作性」を定義してくれ。Appleが Mac出した頃に言ってたやつか?

508 :名無しさん@お腹いっぱい。:2014/09/10(水) 15:16:50.47 .net
操作性どころか機能性で劣ってる

509 :名無しさん@お腹いっぱい。:2014/09/10(水) 17:16:24.41 .net
どのDOSのこと言ってるの?

-- DOS --
MS-DOS
PC-DOS
FreeDOS
QDOS
DR-DOS
PTSDOS
AppleDOS
AtariDOS
AmigaDOS
Commodore DOS

510 :名無しさん@お腹いっぱい。:2014/09/10(水) 17:27:55.31 .net
-- Unix --
Unix System-V
BSD/OS
Xenix [SCO Open Server] (Microsoft/SCO)
FreeBSD
NetBSD
OpenBSD
Debian k/FreeBSD
Linux
mkLinux (Apple)
HP-UX (HP)
Tru64 Unix (COMPAQ/HP)
Nonstop-UX (TANDEM/COMPAQ/HP)
AIX (IBM)
Solaris (Sun/Oracle)
EWS (NEC)
Super UX (NEC)
NEWS (SONY)
MacOSX (apple)
A/UX (Apple)
Interix (Softway Systems/Microsoft)
Irix (Silicon Graphics)
NeXT (NeXT)
z/OS (IBM)
QNX
Plan9
UX/4800 (NEC)
minix

511 :名無しさん@お腹いっぱい。:2014/09/10(水) 20:43:27.68 .net
10年ぶりにLinux戻るので『入門bash第3版』を買った
ニュースグループ comp.lang.shell を購読していた頃は
bash の知識が維持されていたんだけどな

512 :名無しさん@お腹いっぱい。:2014/09/11(木) 01:44:35.87 .net
>>510
日本での話なんだからUni-OSに決まってルナ
うんぬは言わせない。
ちなみに私の名前は中野です。

513 :名無しさん@お腹いっぱい。:2014/09/11(木) 01:52:05.05 .net
>>512
無論だな

514 :名無しさん@お腹いっぱい。:2014/09/11(木) 01:55:58.41 .net
遅くまで起きてなくてもいいんですぜ
追い上げですね

515 :名無しさん@お腹いっぱい。:2014/09/11(木) 03:48:41.09 .net
unix-osってあったのか。初耳。シグマプロジェクトがらみ?
パナ、ファコム、内田洋行

516 :名無しさん@お腹いっぱい。:2014/09/11(木) 07:28:53.74 .net
>>509
VSEは?

517 :名無しさん@お腹いっぱい。:2014/09/11(木) 10:47:38.04 .net
>>511
板違い。

518 :名無しさん@お腹いっぱい。:2014/09/11(木) 16:09:20.38 .net
最近年取ってきたから、10年前とか2〜3年前くらいの感覚でやばい。
ニコニコ動画で グラディウス5 の画面みて「最新のゲームって超絶すげー」とか感心してたら
10年前発売の旧作だと知りショック。そりゃPS2だもんな。昔のはずだよ。

519 :名無しさん@お腹いっぱい。:2014/09/11(木) 17:15:47.87 .net
そういえば2〜3年前くらい前の今日、アメリカですごい事件あったよね?

520 :名無しさん@お腹いっぱい。:2014/09/11(木) 17:20:28.74 .net
雑談はよそでやれ

521 :名無しさん@お腹いっぱい。:2014/09/11(木) 19:55:30.30 .net
そういえば今日じゃないけど5〜6年前くらい前、ドイツで壁壊し祭りみたいなのあったよね?

522 :名無しさん@お腹いっぱい。:2014/09/11(木) 22:28:03.76 .net
動いてる、動いてるよぉぉ

523 :名無しさん@お腹いっぱい。:2014/09/11(木) 22:34:34.98 .net
生きてるわ

524 :名無しさん@お腹いっぱい。:2014/09/12(金) 00:21:23.77 .net
kshってどうなの?業務で使われているのか?
AIXのデフォルトがkshだっけ

525 :名無しさん@お腹いっぱい。:2014/09/12(金) 00:35:56.81 .net
Linux以外はkshなんじゃないの?
cshで仕事をするアホはいないだろうし。

526 :名無しさん@お腹いっぱい。:2014/09/12(金) 02:33:21.92 .net
うちはよく使ってるよ
bashとほぼ変わらんと思ってる

527 :名無しさん@お腹いっぱい。:2014/09/12(金) 02:37:45.72 .net
MacOSXはLinuxでもないのにbashデフォだな

528 :名無しさん@お腹いっぱい。:2014/09/12(金) 03:23:37.29 .net
10.4からbashになったんだったかな。その前はtcshだったと思うw
マニアックすぎる。

529 :名無しさん@お腹いっぱい。:2014/09/12(金) 08:09:32.88 .net
今はオリジナルのAT&T kshがオーブンソース化されているね。
http://www.kornshell.com/

530 :名無しさん@お腹いっぱい。:2014/09/13(土) 19:03:41.41 .net
オーブンソースか。

531 :名無しさん@お腹いっぱい。:2014/09/14(日) 03:56:07.71 .net
シェル(貝)がオープンでソースかけられてるって?
うまそうだな

532 :名無しさん@お腹いっぱい。:2014/09/14(日) 06:06:08.22 .net
挿入ネタはいいです

533 :名無しさん@お腹いっぱい。:2014/09/14(日) 10:06:24.25 .net
529はぶっけかけの方じゃないか?

534 :名無しさん@お腹いっぱい。:2014/09/14(日) 17:11:01.54 .net
今シェルについて勉強してます。
どなたかash、bsh、cshの違いにつ
いて教えて頂けませんか?

メリット、デメリットがわからず、どれを使って良いのかわかりません。

自分で調べろやは無しでお願いします。

535 :名無しさん@お腹いっぱい。:2014/09/14(日) 18:21:28.45 .net
勉強してるんなら自分で調べるべきだろ。

536 :名無しさん@お腹いっぱい。:2014/09/14(日) 18:34:45.06 .net
挿入回答はいいです

537 :名無しさん@お腹いっぱい。:2014/09/14(日) 19:04:37.79 .net
>>534
bshっていうとbeansh、javaのシェルじゃないか。bashの間違いだろ。
cshはともかく、便利なbashと、互換性のあるashは両方使えばいい。
csh使うならtcshとかzshの方がいいんじゃないか。
とりあえず、ついてんの使え。

538 :名無しさん@お腹いっぱい。:2014/09/14(日) 19:05:30.05 .net
>>534
あとdashとkshも忘れるな。

539 :名無しさん@お腹いっぱい。:2014/09/14(日) 19:08:29.20 .net
宿題は自分でやれ

540 :名無しさん@お腹いっぱい。:2014/09/14(日) 19:44:39.21 .net
bashにしろって言ったら「仕事では(t)cshを使うことになった!だまされた!」って言うだろうし
cshにしろって言ったら「いまどきcshなんて使ってない!だまされた!」とか言うんだろ?
どうせそうなんだろ?

541 :名無しさん@お腹いっぱい。:2014/09/14(日) 20:17:27.68 .net
>>534

a b c で並んでいるけど、基本ば sh (bourne shell) か ksh あたりな。
別にどれつかってもそんなにかわらないが、zsh だけは他と違いすぎるのであくまで趣味で。

スクリプト書くのでなければ csh でもいいが、基本は ksh bash だよ

542 :名無しさん@お腹いっぱい。:2014/09/14(日) 21:50:14.99 .net
>>534
改変コピペ
http://peace.2ch.net/test/read.cgi/unix/1398419457/71

543 :名無しさん@お腹いっぱい。:2014/09/14(日) 21:50:21.53 .net
>>534
基本 bourne shell (/bin/sh) の派生と csh の派生があると考えたら良い。
普通に使う分にはそれほど違いはない。
csh系もけっこうコマンド叩いたりするには良い。

何が違うかと言えば、csh系はシェルスクリプトの文法がC言語に似ていて独特。

基本的にcshでシェルスクリプトを書かないのがマナーとされている。
自宅では好きなの使えば良い。

bashもけっこう拡張されていて、ポータブルじゃないスクリプトがLinuxなんかに
書かれていて、これもちょっとあまり良いことではないかもしれない。
Linuxのbash向けに書かれたスクリプトが他のOSでは走らないという
ことが起こり得る。

Linuxの /bin/sh は /bin/bash へのリンクなので、bashがデフォルト。
だが、他のOSには bash がデフォルトで入っているわけではない。

/bin/sh の bourne shell で動くように書くのがお作法とされている。

544 :名無しさん@お腹いっぱい。:2014/09/14(日) 22:24:54.67 .net
改変コピペにマジレスしても無駄。

545 :名無しさん@お腹いっぱい。:2014/09/14(日) 22:48:05.25 .net
ログが残って、これからUnix業界に入ってくる新人が同じ質問してググって
ひっかかるから意味あるにょ

546 :名無しさん@お腹いっぱい。:2014/09/15(月) 02:08:57.75 .net
メリット、デメリットって聞くのはゆとり世代なんだよなぁ。
BシェルであることがメリットだがBシェルであることがデメリットだし
CシェルであることがメリットだがCシェルであることがデメリットだし
個性のあるものや違いのあるものは、それ自体がメリットとデメリットを
兼ね備えてるんだから、そんなメリットをキニシナイで「何が違うか」
を追求すればいいのに。

547 :名無しさん@お腹いっぱい。:2014/09/15(月) 03:36:26.77 .net
トートロジーとかいらね

548 :名無しさん@お腹いっぱい。:2014/09/15(月) 13:59:14.54 .net
Cシェル使ってても、Bシェル(系)の読み書きは必須。
でも、逆はそうでもない。
Cシェル覚えるのは、実際にスクリプトにぶつかってからでいい。

549 :名無しさん@お腹いっぱい。:2014/09/15(月) 17:13:35.55 .net
そんなのにぶつかったら、cshは知りません。といって窓際ジジイに振れ。
ジジイから仕事を取り上げてはイカン。

550 :名無しさん@お腹いっぱい。:2014/09/16(火) 13:45:24.39 .net
As soon as he starts to gently stroke my hair, my shell begins to open.
優しく髪をさわられるやいなや私の貝が開くのです
                             竹内由恵

551 :名無しさん@お腹いっぱい。:2014/09/16(火) 14:01:09.03 .net
そういうよくある男女の日常はいいです。

552 :名無しさん@お腹いっぱい。:2014/09/16(火) 14:58:11.67 .net
彼女は上付きでやたらでかい栗あるよ。

553 :名無しさん@お腹いっぱい。:2014/09/16(火) 15:01:24.53 .net
そういう彼女の正規表現はいいです。

554 :名無しさん@お腹いっぱい。:2014/09/16(火) 16:39:08.22 .net
え?
まんこって正規表現になるのか?
性器表現かと思っていた。

555 :名無しさん@お腹いっぱい。:2014/09/16(火) 16:39:59.70 .net
そういう直接表現はいいです。

556 :名無しさん@お腹いっぱい。:2014/09/16(火) 16:49:16.49 .net
まんこは表現じゃなくて、インスタンスだろ?

557 :名無しさん@お腹いっぱい。:2014/09/16(火) 17:03:44.39 .net
そういう話はどうでもいいです。

558 :名無しさん@お腹いっぱい。:2014/09/16(火) 20:24:42.56 .net
職場の若い男の子に1回だけ許したら主人のより大きくて、、

559 :名無しさん@お腹いっぱい。:2014/09/16(火) 21:15:35.64 .net
おいおい困るよー。
男の子のインスタンスを参照外しをしてくれ。

560 :名無しさん@お腹いっぱい。:2014/09/17(水) 02:01:03.34 .net
下ネタは俺ももういらん。楽しいからずっと続いてしまう。

561 :名無しさん@お腹いっぱい。:2014/09/17(水) 02:06:24.32 .net
下ネタって楽しいものなのか
男だけどおっさんの下ネタとか聞きたくない

562 :名無しさん@お腹いっぱい。:2014/09/17(水) 02:21:47.63 .net
下ネタは長葱が有名だね。

563 :529:2014/09/17(水) 04:18:24.99 .net
貝をオーブンで焼くっていっただけなのに、なぜか続くな。
正規表現とか出てきだすと、もう sed で 置換 しちゃいやよとかとまらんからもうやめれ。

564 :名無しさん@お腹いっぱい。:2014/09/17(水) 07:05:23.59 .net
OK、俺には早すぎるスレだった

565 :名無しさん@お腹いっぱい。:2014/09/17(水) 14:51:28.26 .net
シェルスクリプトの話題

MacOSXで意外と良い機能 automator 使ってる人いる?
アレ、他のOSにも広がるといいのだが。

566 :名無しさん@お腹いっぱい。:2014/09/17(水) 17:29:57.29 .net
automator?
kwsk

567 :名無しさん@お腹いっぱい。:2014/09/17(水) 17:48:24.59 .net
ggr

568 :名無しさん@お腹いっぱい。:2014/09/17(水) 17:51:18.46 .net
MacのGUIによる自動化ツールじゃなかったっけ?
Apple製品で固められたソフトウェア環境で、Appleの考えるUXに従う操作を自動化する的な奴。
Appleの考えるUXの範囲の操作しか出来ないし、Apple製品で固めなきゃ駄目だから広まらんだろう。

ただこれシェルスクリプトの話題か・・・?

569 :名無しさん@お腹いっぱい。:2014/09/17(水) 20:42:46.79 .net
リモートから、なんちゃらスクリプトでitunesのコントロールとかしてたことはあるけど、何だっけなぁ。

570 :名無しさん@お腹いっぱい。:2014/09/17(水) 20:46:02.61 .net
ぐぐったらosascriptってコマンドっぽい。中身はapplescript。automatorからも使えるらしいから、その話かな。

571 :名無しさん@お腹いっぱい。:2014/09/17(水) 22:18:52.00 .net
ごめん、勘違いだったわ。Automatorってシェルスクリプトかと思っていた。

572 :名無しさん@お腹いっぱい。:2014/09/17(水) 23:25:58.55 .net
Windowsで言えばcomオブジェクトを使うPowerShellスクリプトを生成する
GUIのウィザードみたいなもの?インタフェース情報を日本語で出してくれると
確かに便利だと思うが... スクリプト?

573 :名無しさん@お腹いっぱい。:2014/09/18(木) 01:59:22.10 .net
自分の「ユーザー名だけ」を得るにはどうやればよいのでしょうか。
今はこうしてるんですけど何かコマンドありますか?

expr "`id`" : 'uid=[0-9]\{1,\}(\([^)]\{1,\}\)'

574 :名無しさん@お腹いっぱい。:2014/09/18(木) 02:07:48.35 .net
echo $USER

575 :名無しさん@お腹いっぱい。:2014/09/18(木) 02:08:10.72 .net
>>573
whoami

576 :名無しさん@お腹いっぱい。:2014/09/18(木) 02:08:46.73 .net
id -u -n

577 :名無しさん@お腹いっぱい。:2014/09/18(木) 02:10:38.33 .net
>>573
なんでそんなに面倒くさいことやってるの?
せめて help くらい見ようとは思わないの?

578 :名無しさん@お腹いっぱい。:2014/09/18(木) 02:12:11.02 .net
>>577
何のhelp?

579 :名無しさん@お腹いっぱい。:2014/09/18(木) 02:12:11.99 .net
>>577
そこのレベルに行くまでのステップとしてこういうスレが必要

580 :名無しさん@お腹いっぱい。:2014/09/18(木) 02:15:30.80 .net
>>578
id

581 :名無しさん@お腹いっぱい。:2014/09/18(木) 02:20:51.40 .net
>>573 が expr と正規表現さえ知らずにいれば
もっとシンプルな答えに辿り着けたんだろうな

582 :名無しさん@お腹いっぱい。:2014/09/18(木) 02:45:03.81 .net
皆さんありがとうございます。
man id は一応読んだのですが、-n だけやって出ねーじゃんと怒ってたのでした。
ありがとうございました。

583 :名無しさん@お腹いっぱい。:2014/09/18(木) 12:19:41.74 .net
>>578
へーあにーそんばで
へーなじゃあにばで
へーゆのあにさーわん
へーぇ
うえないわずんが

584 :名無しさん@お腹いっぱい。:2014/09/18(木) 12:28:45.24 .net
こういうのおもしろいと思って書いてるのかな

585 :名無しさん@お腹いっぱい。:2014/09/18(木) 12:31:53.72 .net
面白さを期待して2chを開いたら負け

586 :名無しさん@お腹いっぱい。:2014/09/18(木) 21:29:39.70 .net
>>582
そういう質問良いと思うよ。説明する方も勉強になる。
この過去ログがどこかにストックされて、またいつか誰かが読む。

587 :名無しさん@お腹いっぱい。:2014/09/18(木) 22:05:19.49 .net
本人乙ω

588 :名無しさん@お腹いっぱい。:2014/09/18(木) 22:21:33.17 .net
$whoami
>>575

589 :584:2014/09/18(木) 22:22:09.13 .net
$whoami
>>575

と書いておくべきだったかな。

590 :名無しさん@お腹いっぱい。:2014/09/18(木) 22:40:14.98 .net
$ who am i
$
あれ、いつからこうなった?

591 :名無しさん@お腹いっぱい。:2014/09/18(木) 23:25:45.65 .net
>>590
whoの結果は?

592 :名無しさん@お腹いっぱい。:2014/09/18(木) 23:44:55.44 .net
who mom like

593 :名無しさん@お腹いっぱい。:2014/09/19(金) 06:29:35.60 .net
>>591
$ who
myname tty8 2014-09-13 10:21 (:0)
$ who am i
$ who mom likes
$ whoami
myname
$
でした。

594 :名無しさん@お腹いっぱい。:2014/09/19(金) 06:37:03.81 .net
>>576
Solarisのidコマンドには -u や -n のオプションがないんだよ。
しかもwhoamiコマンドも/usr/ucb送りだからインスコされてない場合が多い。

よって、>>573 みたいにするのが最善。

595 :名無しさん@お腹いっぱい。:2014/09/19(金) 06:52:46.26 .net
>>574
$USER は、その時点のuidがセットされているとは限らない。
たとえば su したとき、rootにならずに su前のユーザー名のままになる。

596 :名無しさん@お腹いっぱい。:2014/09/19(金) 07:28:44.10 .net
なんだ、>>573って超上級者かよ。素人がとんでもない暴走をしているように見えた。

597 :名無しさん@お腹いっぱい。:2014/09/19(金) 07:30:54.28 .net
basename $0 をポータブルにするために ${0##*/} に書くのと同じ感じ?

598 :名無しさん@お腹いっぱい。:2014/09/19(金) 07:35:31.05 .net
>>573 はもうちょっと簡単に書けるだろ

expr "`id`" : '.*uid=[^(]*(\([^)]*\))'

ちなみに uidのところを gid に買えて id -gn の動作にもできる。

599 :名無しさん@お腹いっぱい。:2014/09/19(金) 07:43:55.67 .net
どうでもいいことかもしれないけど、Unixのこの手のシェル芸は顔文字に見えてしまうことがけっこうある。

(*.*) すべてのファイル

600 :名無しさん@お腹いっぱい。:2014/09/19(金) 07:59:02.69 .net
id | (IFS='()' read u n o; echo $n)

601 :名無しさん@お腹いっぱい。:2014/09/19(金) 08:18:30.62 .net
(IFS='()'; set `id`; echo $2)

602 :名無しさん@お腹いっぱい。:2014/09/19(金) 09:04:43.38 .net
>>599
すべてのファイルなら*でよいのだが

603 :名無しさん@お腹いっぱい。:2014/09/19(金) 09:39:40.02 .net
DOSの人か。

604 :名無しさん@お腹いっぱい。:2014/09/19(金) 09:57:33.32 .net
逆に、「拡張子のないファイルだけ」を表すのが難しかったりする

605 :名無しさん@お腹いっぱい。:2014/09/19(金) 10:03:59.99 .net
例えば
fileA fileB
・・・
*** ×××
=== ÷÷÷

とあった場合、ループ処理を行いながら1行ずつ結合するにはどのようにすればいいのでしょうか。

606 :名無しさん@お腹いっぱい。:2014/09/19(金) 10:19:02.50 .net
>>605
paste fileA fileB

607 :名無しさん@お腹いっぱい。:2014/09/19(金) 12:22:12.15 .net
>>605
スクリプトでやると意外と面倒くさいな

608 :名無しさん@お腹いっぱい。:2014/09/19(金) 12:49:08.21 .net
こういうことがやりたいの?

exec 3< fileA
exec 4< fileB

while
read a <&amp;3; st_a=$?
read b <&amp;4 || [ "$st_a" = 0 ]
do
echo "$a $b"
done

609 :名無しさん@お腹いっぱい。:2014/09/19(金) 12:51:38.48 .net
この板って&が化けるんだ、、

610 :名無しさん@お腹いっぱい。:2014/09/19(金) 13:07:14.44 .net
>>605です。

>>606 >>608のお方、ありがとうございます。

最終的にやりたいこととしては
複数のファイルの中にあるものを連結させるのと同時に先頭や間に文字列を追加。
さらには連結させた一行一行がコマンドとして一括実行出来ればと思ってるんですが中々良い方法が見つかりません。

611 :名無しさん@お腹いっぱい。:2014/09/19(金) 13:11:13.45 .net
perlか何かで書いた方が楽そう。

612 :名無しさん@お腹いっぱい。:2014/09/19(金) 13:13:40.58 .net
>>610
だったら >>608 の方法でいいじゃん。これベースに必要な処理を書き加えるだけ。

613 :名無しさん@お腹いっぱい。:2014/09/19(金) 15:35:05.43 .net
>>610
そういうのはEXCEL使えば一瞬で終わることがある。
Unix使いだが、Excelも愛用している。

614 :名無しさん@お腹いっぱい。:2014/09/19(金) 15:46:53.92 .net
excelの起動が一瞬でないのに

615 :名無しさん@お腹いっぱい。:2014/09/19(金) 15:51:02.66 .net
彼がスクリプト書くのに悩む時間よりは短いんだろう

616 :名無しさん@お腹いっぱい。:2014/09/19(金) 15:59:07.58 .net
なんでも無理にスクリプト組む必要はないと思うぞ。業務の場合は特に。
勉強目的なら時間かけて考えるべきだが、
業務の場合はスピードが求められるから、いろいろな方法でやればいいじゃん

617 :名無しさん@お腹いっぱい。:2014/09/19(金) 16:03:29.91 .net
>>613
連結させた各行を(UNIX)コマンドとして実行したい、と言ってるのに、
EXCEL(笑)でやるってアホか

618 :名無しさん@お腹いっぱい。:2014/09/19(金) 19:13:35.14 .net
エクセルとかアプリも使って良いなら、 >>606 の時点で終わってるわけだが。

619 :名無しさん@お腹いっぱい。:2014/09/19(金) 19:33:28.05 .net
>>618
どういうこと?

620 :名無しさん@お腹いっぱい。:2014/09/19(金) 19:34:19.24 .net
>>618
うむ、俺もなぜ paste がスルーされたのかわからん。
pasteがスルーされてるからEXCELを提案したが

>>617
テキストファイルを交互に読み込ませるなどの場合、
EXCELでデータのインポートをして、セルの操作で一列に並べて

cat file1a
cat file2a
cat flle1b
cat file2b
cat file3a




それをコピーして、

#!/bin/sh
の真下にコピペして冗長なスクリプト流して一瞬で作業が終わる時とかもある。
急ぎの場合は、EXCELで済むときはそうやってる。

ただし、スクリプト書く方が早い場合と、EXCELでスクリプト作った方が早い場合の
見分けなんかはある程度経験値がいる。

621 :名無しさん@お腹いっぱい。:2014/09/19(金) 19:35:19.20 .net
EXCELやEXCELのマクロを使ってやる時もあるし、
テキストエディタのマクロを使ってコマンドを作る時もあるし、
シェルスクリプトを書く場合もあるってこと。

622 :名無しさん@お腹いっぱい。:2014/09/19(金) 19:44:02.87 .net
>>619
アプリに依存しないでshだけで動く必要がある場合もあるから。配布の場合とか。
自分の手間を省くためのツールなら、何でもありだから、
プリインストールのexcelを起動する前に、pasteをインスールして実行できるんじゃないかという勢い。

623 :名無しさん@お腹いっぱい。:2014/09/19(金) 19:48:56.23 .net
やっぱEXCELとか使ってると無能になるんだな。

624 :名無しさん@お腹いっぱい。:2014/09/19(金) 19:49:06.19 .net
pasteじゃうまくいかなかったんじゃなかったっけ。

625 :名無しさん@お腹いっぱい。:2014/09/19(金) 19:51:54.03 .net
pasteをわざわざインストールしなきゃいけない環境ってあるの?

626 :名無しさん@お腹いっぱい。:2014/09/19(金) 19:57:33.57 .net
後出しの追加仕様があっただけだろ。
それがevalとかの内容だったのに、そこで更にエクセルの方が、とか言ってる
餌が登場で、元の話はどうでもよくなってる空気

627 :名無しさん@お腹いっぱい。:2014/09/19(金) 19:58:21.37 .net
>>622
EXCELで作った冗長スクリプトってどこでも使えるよ。
EXCELが無理ならEmacsで作ればいいし。

628 :名無しさん@お腹いっぱい。:2014/09/19(金) 20:00:54.64 .net
25歳。
エクセラー、Microsoftの回し者と呼ばれる俺だけど、みんなもMOS受けてみなよ。
超お勧め。

つか、>ループ処理を行いながら1行ずつ結合するにはどのようにすればいいのでしょうか。

これをやったらみんな満足するってことかな。
元のテキストのサンプルくらいははってほしいよな〜と

629 :名無しさん@お腹いっぱい。:2014/09/19(金) 20:07:20.23 .net
人生の選択に失敗したからって人を巻き込もうとするなよ。

630 :名無しさん@お腹いっぱい。:2014/09/19(金) 20:15:16.46 .net
>>628
> 元のテキストのサンプルくらいははってほしいよな〜と
>>605にあるじゃん。

631 :名無しさん@お腹いっぱい。:2014/09/20(土) 00:32:19.77 .net
excelってコマンド起動で引き数渡しても結果吐き出してくれたり
すんの?
だったら使いたいなぁ。
Windowsにマウントかけたり日本語ファイル名使われたり
いろいろ面倒なんだよな。
excelでフィルタ処理かかるならそれで良いわ

632 :名無しさん@お腹いっぱい。:2014/09/20(土) 00:54:04.64 .net
CSV を直接いじるより Excel であーでもないこーでもないと
試行錯誤しながら加工・集計・グラフ化した方が楽な時もある

マクロの自動記録を使えば GUI 操作を手順化して VBA 出力できるし
その VBA を Ruby や Python から呼ぶって感じで使えば
シェルスクリプトからバッチ処理として呼ぶことも出来る

633 :名無しさん@お腹いっぱい。:2014/09/20(土) 00:57:57.30 .net
>>60
いいな、これ。

paste だと、おなじ行数だけコマンドを記述したファイルを用意しないと…なので
いちど Excel に貼り付けて concatenate やら & やらで組み立てて流し込んでた。
素晴らしい。

634 :名無しさん@お腹いっぱい。:2014/09/20(土) 01:02:38.79 .net
>>633
60 じゃなくて 606 だw

関係ないけど、サーバごとに中途半端な差分が必要なコンフィグとか
Excel から FSO でコンフィグを吐き出させたりしてる。
vbLf が心の友。

635 :名無しさん@お腹いっぱい。:2014/09/20(土) 01:24:27.74 .net
>>634
わかる

Excel がエディタ兼シェルスクリプト生成ツールになってたりする

636 :名無しさん@お腹いっぱい。:2014/09/20(土) 01:40:04.56 .net
>>634
git使えよ

637 :名無しさん@お腹いっぱい。:2014/09/20(土) 09:32:44.10 .net
excelでテキスト操作とか嫌がらせにもほどがある

638 :名無しさん@お腹いっぱい。:2014/09/20(土) 09:53:30.66 .net
execlしか使ったことない。execvの方が多いか。

639 :名無しさん@お腹いっぱい。:2014/09/20(土) 10:34:06.98 .net
>>631
CSVやテキストデータの読み込みなんて大昔からついているし、
ソートとかセルの操作をVBAやショートカット、関数などを組み合わせて
手早く処理をすると、シェルスクリプトを書くよりも簡単にコマンドの羅列なんかを
生成できるので、それをTeratermからスクリプトとして登録したり、
NFSやSMBがあればマウントしてもいいし、メールで送ってもいいし
なんしどうにでもできる。

>>632
Mac版のExcelもアップルスクリプトやVBA使えるし、いろいろ
拡張されていて、思わぬ機能や使い方がしれっと搭載されていたりするよな。

>>637
馬鹿にしてないで深みに入っていくとEXCELは無現の可能性を秘めているソフトだぞ。
ゲームも作れる、イラストもかける、大よそなんでもできる。
知り合いは、VBAでマクロを組んで、客が欲しいCGIを選択肢を選んでカスタマイズ
していけば、自動でPerlのコードを生成するプログラムを書いていた。
そいつは自営業・フリーランスのSEだけど、客の50万円100万円くらいの
依頼をそのシステムで半日でくみ上げていて、偉いやつだなと思ったぞ

640 :名無しさん@お腹いっぱい。:2014/09/20(土) 10:39:57.24 .net
ここは「シェルスクリプト総合」スレなんで他所行って下さい

641 :名無しさん@お腹いっぱい。:2014/09/20(土) 11:06:18.65 .net
>>640
そもそも事の始まりはあいまいな質問を出した>>605に問題があるだろ

シェルスクリプトでやるより他の方法が良いよ・・もまたシェルスクリプトのスレにふさわしい話題だ。
文字列処理ではC使わずにPerlつかえよってアドバイスとかも有効だろ

642 :名無しさん@お腹いっぱい。:2014/09/20(土) 11:33:52.33 .net
expr で拡張子を除いたファイル名にって時
これは期待通りだけど、

$ expr "/tmp/hoge.txt" : '.*/\(.*\)\.'
$ hoge

数字だけのファイル名だとこうなっちゃうのね・・

$ expr "/tmp/0001.txt" : '.*/\(.*\)\.'
$ 1

643 :名無しさん@お腹いっぱい。:2014/09/20(土) 11:35:17.30 .net
>>641
そこまでで終わってればよかったんだけどな。

644 :名無しさん@お腹いっぱい。:2014/09/20(土) 11:37:05.58 .net
>>642
うちではならない

645 :名無しさん@お腹いっぱい。:2014/09/20(土) 11:39:52.11 .net
>>642
どこの expr よ? バグじゃないの?
ちゃんと 0001 になるよ。

646 :名無しさん@お腹いっぱい。:2014/09/20(土) 12:19:08.46 .net
>>642
OSX だけなった。なんだこれ。

647 :名無しさん@お腹いっぱい。:2014/09/20(土) 12:43:01.82 .net
変数代入必要だけど、expr使わずにこうしろということか。

$ f=/tmp/0001.txt; f=${f##*/}; echo ${f%.*}
0001

648 :名無しさん@お腹いっぱい。:2014/09/20(土) 12:45:12.04 .net
>>646
え? 0001 になるけど

$ expr "/tmp/0001.txt" : '.*/\(.*\)\.'
0001

$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.9.4

649 :名無しさん@お腹いっぱい。:2014/09/20(土) 13:27:17.39 .net
>>648
ProductName: Mac OS X
ProductVersion: 10.6.8

さっさとアップグレードしろって事かな。めんどくせー。

650 :名無しさん@お腹いっぱい。:2014/09/20(土) 21:06:24.47 .net
Mac用のパッケージマネージャとかあるんだから新しい入れれば良いんじゃね?

651 :名無しさん@お腹いっぱい。:2014/09/20(土) 21:53:15.08 .net
シャッチョさん、新しい入れるー?

652 :名無しさん@お腹いっぱい。:2014/09/21(日) 01:11:35.77 .net
>>639
MS Officeが便利なのは否定しないけどスレチなのは何とかしようよ。
>>640
Excelをシェルスクリプトで操作する例を出してくれればそれはそれでアリなんだけどな。
xlsファイルとかにスクリプトを記述するのはシェルスクリプトじゃないスクリプトなんで却下で。
ExcelはCOMで操作できるし、wshとかPowerShellでやっても良ければ楽勝なんだけど、
wshはshとついてるけどシェルじゃないし、PowerShellは一種のシェルだけど…このスレ的には有りか…?

653 :名無しさん@お腹いっぱい。:2014/09/21(日) 01:44:24.04 .net
>>652
Windows PowerShell Part4
http://peace.2ch.net/test/read.cgi/win/1359719778/l50

654 :名無しさん@お腹いっぱい。:2014/09/21(日) 01:56:48.40 .net
>>653
専用スレはどこかって話じゃなくて、
このスレ的にはPowerShellのShellはShellScriptのShellとして扱っても良いのかって話でしょうが

655 :名無しさん@お腹いっぱい。:2014/09/21(日) 02:05:07.55 .net
$ 場違いなのは\
$ 間違いない
zsh: command not found: 場違いなのは間違いない

656 :名無しさん@お腹いっぱい。:2014/09/21(日) 02:14:51.70 .net
>>655
% zsh なのに何で $ にしてるの。
zsh: can't open input file: なのに何で

657 :名無しさん@お腹いっぱい。:2014/09/21(日) 02:35:03.71 .net
つまらないよ

658 :名無しさん@お腹いっぱい。:2014/09/21(日) 02:37:59.78 .net
>>639
なんか意味がわからないけど

例えばsedとかを多用してデータ編集やソートや改行編集を
する簡単なスプリクトを組むとするじゃない。
コレをUnixでは コマンド ファイル名
とかで流せば自動生成されてファイルをいじれるよね。
ワイルドカードやスケジュールも取りながら。
これをexcelでも内容のマクロにデータを吸わせて処理させて吐かせられるの?
例えばexcel.exe マクロ名 ファイル名
とかいう引数で処理できちゃうのかな?

ちょっと種類多いファイルで大きなデータ量の自動編集でのフィルタの様な
仕事を良く書いてるんで、excelで通せるなら成形の拡張性も大きいし利用したいのよ。
引数でワイルドカードのデータを与えられないなら無理なんだわ
手作業でexcelに吸わせて吐かすような時間ないから。

もしかして開いたexcelのマクロ上でワイルドカードの吸い込みと吐き出しの
自動処理ができるのかな?
それならスケジュールに組めなくても1作業で処理できそうだが。

659 :名無しさん@お腹いっぱい。:2014/09/21(日) 03:13:05.98 .net
>>658
>>620で書かれているけど611はその場で必要なスクリプトを素早く作る為のツールとしてエクセルを話題に出したように思える。
バッチ処理を想定していなかったんしゃないの?

660 :名無しさん@お腹いっぱい。:2014/09/21(日) 03:31:27.50 .net
>>658
WindowsならCOMを叩けばGUI触らずにExcelで色々な処理させる事ができるんだけど、
COMを複数回のコマンド実行の組合せで操作する方法は聞いたことがないんだよなぁ…
標準入出力を経由しての生成した・されたCOMオブジェクト受け渡しが出来んと、
ワンライナーが本体な事になってシェルスクリプトらしくないし、どうやれば上手く出来るだろう。

>>659
その時点ではそうかもしれんけど、そっから先はExcel便利って言ってるだけだからな。
このスレでそういうということはシェルスクリプトからExcel操作できるに違いない的な?(多分違う)

661 :名無しさん@お腹いっぱい。:2014/09/21(日) 03:36:17.98 .net
>>659
そういうことなの?
スクリプトはすぐに書けるから関係ないんだよなぁ。
精製されたデータをフォーマットや利用都合に併せて
編集改ざんするだけなんで。

>>660
たとえばexcelのマクロファイルのショートカットを置いて
そこにエクスローラで大量につかみ取ったファイルを
ドロップしたら、規則に従って自動生成されたファイルが
書き出されるだけでも良いのだけど。

662 :名無しさん@お腹いっぱい。:2014/09/21(日) 03:36:21.80 .net
>>658
すれ違いなのでこの辺りでやめておくが

>手作業でexcelに吸わせて吐かすような時間ないから

Excelでも中級以上になるとそうそう早い作業が行える場合もあるわけさ。
それが前提でシェルスクリプトでここで質問するレベルの場合、

1.シェルスクリプトを習得することが目的
2.作業をはやく終えたい

2が目的の場合、EXCELでやったらいい場合もあるよってお話。
それを必要以上に掘り下げると延々とすれ違いの話題が続くのでやめておくわ。

663 :名無しさん@お腹いっぱい。:2014/09/21(日) 03:37:46.40 .net
>>660
それこそ、WindowsでUnixのシェルスクリプト使えばできるが、まあこの辺でやめておこう。
cygwin sfu sua mkstoolkit powershell applescript とかいろいろ方法はあると思う。

664 :名無しさん@お腹いっぱい。:2014/09/21(日) 03:45:47.71 .net
冷静に考えて、EXCELで生成したバッチを張り付けて長すってのも
シェルスクリプトの問題解決手法の一つの話題かもしれん。
俺以外も何人か「たまにやる」って書き込んでるし。

同じ感じでEmacsとか秀丸のマクロを使うとかもやる。
肩の力を抜いて何が何でもシェルで制御みたいな使命感からの解放というテーマ

665 :名無しさん@お腹いっぱい。:2014/09/21(日) 06:32:06.32 .net
>>647 も悪くないと思う

#!/bin/bash
time {
 for(( i=1000; i; --i ))
 do
  if
   #[[ '/var/tmp/0001.txt' =~ (.*/)?([^.]*)[.]?.* ]]
   [[ '/var/tmp/0001.txt' =~ .*/(.*)[.].* ]]
  then
   echo "rematch: ${BASH_REMATCH[1]}"
  fi
 done
} | tail -n 1

time {
 for(( i=1000; i; --i ))
 do
  printf 'expr: '
  expr "/tmp/0001.txt" : '.*/\(.*\)\.'
 done
} | tail -n 1

time {
 for(( i=1000; i; --i ))
 do
  f='/tmp/0001.txt'
  f="${f##*/}"
  echo "parameter expansion: ${f%.*}"
 done
} | tail -n 1

666 :名無しさん@お腹いっぱい。:2014/09/21(日) 09:16:08.44 .net
>>655
なんで\付けてるのにプロンプト出てくるの?

667 :名無しさん@お腹いっぱい。:2014/09/21(日) 09:18:33.09 .net
PS2='$ '

668 :名無しさん@お腹いっぱい。:2014/09/21(日) 12:28:44.73 .net
>>661
WSHスクリプトにファイルをドロップしてそこからExcelのCOMオブジェクト作って
処理させるのは余裕の筈だけど、名前にsh付いてるだけでシェルスクリプト関係ないっす。

>>664
テキストエディタの矩形選択と正規表現置換だけでも結構色々出来るね
引数が不変だとか、その場で一度やれば終わりな作業ならこれで済ます

669 :名無しさん@お腹いっぱい。:2014/09/21(日) 19:37:15.32 .net
こんばっしゅ(bash)

標準出力と標準エラー出力、標準入力から入力した文字列を
コンソールとログファイルに出力させたいです。良い方法ありますでしょうか?

お願いします。

# これだと標準入力から出力した文字列が出力されないんです・・・
exec &> >(tee ${logfile})

670 :名無しさん@お腹いっぱい。:2014/09/21(日) 19:59:15.06 .net
script

671 :名無しさん@お腹いっぱい。:2014/09/21(日) 20:12:34.14 .net
>>670
ありがとうございます
script だと、プロンプト部も出力されてしまうんですよね

すみませんが、どうにか script 以外で実現する方法はないでしょうか?

672 :名無しさん@お腹いっぱい。:2014/09/21(日) 20:52:36.54 .net
exec < <(tee -a $logfile)
exec > >(tee -a $logfile) 2>&1

673 :名無しさん@お腹いっぱい。:2014/09/21(日) 20:53:45.12 .net
>標準入力から入力した文字列をコンソールとログファイルに出力させたいです。

とはどういうこと?readコマンドとかのお話?

674 :名無しさん@お腹いっぱい。:2014/09/21(日) 20:54:55.21 .net
すみませんが詳しい方のみ回答をお願いします

675 :名無しさん@お腹いっぱい。:2014/09/21(日) 21:23:04.08 .net
いや、お前の質問の仕方が悪いんだろ?

676 :名無しさん@お腹いっぱい。:2014/09/21(日) 21:23:31.18 .net
態度悪いから教えてやらねえ

677 :名無しさん@お腹いっぱい。:2014/09/21(日) 21:33:25.07 .net
>>672
ファイル名は別にする方がいいと思う

678 :名無しさん@お腹いっぱい。:2014/09/21(日) 21:34:11.37 .net
>>673
そうですね。
read コマンドで入力された文字列がログに出ないので困っています。

格納された変数をファイルにリダイレクトすれば、暫定的に対処できるのですが
それだと一時凌ぎにしかならないので・・・

679 :名無しさん@お腹いっぱい。:2014/09/21(日) 21:39:09.02 .net
>>672
おお、なんかそれっぽい!
手元にUNIX環境がない&知識が乏しいため検証できませんが
大変助かりました。ありがとうございます。

>>677
どういう糸か聞いてよろしいですか?
ファイルへの書込みタイミングを気にされているのでしょうか

680 :名無しさん@お腹いっぱい。:2014/09/21(日) 21:50:57.09 .net
>>678
>>679
やっぱり態度悪いんだよ。

681 :名無しさん@お腹いっぱい。:2014/09/21(日) 22:04:39.41 .net
>>679
>>どういう糸か聞いてよろしいですか?

上のteeと下のteeが同時に動いていて同じファイルに書き込むから

682 :名無しさん@お腹いっぱい。:2014/09/21(日) 22:13:35.11 .net
>>681
tee に追記オプションを指定していますが、それでは解決しないのでしょうか?
書き込みのタイミングによっては、どちらか一方しか書き込みされないことを懸念されていると

683 :名無しさん@お腹いっぱい。:2014/09/21(日) 22:17:05.41 .net
上と下の tee で実施している処理を
ひとつの exec & tee コマンドで実装できれば解決できそうですね

684 :名無しさん@お腹いっぱい。:2014/09/22(月) 01:33:23.91 .net
名無しで煽って喧嘩させようとする暇人がいるw

685 :名無しさん@お腹いっぱい。:2014/09/22(月) 02:39:39.41 .net
>>663
さすがに目の前にUNIXの箱が置いてあるのに
できそこないのエミュは使わんなぁ。

686 :名無しさん@お腹いっぱい。:2014/09/22(月) 08:30:03.61 .net
なりすましに簡単に釣られんな

687 :名無しさん@お腹いっぱい。:2014/09/22(月) 09:29:43.37 .net
tee を一つには思いつかなかったが exec なら

exec 3>> "$logfile" 0< <( tee /dev/fd/3 ) 1> >( tee /dev/fd/3 ) 2>&1

688 :名無しさん@お腹いっぱい。:2014/09/22(月) 20:11:58.76 .net
>>685
その>>663の中に「エミュレータ」は一つも存在しない。
あえて言えばCygwinは「シミュレータ」かもしれないが。
SFU・SUAはネイティブUnixだど。

689 :名無しさん@お腹いっぱい。:2014/09/23(火) 14:41:53.66 .net
これでFA
exec 2>&1 >(tee -a "$logfile") < <(tee -a "$logfile")

690 :名無しさん@お腹いっぱい。:2014/09/23(火) 14:54:11.96 .net
>>689
それじゃ標準エラーがlogfileに出力されないし、細かいところ間違ってる。

691 :名無しさん@お腹いっぱい。:2014/09/25(木) 19:05:00.25 .net
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

692 :名無しさん@お腹いっぱい。:2014/09/25(木) 19:25:49.73 .net
>>691
今日1日で何回それを見たことやら・・・もうお腹いっぱいです。
久々にありえないレベルの脆弱性でしたね。bash死すべし。

693 :名無しさん@お腹いっぱい。:2014/09/25(木) 19:51:28.19 .net
>>691
いいけど、この場合envコマンドは不要なのでenvない方がいい。cshとかいうのは消滅してるので。

694 :名無しさん@お腹いっぱい。:2014/09/25(木) 20:15:03.71 .net
シェル関数のexportを環境変数で渡す時、関数定義を実行するつもりで関数定義終了後の任意の文字列までコマンドとして実行してしまう、ということか。bash1でも症状発生するぞ。こんな昔からあったのか、、

695 :名無しさん@お腹いっぱい。:2014/09/25(木) 20:28:15.93 .net
>>694
そもそも環境変数で関数が定義できるとか、誰が発明したんだよ。
echo='() { /bin/rm -rf /; }' とか絶対するなよ。

696 :名無しさん@お腹いっぱい。:2014/09/25(木) 20:35:57.05 .net
一応、引用元
90の日記: GNU Bashに脆弱性、環境変数を渡して呼ぶことで任意コード実行が可能に
http://slashdot.jp/journal/585655

697 :名無しさん@お腹いっぱい。:2014/09/25(木) 20:43:02.28 .net
bashスクリプトをCHIで実行してたら終了だな。
refererやuser-agentに突っ込まれたら…

698 :名無しさん@お腹いっぱい。:2014/09/25(木) 20:43:49.61 .net
誤 CHI
正 CGI

699 :名無しさん@お腹いっぱい。:2014/09/25(木) 21:08:38.27 .net
patch当てて関数定義後の文字列は無視したとしても、同名関数定義の問題は残るなぁ。
スクリプト内で使用してるすべてのコマンド(内部/外部とも)について、
スクリプト冒頭で unset -f echo ls cp mv rm .... とかしなければならない??

700 :名無しさん@お腹いっぱい。:2014/09/25(木) 22:24:27.22 .net
env X='() { (a)=>\' zsh -c "echo echo vuln"; [[ "$(cat echo)" == "vuln" ]] && echo "still vulnerable”

701 :名無しさん@お腹いっぱい。:2014/09/26(金) 01:01:02.95 .net
>>699
unsetは安全に呼び出せるの?

702 :名無しさん@お腹いっぱい。:2014/09/26(金) 01:35:01.96 .net
bashスクリプトだけじゃなくて、system()とかやってるperl, php, ruby, pythonスクリプトもアウトか
スゲー破壊力だわ こんなの見たことない。

703 :名無しさん@お腹いっぱい。:2014/09/26(金) 02:01:51.36 .net
ってかおまえら、なんで今まで気づかなかったの?
全員、注意力散漫過ぎじゃね?

704 :名無しさん@お腹いっぱい。:2014/09/26(金) 02:16:26.45 .net
だって環境変数に関数がセットできちゃってそれが実行されちゃうなんて
想定外なんだもん(誰かがわざと仕込んだんじゃ…)

705 :名無しさん@お腹いっぱい。:2014/09/26(金) 05:41:47.08 .net
>>701
builtin unset -f
すればいいな。
あと、echo とかの内部コマンドにすべて念のため builtin を付ける。
外部コマンドはすべてフルパスで実行、で気休めにはなるか??

706 :名無しさん@お腹いっぱい。:2014/09/26(金) 05:44:31.83 .net
>>705
builtin() がシェル関数だったらダメじゃん、アホか

707 :名無しさん@お腹いっぱい。:2014/09/26(金) 06:57:55.40 .net
脆弱性なんだからスクリプトの方であれこれやるんじゃなくて
bashにパッチあてるべきだろ

708 :名無しさん@お腹いっぱい。:2014/09/26(金) 07:14:21.93 .net
>>707
そのパッチを当てても、元々のシェル関数のexportの脆弱性は残るという話だろ。
patch当てただけで対策済みとでも?

709 :名無しさん@お腹いっぱい。:2014/09/26(金) 07:15:55.44 .net
>>707
patchでは、>>695 の攻撃は防げない。

710 :名無しさん@お腹いっぱい。:2014/09/26(金) 09:56:52.54 .net
コミットログ追いかけて、犯人を特定してくれ。

711 :名無しさん@お腹いっぱい。:2014/09/26(金) 10:24:48.23 .net
「30年以上前にそのバグつぶしてたわー」
https://twitter.com/oclsc/status/514876962830295040

712 :名無しさん@お腹いっぱい。:2014/09/26(金) 11:26:05.33 .net
chmod a-rwx bash

したらどうなる?起動できなくなったりするか?

713 :名無しさん@お腹いっぱい。:2014/09/26(金) 11:46:31.68 .net
>>711
30年前のshに関数ってあったっけ?

714 :名無しさん@お腹いっぱい。:2014/09/26(金) 11:51:14.39 .net
>>712
環境によるんじゃね

715 :名無しさん@お腹いっぱい。:2014/09/26(金) 12:08:05.08 .net
>>713
kshが1983で~30年前

716 :名無しさん@お腹いっぱい。:2014/09/26(金) 12:10:57.34 .net
様々なバグの元になるから関数のexportの仕様は没にしました、ってこと?

717 :名無しさん@お腹いっぱい。:2014/09/26(金) 13:18:39.66 .net
これ丸かっこのあとのスペースがないと発生しないな
よく気づいたなあ

718 :名無しさん@お腹いっぱい。:2014/09/26(金) 16:21:46.99 .net
ネット見ると、一部の物好きが自鯖にcurl投下して遊んでる程度だが、
一般層に向けた報道は全然騒いでないんだが・・・大丈夫なのかこれ?

BASHの脆弱性でCGIスクリプトにアレさせてみました
http://www.walbrix.com/jp/blog/2014-09-bash-code-injection.html

前回の、暗号が解読されちゃうってのは、誰にでもわかりやすいけど、
シェルで実行できると一般人に言っても、わかりにくいせいか。

719 :名無しさん@お腹いっぱい。:2014/09/26(金) 16:33:02.85 .net
NBCで今回の件が報道されたらしい

https://twitter.com/crazybob/status/515206151005147136/photo/1

「A bug called Bash」てw

720 :名無しさん@お腹いっぱい。:2014/09/26(金) 16:58:11.36 .net
>>718
「一般層に向けた報道」ってどの辺のメディアの話?

721 :名無しさん@お腹いっぱい。:2014/09/26(金) 17:17:19.03 .net
export関数を格納する環境変数名の頭に BASH_FUNC_ を付け、変数名の後ろに () を付けるという対策がされたみたい。
環境変数名(値ではない)に () 付きだとシェル自身では set や export できないけど、
C言語でputenv(3)とかできるだろうし、そんなことしなくても envコマンドでセットできてしまう。

env 'BASH_FUNC_echo()=() { 悪いこと; }' sh -c 'echo hello'

は、依然としてできてしまう。

722 :名無しさん@お腹いっぱい。:2014/09/26(金) 18:27:49.80 .net
1983年は既に31年前だぞ

723 :名無しさん@お腹いっぱい。:2014/09/26(金) 18:28:57.63 .net
そんなのみんなわかってるよ。

724 :名無しさん@お腹いっぱい。:2014/09/26(金) 18:40:14.28 .net
CGIで起動するのはwww-dataとかapacheなら設定のユーザ? rootじゃないよね。

725 :名無しさん@お腹いっぱい。:2014/09/26(金) 18:43:33.94 .net
普通はrootじゃないね。
そこからローカルから攻撃可能な穴を突いてrootを取る。

726 :名無しさん@お腹いっぱい。:2014/09/26(金) 18:44:59.96 .net
UAにsleep 10仕込んでブラウジング

727 :名無しさん@お腹いっぱい。:2014/09/26(金) 18:54:31.60 .net
while true; do /bin/false; doneとかも仕込めるんだよな...

728 :名無しさん@お腹いっぱい。:2014/09/26(金) 22:02:55.32 .net
forkbomb(){ forkbomb|forkbomb & } ; forkbomb

729 :名無しさん@お腹いっぱい。:2014/09/26(金) 23:30:51.08 .net
Services for Unix の bash
Cygwin の bash

でも再現しました。本当にありがとうございました。

730 :名無しさん@お腹いっぱい。:2014/09/27(土) 00:13:15.64 .net
ある意味枯れたプログラムだったから
みんな安心しきってたとこあるよね

731 :名無しさん@お腹いっぱい。:2014/09/27(土) 00:17:09.30 .net
最近でも連想配列追加されたりreadarray追加されたり新機能増えてるんだけどな
手元の最新版bashで開発してていざ本番環境のCentOSでテストやってみると動かなかったりする

732 :名無しさん@お腹いっぱい。:2014/09/27(土) 00:49:15.04 .net
純正シェルを使っとけば何の問題もなかったんや

733 :名無しさん@お腹いっぱい。:2014/09/27(土) 01:42:51.60 .net
上でも書かれていたシェルスクリプトは Bourne Shell で動くように書きなさいの教訓

ここより下に家を建てるなの石碑に似てるな。忘れたころにやってきた

734 :名無しさん@お腹いっぱい。:2014/09/27(土) 01:43:53.88 .net
最近はLinuxでBash用のシェルスクリプトで起動スクリプト書いてるのもいるが、
そういうのがあるから /bin/sh をリンクのはり直しでの暫定対応とかが難しくなるんだわ

735 :名無しさん@お腹いっぱい。:2014/09/27(土) 02:49:34.17 .net
>>719
やふうかどこかに載ってた翻訳記事に、
まともな翻訳しろよというコメントがついてたんだけど、
元から間違ってたわけねw

736 :名無しさん@お腹いっぱい。:2014/09/27(土) 04:25:36.39 .net
>>725
Webサービスならwwwユーザ権限だけで致命傷じゃね?

737 :名無しさん@お腹いっぱい。:2014/09/27(土) 06:30:23.88 .net
Bourne Shell で書くということは
$( )
(( ))
[[ ]]
なんかが使えないのか
不便すぎる・・・

なにか新しいシェルの実装が出てきそうな予感
fishとか既にあるみたいだけど

738 :名無しさん@お腹いっぱい。:2014/09/27(土) 06:55:03.56 .net
$( )
(( ))
[[ ]]
なんかに頼っていた奴は
頭が不自由過ぎる・・・

739 :名無しさん@お腹いっぱい。:2014/09/27(土) 07:04:56.58 .net
rubyからpythonに書き換える職人の他にbashからshに書き換える職人というのも現れるのかw

740 :名無しさん@お腹いっぱい。:2014/09/27(土) 07:27:30.33 .net
>>738
理由は?
自分が使えないから?

741 :名無しさん@お腹いっぱい。:2014/09/27(土) 07:29:57.08 .net
>>740
$( ) (( )) [[ ]] 使う方法も使わない方法も熟知してるから。

742 :名無しさん@お腹いっぱい。:2014/09/27(土) 07:35:07.70 .net
GNUは便利なら良いじゃん、とろくすっぽ考えずに実装する(してた)事が多い気がする。
emacsのファイルバリアブルも長い間evalれたし。

743 :名無しさん@お腹いっぱい。:2014/09/27(土) 08:01:35.64 .net
>>741
便利なのに使わないとかアホすぎる

744 :名無しさん@お腹いっぱい。:2014/09/27(土) 08:04:01.55 .net
>>743
両方使うって言ってるの読めないの?
便利な方しか知らないのってアホすぎる

745 :名無しさん@お腹いっぱい。:2014/09/27(土) 08:09:29.26 .net
もちろんなくても書く方法は分かってるけど
「こういう記法があったら便利だな」って理由で導入されたんだし
そりゃ使える状況ならバンバン使うだろ

746 :名無しさん@お腹いっぱい。:2014/09/27(土) 08:11:48.95 .net
>>745
それだと議論になってない。バンバン使わないとは言ってない。
と同時に/bin/shだけで書く方法にも熟知してるから、/bin/shに戻ってもなにも不便を感じない。
ここで不便を感じる人は偽物。

747 :名無しさん@お腹いっぱい。:2014/09/27(土) 08:24:29.22 .net
>>746
不便は感じるだろ
でないと $( ) とか使う意味ないし

なんか、引っ込みつかなくなってるんじゃね?

748 :名無しさん@お腹いっぱい。:2014/09/27(土) 08:25:36.28 .net
不便は感じない。
スクリプトでは基本、` ` にしてるから。
$( )使うのはワンライナーの時とか。

749 :名無しさん@お腹いっぱい。:2014/09/27(土) 09:32:16.26 .net
それを世間では痩せ我慢と言う。

750 :名無しさん@お腹いっぱい。:2014/09/27(土) 09:33:55.18 .net
>>749 自己紹介乙

おれは好んで ` ` の方使ってるので。

751 :名無しさん@お腹いっぱい。:2014/09/27(土) 09:41:04.75 .net
便利なのに、なくても不便でないって、使いこなしてないだけだな。

742 名無しさん@お腹いっぱい。 sage 2014/09/27(土) 08:04:01.55
>>743
両方使うって言ってるの読めないの?
便利な方しか知らないのってアホすぎる

746 名無しさん@お腹いっぱい。 sage 2014/09/27(土) 08:25:36.28
不便は感じない。
スクリプトでは基本、` ` にしてるから。
$( )使うのはワンライナーの時とか。

言い訳どぞ

752 :名無しさん@お腹いっぱい。:2014/09/27(土) 09:45:34.38 .net
bashの機能を「使いこなす」って哀れだなw

753 :名無しさん@お腹いっぱい。:2014/09/27(土) 09:59:48.80 .net
>>750
はいはい w

754 :名無しさん@お腹いっぱい。:2014/09/27(土) 10:07:55.55 .net
おっと逃げ道を見つけたか。
都合の悪いことは見ないふりと。

755 :名無しさん@お腹いっぱい。:2014/09/27(土) 10:29:19.70 .net
上の人じゃないけど、スクリプトにする場合は$()はなくてもいいな。
他のbashの便利機能がないと、(特に使い捨ての場合に)マンドクセってなるけど。

ちなみに$()をワンライナーで使うというのは、上の人とは違う意味で同意。
英語キーボードになったときの`を見つけられないからw

756 :名無しさん@お腹いっぱい。:2014/09/27(土) 10:58:49.04 .net
``を入れ子にする事なんか考えないのだね。

757 :名無しさん@お腹いっぱい。:2014/09/27(土) 11:01:14.03 .net
` ` の入れ子なんて普通にやってますが、

758 :名無しさん@お腹いっぱい。:2014/09/27(土) 12:50:21.46 .net
>>754
そういうごたくは >>751 に回答してからにしなよ w

759 :名無しさん@お腹いっぱい。:2014/09/27(土) 13:08:20.08 .net
>>758
>>751=>>754
何言ってんの。

760 :名無しさん@お腹いっぱい。:2014/09/27(土) 13:39:14.39 .net
bash厨必死w

761 :名無しさん@お腹いっぱい。:2014/09/27(土) 13:48:04.88 .net
``の入れ子とか今回とは別の意味でバグを生みそう
ダブルクォーテーションのエスケープとか絡んでくるとなおさら
それを回避してるのが$()の良さだと思うけど

シェルの実装の複雑さやポータビリティを優先するか
シェルスクリプトの書きやすさや読みやすさを優先するか
人によって意見の相違があるのかもしれんが、自分は後者かな
今さらshで書くのは面倒…
しかし今回のでBashへの不安感が少し出てきたし、どうしようか…

762 :名無しさん@お腹いっぱい。:2014/09/27(土) 13:52:38.06 .net
>>761
> シェルの実装の複雑さや
シェルの実装の簡潔さや

763 :名無しさん@お腹いっぱい。:2014/09/27(土) 13:54:30.06 .net
>>761
>今さらshで書くのは面倒…
とか言ってたらボケるよ。
もともとshメインで使ってきた人にとってshで書くのは楽勝。

764 :名無しさん@お腹いっぱい。:2014/09/27(土) 14:10:10.10 .net
COBOLerも同じこと言ってた

765 :名無しさん@お腹いっぱい。:2014/09/27(土) 14:43:12.58 .net
>>761
``に入れ子がダメで、$()なら大丈夫な理由がわからん。

766 :名無しさん@お腹いっぱい。:2014/09/27(土) 15:05:03.89 .net
まあややこしい書き換えするならスクリプト用の言語使うし

767 :名無しさん@お腹いっぱい。:2014/09/27(土) 15:15:08.13 .net
>>763
楽勝なのと楽なのは違うから

768 :名無しさん@お腹いっぱい。:2014/09/27(土) 15:23:44.72 .net
そういう言葉にしかツッコミできないのかねぇ..

もともとshメインで使ってきた人にとってshで書くのは楽。楽々。極楽。

... これでいい?

769 :名無しさん@お腹いっぱい。:2014/09/27(土) 15:31:18.19 .net
世の中の言語が全部Javaになれば解決。

770 :名無しさん@お腹いっぱい。:2014/09/27(土) 15:37:32.17 .net
Javaはない。重過ぎ。

771 :名無しさん@お腹いっぱい。:2014/09/27(土) 15:50:51.45 .net
コマンドの入れ子

com "`bin \"\`exe \\\"foo bar\\\"\`\"`"

com "$(bin "$(exe "foo bar")")"

どちらでも書ける
でもどちらで書きたいか
上の書き方に疑問を抱かないのは、悪しき根性主義に毒された迷惑野郎か
自分はバグのない完璧なコードを書けると豪語する勘違い野郎

772 :名無しさん@お腹いっぱい。:2014/09/27(土) 15:55:22.79 .net
どっちもどっちだな。
悪しき根性主義に毒された迷惑野郎とまで言うなら
行を分けろよと思う。

773 :名無しさん@お腹いっぱい。:2014/09/27(土) 15:57:18.01 .net
横レスだが、変数使う方法もありますよ。

t=`exe "foo bar"`
t=`bin "$t"`
echo "$t"

変数に直接代入する場合は全体を " " で括らなくてもスペース等がちゃんと保存されるのもポイント。
これならshが苦手(笑)な人にも書けますねw

774 :名無しさん@お腹いっぱい。:2014/09/27(土) 16:04:08.05 .net
>>773
たぶんだけど

>横レスだが、変数使う方法もありますよ。

こういう当たり前のことを思いつけない人が
「shが苦手(笑)」なんだろうね。

775 :名無しさん@お腹いっぱい。:2014/09/27(土) 16:11:28.57 .net
>>771 は一部バックスラッシュ無駄だよ。あっても動くけど無駄な書き方してる。
君がshの ` ` のネスティング苦手なのはわかった。

776 :名無しさん@お腹いっぱい。:2014/09/27(土) 17:05:06.70 .net
>>718
一般層向けの報道出てきたね。
http://www3.nhk.or.jp/news/html/20140927/k10014922101000.html

777 :名無しさん@お腹いっぱい。:2014/09/27(土) 17:07:15.30 .net
>>768
意味が伝わらなかったのか、かわいそうに

>>775
では、正解をどうぞ

778 :名無しさん@お腹いっぱい。:2014/09/27(土) 17:28:01.90 .net
いつまでもウジウジと・・・女みたいな奴だな

779 :名無しさん@お腹いっぱい。:2014/09/27(土) 17:32:44.63 .net
お、性差別発言。

780 :名無しさん@お腹いっぱい。:2014/09/27(土) 17:53:03.90 .net
<丶`Д´>キャベツニダ!謝罪しる!!

781 :名無しさん@お腹いっぱい。:2014/09/27(土) 18:00:58.91 .net
ネストとかクソ見にくいコードを書く奴は滅びろ

782 :名無しさん@お腹いっぱい。:2014/09/27(土) 18:29:02.50 .net
cshを標準にすればネストはマトモに動かないからみんな幸せ

783 :名無しさん@お腹いっぱい。:2014/09/27(土) 18:40:21.38 .net
cshはないわ。

784 :名無しさん@お腹いっぱい。:2014/09/27(土) 18:50:22.25 .net
>>779
今時は誉め言葉かも w

785 :名無しさん@お腹いっぱい。:2014/09/27(土) 18:51:39.21 .net
>>781
>>775 が美しいコード書いてくれるから待ってろ

786 :名無しさん@お腹いっぱい。:2014/09/27(土) 18:58:33.90 .net
いつまでもウジウジと・・・女みたいな奴だな

787 :名無しさん@お腹いっぱい。:2014/09/27(土) 19:13:11.93 .net
>>785
君は書けないの?プ

788 :名無しさん@お腹いっぱい。:2014/09/27(土) 19:21:11.15 .net
>>773
それぐらい知ってる
上のレスで ` ` をネストして使うとあったのに対して疑問を呈しただけ

結局shは ` ` をネストしない、一時変数を使いなさいという流儀
>>771まで複雑でなくても、ダブルクォーテーションのエスケープが頻出するのも煩雑だし美しくない
ここらへんを面倒だと感じるという主張に対して否定するのは
根性主義者、勘違い野郎と反発されても仕方がない

789 :名無しさん@お腹いっぱい。:2014/09/27(土) 19:24:12.73 .net
いつまでもウジウジと・・・女みたいな奴だな

790 :名無しさん@お腹いっぱい。:2014/09/27(土) 19:27:11.64 .net
shの利点はポータビリティや今回特に明らかになったセキュリティにあって
言語としては極めて貧弱
この点を認めずにshで書けと言ってもなかなか賛同を得ないと思う

791 :名無しさん@お腹いっぱい。:2014/09/27(土) 19:27:16.98 .net
>>788
"を使う場合と使わない場合で使い分ければいいのに。
頭が固いからshを使いこなせないんだろうな。

792 :名無しさん@お腹いっぱい。:2014/09/27(土) 19:30:55.63 .net
一言余計。

793 :名無しさん@お腹いっぱい。:2014/09/27(土) 19:31:10.46 .net
>>791
具体的にコードで説明してくれ

794 :名無しさん@お腹いっぱい。:2014/09/27(土) 19:38:08.52 .net
いつまでもウジウジと・・・女みたいな奴だな

795 :名無しさん@お腹いっぱい。:2014/09/27(土) 19:40:43.31 .net
>>787
うん、書けないから書いてね

796 :名無しさん@お腹いっぱい。:2014/09/27(土) 19:48:05.73 .net
こりゃ煽ってる方も書けなかったっぽいな。

797 :名無しさん@お腹いっぱい。:2014/09/27(土) 19:53:43.33 .net
com "`bin "\`exe "foo bar"\`"`"

798 :名無しさん@お腹いっぱい。:2014/09/27(土) 20:36:30.98 .net
>>797
これは本当にshで書けるの?
bashの拡張ではないの?

799 :名無しさん@お腹いっぱい。:2014/09/27(土) 20:37:00.09 .net
bashに慣れきってたから、たまには他のシェルも試してみるかと fish をインストールしてみたけど
コマンドラインのシンタックスハイライトとか新鮮で楽しいな

800 :名無しさん@お腹いっぱい。:2014/09/27(土) 22:45:36.60 .net
>>773
もしかして変数に " " なしでスペースを保存しながら代入できるのもbashの拡張?

801 :名無しさん@お腹いっぱい。:2014/09/28(日) 00:57:05.41 .net
fish は変数の展開に " " がいらないとか
リストがあったりとか、シンプルで良さそうだけど
変数の定義はやっぱり = があった方が見やすいのではないかと思った
環境変数の定義がオプションによる指定というのも、あまり筋が良くないような

fish での変数の定義:
set name 'Mister Noodle'

fish での環境変数の定義:
set -x MyVariable SomeValue

こうしてほしかった

変数の定義:
set name = 'Mister Noodle'

環境変数の定義:
export MyVariable = SomeValue

http://fishshell.com/docs/current/tutorial.html

802 :名無しさん@お腹いっぱい。:2014/09/28(日) 02:17:54.65 .net
>>801
それいいな
その構文なら使ってみたいかも

803 :名無しさん@お腹いっぱい。:2014/09/28(日) 02:59:54.86 .net
>>744 便利な物を使ってるのなら頼ってるって言うんじゃないの?
>>746 便利な物が使えないから不便って言うんじゃないの?
>>738 「bash拡張がないとシェルスクリプト書けない奴は」とすべきだったね。
>>790
エスケープをミスると即破滅場所しか無いって時点でセキュリティ…?
生SQL以上にWebサービスから呼び出してほしくない言語だと思うけど。

804 :名無しさん@お腹いっぱい。:2014/09/28(日) 12:38:52.75 .net
`COMMANDS` を保守しているコードで残しているのは仕方ないが、
新しく書いたスクリプトで使うのは、老害か勉強不足

Why is $(...) preferred over `...` (backticks)?
BashFAQ/082 - Greg's Wiki
http://mywiki.wooledge.org/BashFAQ/082

Obsolete and deprecated syntax [Bash Hackers Wiki]
http://wiki.bash-hackers.org/scripting/obsolete

The Open Group Base Specifications Issue 7, 2013 Edition
http://pubs.opengroup.org/onlinepubs/9699919799/
2.6.3 Command Substitution
Command substitution allows the output of a command to be substituted in place of
the command name itself. Command substitution shall occur when the command is enclosed
as follows: $(command) or (backquoted version): `command`

805 :名無しさん@お腹いっぱい。:2014/09/28(日) 12:39:26.67 .net
前スレ929-930の引用だが

Classic Shell Scripting: Hidden Commands that Unlock the Power of Unix
http://books.google.co.jp/books?id=J9WbAgAAQBAJ
p156 $(...) を指して、
This style is recommended for all new development,and it is what we use in many of the examples in this book.

Learning the Korn Shell, 2nd Edition
http://oreilly.com/catalog/korn2/chapter/ch04.html
The syntax of command substitution is:
$(Unix command)
...
(For backwards compatibility, the Korn shell supports the original Bourne shell (and C shell)
command substituion notation using backquotes: `…`. However, it is considerably harder to
use than $(…), since quoting and nested command substitutions require careful escaping.
We don't use the backquotes in any of the programs in this book.)

806 :名無しさん@お腹いっぱい。:2014/09/28(日) 18:26:43.98 .net
shとbashの間をとってkshじゃいかんのか

807 :名無しさん@お腹いっぱい。:2014/09/28(日) 19:08:57.44 .net
いやそこはぜひdashで

808 :名無しさん@お腹いっぱい。:2014/09/28(日) 22:49:12.11 .net
dashやzshだって近々何か見つかるかも知れないよ
シェルみたいに枯れたプログラムへの攻撃は、これまでトライするだけ無駄って感じだったのに
今はみんな注目して粗探ししてるだろうからね。

809 :名無しさん@お腹いっぱい。:2014/09/28(日) 22:53:51.24 .net
じゃあ斜め上のpashで

810 :名無しさん@お腹いっぱい。:2014/09/28(日) 22:59:06.81 .net
日本人が開発したmoshとやらはどうなったの

811 :名無しさん@お腹いっぱい。:2014/09/29(月) 01:51:01.68 .net
困ったときの ash

812 :名無しさん@お腹いっぱい。:2014/09/29(月) 05:53:35.79 .net
インタラクティブシェルなら、シェル依存の機能をゴリゴリ使う(と言うか、そこもシェル選ぶ基準だからな)けど
シェルスクリプトとなると、特定のシェルに依存したコードは普段から書かないなあ。
OSXですら依存チェック用に低機能シェル突っ込んであるよ。

813 :名無しさん@お腹いっぱい。:2014/09/29(月) 06:33:50.13 .net
ブラウザーで ash

Javascript PC Emulator
http://bellard.org/jslinux/

814 :名無しさん@お腹いっぱい。:2014/09/29(月) 15:27:10.15 .net
今回のはシェルスクリプトをbashで書いてなくても
インタラクティブシェルがbashの時点でまずいケースがあったのでは

815 :名無しさん@お腹いっぱい。:2014/09/29(月) 16:35:00.08 .net
だいぶ状況限定だけどね

816 :名無しさん@お腹いっぱい。:2014/09/29(月) 23:53:43.95 .net
・デフォでbashが入ってて、あえてシェルを入れ替えてない
・シェルを呼び出している
の二点を満たせばアウトってのは「だいぶ状況限定」と言えるのか?
シェルを呼び出すのは比較的少ないけど、その程度の希少性しか無いだろ…

817 :名無しさん@お腹いっぱい。:2014/09/30(火) 00:02:08.73 .net
WindowsServerの安全性が証明されたわけですね。

818 :名無しさん@お腹いっぱい。:2014/09/30(火) 00:05:02.56 .net
>>816
それ>>814の話じゃなくね。

819 :名無しさん@お腹いっぱい。:2014/09/30(火) 00:07:00.15 .net
>>816
それだけでだいぶ状況限定だろ
その程度の希少性って何だよ

820 :名無しさん@お腹いっぱい。:2014/09/30(火) 00:29:21.78 .net
>>816は /bin/sh が bash になってるときの話。
>>814はそうじゃないときの話。

821 :名無しさん@お腹いっぱい。:2014/09/30(火) 01:29:40.97 .net
>>816
さくらVPSのcentos6.5って、sh -> bash だったような。顧客にはアップデートさせたが、デフォルトかは知らない。
CGIって、プロセスを起動して環境変数を設定する仕組みでしょ。#!/usr/bin/perl とか読み取って、perlにスクリプト渡すのって、shの仕事だったりしないの?

822 :名無しさん@お腹いっぱい。:2014/09/30(火) 01:45:36.35 .net
#!を読むのはOSのローダーの仕事だな。

823 :名無しさん@お腹いっぱい。:2014/09/30(火) 02:30:42.63 .net
そっか、じゃなかったら #!/bin/sh って書く必要ないか。

824 :名無しさん@お腹いっぱい。:2014/09/30(火) 03:39:32.38 .net
OSのローダーってカーネルより前段のIPLのこと指してしまうだろが。

825 :名無しさん@お腹いっぱい。:2014/09/30(火) 12:28:00.81 .net
http://en.wikipedia.org/wiki/Shellshock_%28software_bug%29
どんどん増えていくな

826 :名無しさん@お腹いっぱい。:2014/09/30(火) 17:08:06.21 .net
>>824
底辺PGはelfローダーとかPEローダーとか聞いた事はないかな?

827 :名無しさん@お腹いっぱい。:2014/09/30(火) 18:55:49.47 .net
bashにしか効かないのにシェル全部が悪いみたいな扱いなのは気に入らないw

828 :名無しさん@お腹いっぱい。:2014/09/30(火) 19:00:11.86 .net
そんな扱いするやついないだろ

829 :名無しさん@お腹いっぱい。:2014/09/30(火) 19:01:36.70 .net
やつじゃなくて世間の評判とかニュースのことでは?

830 :名無しさん@お腹いっぱい。:2014/09/30(火) 19:34:52.47 .net
たとえばどれ?

831 :名無しさん@お腹いっぱい。:2014/09/30(火) 19:35:14.69 .net
shellshockって名前が悪いな
bashshockって名前に解明すべき

832 :名無しさん@お腹いっぱい。:2014/09/30(火) 19:58:05.01 .net
bashockって三国志に出てきそうじゃね?w

833 :名無しさん@お腹いっぱい。:2014/09/30(火) 20:07:01.42 .net
泣いてbashockを斬る

834 :名無しさん@お腹いっぱい。:2014/09/30(火) 21:50:06.35 .net
bashdoorって別名もあるみたいよ

835 :名無しさん@お腹いっぱい。:2014/09/30(火) 21:59:54.72 .net
>>834
ちょっと上手いと思ってしまったのが悔しい

836 :名無しさん@お腹いっぱい。:2014/10/04(土) 22:40:23.88 .net
いや上手いだろ

837 :名無しさん@お腹いっぱい。:2014/10/05(日) 04:09:52.86 .net
上手くない!

838 :名無しさん@お腹いっぱい。:2014/10/05(日) 07:06:09.86 .net
やっと意味がわかった

839 :名無しさん@お腹いっぱい。:2014/10/06(月) 13:13:12.13 .net
流石です、お兄様

840 :名無しさん@お腹いっぱい。:2014/10/06(月) 13:24:30.27 .net
りゅ…流石?

841 :名無しさん@お腹いっぱい。:2014/10/06(月) 13:45:40.58 .net
ながれいし

842 :名無しさん@お腹いっぱい。:2014/10/06(月) 18:52:30.59 .net
さすおに!

843 :名無しさん@お腹いっぱい。:2014/10/07(火) 01:13:41.26 .net
全然意味が分からない俺をどうにかしてくれ

844 :名無しさん@お腹いっぱい。:2014/10/07(火) 01:48:16.37 .net
どれがわからないの?
>>839>>842は同じネタだよ。

845 :名無しさん@お腹いっぱい。:2014/10/07(火) 02:29:50.71 .net
こんなんわからなくていいよ。

846 :名無しさん@お腹いっぱい。:2014/10/07(火) 02:32:19.27 .net
シェルスクリプトでやたら大きなプログラム書くことがそもそもおかしい

847 :名無しさん@お腹いっぱい。:2014/10/07(火) 03:00:30.04 .net
ていうかアレをネタに言うなら藤林お姉さまと言うべきだろうに…ニワカ共が

848 :名無しさん@お腹いっぱい。:2014/10/07(火) 07:45:37.09 .net
中小企業とかがやってる内輪の勉強会の発表資料を見てると
ちょくちょくアニメネタが入ってて痛々しい

849 :名無しさん@お腹いっぱい。:2014/10/07(火) 13:12:29.38 .net
お偉いさんの資料には、昔ゲイツ今ジョブズが入ってるよ、
大きいところも小さいところも

850 :名無しさん@お腹いっぱい。:2014/10/07(火) 15:04:31.51 .net
里奈ちゃんと楠夫とか
なんだっけブサイクのオバサンなんかwnn系でいたよね
よっちゃんとか、さっちゃんとかいうの

851 :名無しさん@お腹いっぱい。:2014/10/07(火) 15:17:41.74 .net
思い出した。
とこちゃんだ。

852 :名無しさん@お腹いっぱい。:2014/10/07(火) 17:14:35.54 .net
bash「ひゃん!」

853 :名無しさん@お腹いっぱい。:2014/10/08(水) 12:48:48.66 .net
何の事かと調べてみたら、アニメか
このノリは、俺には受け付けないわー

 魔法科高校の劣等生
 BSDのプリンセス・マジカルとこちゃん

854 :名無しさん@お腹いっぱい。:2014/10/10(金) 08:42:55.07 .net
>>853
マンガってなんおことかと思ったらw
知らなかった。
あのさ、大昔のUNIX業界にはよしだともこ氏というのが
物書きとしていたんだよ
http://www.notredame.ac.jp/~tyoshida/
で、その人の通称がとこちゃんだったと思う。
おそらくだがBSD系のマンガの命名の元は実在の
とこちゃんから創られたんだと思うよ。

855 :名無しさん@お腹いっぱい。:2014/10/10(金) 11:52:25.98 .net
透子?

856 :名無しさん@お腹いっぱい。:2014/10/10(金) 12:18:32.53 .net
爆死アニメ?

857 :名無しさん@お腹いっぱい。:2014/10/10(金) 14:53:30.89 .net
ll命令を発行してファイルのプロパティーをタイプした時、一部のファイルの時刻が2014とかいう西暦?に化けます。バグでしょうか?

858 :名無しさん@お腹いっぱい。:2014/10/10(金) 15:57:21.35 .net
>>857
2014年のファイルでタイムスタンプと年度が混在してるなら
バグだね。
試しに時計を2013に改竄したり2015に改竄して表示させたら?

859 :名無しさん@お腹いっぱい。:2014/10/10(金) 16:20:23.29 .net
すみませんが詳しい方のみ回答をお願いします

860 :名無しさん@お腹いっぱい。:2014/10/10(金) 16:23:18.40 .net
いいえ、-Tでも

861 :名無しさん@お腹いっぱい。:2014/10/10(金) 16:41:16.15 .net
>>858
釣られんな

862 :名無しさん@お腹いっぱい。:2014/10/10(金) 16:54:47.85 .net
>>858
2014年でも2014の表示になるファイルは普通にあるぞ

863 :名無しさん@お腹いっぱい。:2014/10/10(金) 17:05:34.93 .net
ls(1)より
最終修正時刻が 6 箇月よりも前 で
ある場合には、POSIX ロケールでは「月・日・年」の形式で
表示されます。LC_TIME ロケールカテゴリが POSIX ロ ケー
ルに設定されていない場合には、異なった形式で時間フィー
ルドが表示されます。最終修正時刻が 6 箇月以内である 場
合には、「月・日・時」の形式で表示されます。

864 :名無しさん@お腹いっぱい。:2014/10/10(金) 18:38:32.74 .net
次の釣りレス
「ls(1)なんて命令なんてありません。発行したのはllです」

865 :名無しさん@お腹いっぱい。:2014/10/10(金) 18:41:39.57 .net
$ ls(1)
bash: 期待してない token `(' のあたりにシンタックスエラー
$

これは脆弱性?

866 :名無しさん@お腹いっぱい。:2014/10/10(金) 18:53:41.00 .net
任意のコードを実行したりできる訳じゃないから
ただのバグやね

867 :名無しさん@お腹いっぱい。:2014/10/10(金) 19:19:00.49 .net
$ ls(1)
bash: Erreur de syntaxe pres du symbole inattendu << 1 >>

868 :名無しさん@お腹いっぱい。:2014/10/11(土) 00:32:05.86 .net
>>817
Windows版のbashでも再現した

869 :名無しさん@お腹いっぱい。:2014/10/11(土) 02:48:51.91 .net
>>868
ゴミを持ってきて脆弱性だと言われても、
お前の脳がバグってるだろうとしか。

870 :名無しさん@お腹いっぱい。:2014/10/11(土) 07:19:59.32 .net
>>869
bashを別のものに交換できるLinuxServerは最強ってことですね。
一方OSがいろんなアプリに依存しちゃってるWindowsは…。

871 :名無しさん@お腹いっぱい。:2014/10/11(土) 09:20:00.73 .net
サーバとしての使い勝手とか、必要最小限の構成とか出来ない辺りサーバとしてのWindowsはダサいけど、
アプリ間の依存をネタにする場合、アプリディレクトリに依存するDLLブチ込めば済むWinの方が優秀じゃね?
ブチ込むだけだと駄目どころか、パッケージ管理システム外だとコンパイルからやれが大半ってのはダサい

872 :名無しさん@お腹いっぱい。:2014/10/11(土) 10:28:27.54 .net
cut -d: -f1
これをシェル内部コマンドだけで実現できませんか?

873 :名無しさん@お腹いっぱい。:2014/10/11(土) 10:43:37.86 .net
>>873
$ line=root:x:0:0:root:/root:/bin/bash ; echo ${line%%:*}
root

874 :名無しさん@お腹いっぱい。:2014/10/11(土) 10:46:24.04 .net
こんな感じかな

$ ( IFS=':';while read f; do set -- $f;echo $1; done < /etc/passwd )

875 :名無しさん@お腹いっぱい。:2014/10/11(土) 11:13:49.96 .net
>>874
setは要らんやろ

(IFS=':';while read a b; do echo "$a"; done < /etc/passwd)

876 :名無しさん@お腹いっぱい。:2014/10/11(土) 11:41:13.45 .net
なるほど、それなら配列を使えば、、

$ ( IFS=':';while read -a arr; do echo ${arr[0]}; done < /etc/passwd )

配列変数使えるのってbashとzshくらい? kshでも使えたかな…

877 :名無しさん@お腹いっぱい。:2014/10/11(土) 13:23:16.96 .net
bash禁止

878 :名無しさん@お腹いっぱい。:2014/10/11(土) 13:24:16.47 .net
>>872は改変コピペ
http://hayabusa6.2ch.net/test/read.cgi/linux/1411579434/319

879 :名無しさん@お腹いっぱい。:2014/10/11(土) 17:11:40.07 .net
あるファイルAに改行なしで500Mbくらいテキストが詰まっている
別のファイルBに、下記のように「開始位置.長さ」で記述がなされているとする
1,10
11,50
61,2
ファイルAをファイルBの記述に従って改行したい
つまり上記の場合、「1文字目から10文字+改行」「11文字目から50文字+改行」「61文字目から2文字+改行」
というようにファイルAを3行に改行する
ファイルAには半角文字と全角文字が混同している
ファイルBの記述は「開始位置,長さ」だが、必ず1文字目から始まり、終了位置+1を次の開始位置とみなしてよい

ちょっとこんな感じの処理を作ることになったんだけど、効率いいやり方ないかな
文字コードは都合のいいものに勝手に変換してくれ

880 :名無しさん@お腹いっぱい。:2014/10/11(土) 17:23:08.97 .net
ヒントの一部にしかなってないけど、
bashだと全角文字でも一文字分をちゃんと認識してるんだな
(LANGまたはLC_CTYPE設定必須)

$ a=ABCあいうえお
$ echo ${a:1}
BCあいうえお
$ echo ${a:2}
Cあいうえお
$ echo ${a:3}
あいうえお
$ echo ${a:4}
いうえお
$ echo ${a:5}
うえお

881 :名無しさん@お腹いっぱい。:2014/10/11(土) 17:48:44.04 .net
5文字読んで改行、続いて3文字読んで改行、の場合、

$ echo AあBいCうDえEお | (read -n 5 w; echo "$w"; read -n 3 w; echo "$w")
AあBいC
うDえ

このread -nの引数の数字をファイルBを読みながら与えてループすればいいか?

882 :名無しさん@お腹いっぱい。:2014/10/11(土) 17:58:53.89 .net
>>879
$ cat <( echo -ne '1,3\n4,10\n')
1,3
4,10
$ cat <( echo -ne '1,3\n4,10\n')|tr , -|while read;do cut -c $REPLY <( echo 'abcdefghijklmnopqr');done
abc
defghij

883 :名無しさん@お腹いっぱい。:2014/10/11(土) 18:03:38.03 .net
文字コードはUS-ASCIIで。

884 :名無しさん@お腹いっぱい。:2014/10/12(日) 00:12:12.43 .net
>>873

885 :名無しさん@お腹いっぱい。:2014/10/12(日) 22:43:37.00 .net
なるほどbash任せにするのか
sedとかawkとか使う考えしかなかったから全角半角大丈夫かなとか思ってたけど
いけそうだ、会社いったら試してみる
ありがとう

886 :名無しさん@お腹いっぱい。:2014/10/13(月) 20:35:25.52 .net
>>869
>>870
どっちも間違い。

今回の場合、Windowsで走らせたbashはUnix版をビルドしたもの。
Linuxは/bin/shがbashなので交換できない。

ポータブルじゃないBASH依存のスクリプトが少数あるため・・

887 :名無しさん@お腹いっぱい。:2014/10/13(月) 21:10:01.70 .net
Ubuntu や Debian は bash じゃなくて dash だけどね

888 :名無しさん@お腹いっぱい。:2014/10/13(月) 21:17:40.62 .net
>>886は間違い。

889 :名無しさん@お腹いっぱい。:2014/10/13(月) 21:36:55.99 .net
>>886
だからごみを持ってきてWindowsの脆弱性というのはおかしいだろ。
お前日本語大丈夫か?

890 :名無しさん@お腹いっぱい。:2014/10/13(月) 23:13:47.75 .net
>>886
だからLinuxの脆弱性というのはおかしいだろ。
お前日本語大丈夫か?

891 :名無しさん@お腹いっぱい。:2014/10/13(月) 23:21:54.07 .net
>>890
誰がそんな話をした?
本当に日本語がだめなやつだなお前。

892 :名無しさん@お腹いっぱい。:2014/10/13(月) 23:51:51.47 .net
http://thesecurityfactory.be/command-injection-windows.html

893 :名無しさん@お腹いっぱい。:2014/10/14(火) 00:38:43.14 .net
>>890
鸚鵡返ししかできない池沼だったか

894 :名無しさん@お腹いっぱい。:2014/10/14(火) 08:50:24.90 .net
>>886
rootさんに頼んで/bin/shからリンクされてるbashをバグのないバージョンにアップデートしてもらえ
Windowsで再現するのはWindowsに持ってきたbashがバグ入りのゴミバージョンって事だから差し替えろ
>>870はイミフだけどお前はもっとイミフだ。

>>890
バグ入りbashがデフォで入ってるLinuxディストリビューションについては、
そのLinux"ディストリビューション"の脆弱性としてカウントして良い話だと思うぞ。

895 :名無しさん@お腹いっぱい。:2014/10/18(土) 16:37:07.26 .net
2つのファイルをクリアしたいのですが、一回で処理したいです
調べたところcp /dev/null, xargs,lsを使うと出来そうなのですが、どうしたらよいでしょうか
ls foo hoge | xargs cp /dev/nullではだめでした

896 :名無しさん@お腹いっぱい。:2014/10/18(土) 16:38:29.88 .net
>>895

> foo > hoge

897 :名無しさん@お腹いっぱい。:2014/10/18(土) 16:43:03.13 .net
ふつー、
for f in *; do > "$f"; done

だけど、これじゃ1回じゃないから嫌という意味か?

898 :名無しさん@お腹いっぱい。:2014/10/18(土) 16:51:42.23 .net
>>895
どーしても xargs でやりたければこんな感じで

$ ls -1 foo bar | xargs -l cp /dev/null

899 :名無しさん@お腹いっぱい。:2014/10/18(土) 16:56:15.17 .net
fooとbarをアトミカルにクリアしたいのです。fooだけクリアされた瞬間を作りたくない。

900 :名無しさん@お腹いっぱい。:2014/10/18(土) 16:58:19.27 .net
>>898
ありがとうございました。解決しました。forを使っても良かったのですが、896さんベストアンサーでってここ知恵袋ちゃうで(^o^)

901 :名無しさん@お腹いっぱい。:2014/10/18(土) 16:59:55.17 .net
>>900
cpを2回呼んでるからアトミックじゃないよ

902 :名無しさん@お腹いっぱい。:2014/10/18(土) 17:02:28.03 .net
もう解決した様だけど、truncate ってコマンドがありまして…

$ truncate -s 0 foo bar

903 :名無しさん@お腹いっぱい。:2014/10/18(土) 17:05:40.32 .net
>>902
POSIX互換ですか?

904 :名無しさん@お腹いっぱい。:2014/10/18(土) 17:09:15.28 .net
ポジックス(笑)は気にしない。*BSDとLinuxでtruncate(1)あるから、Solaris以外ハム問題。

905 :名無しさん@お腹いっぱい。:2014/10/18(土) 17:14:11.82 .net
>>904
ありがとうございます(^o^)
最近POSIX互換にとらわれていて、困っております
seqコマンドもPOSIX互換ではないと聞いて、数え上げの方法で、よい方法がないか困っているのですが、yesコマンドを使ってできないでしょうか(>_<)

906 :名無しさん@お腹いっぱい。:2014/10/18(土) 17:16:44.58 .net
yes '' | cat -n でできるけど、そんなことするよりシェルで {1..100}とかの方がいい。

907 :名無しさん@お腹いっぱい。:2014/10/18(土) 17:19:17.65 .net
おいおい、yesコマンドもPOSIXちゃうやろ、本末転倒。

908 :名無しさん@お腹いっぱい。:2014/10/18(土) 17:20:43.80 .net
yesもPOSIX互換ではないのか(>_<)
失礼いたしました

909 :名無しさん@お腹いっぱい。:2014/10/18(土) 17:59:49.26 .net
そもそもアトミックなんて不可能だろ

910 :名無しさん@お腹いっぱい。:2014/10/18(土) 18:55:50.27 .net
$ strace truncate -s0 hoge fuga

open("hoge", O_WRONLY|O_CREAT|O_NONBLOCK, 0666) = 3
ftruncate(3, 0) = 0
close(3) = 0
open("fuga", O_WRONLY|O_CREAT|O_NONBLOCK, 0666) = 3
ftruncate(3, 0) = 0
close(3)

全然アトミックじゃないな。
というか何でそんなのをアトミックにやりたいと思ったのか

911 :名無しさん@お腹いっぱい。:2014/10/18(土) 19:18:39.10 .net
>>895>>899 って別人だよね?

912 :名無しさん@お腹いっぱい。:2014/10/19(日) 13:13:52.46 .net
ここで質問してよいのでしょうか?
シェルで配列が使えるのってbashだけですか?
よくある以下のようなスペース区切りを配列に入れたいのです。

fields=($in)
for field in "${fields[@]}"; do

いまshで作ってるのでshのままでやれればそれがいいのですが
bashも致し方なしと言う状態です。

913 :名無しさん@お腹いっぱい。:2014/10/19(日) 13:16:37.09 .net
kshでも使えるよ

914 :名無しさん@お腹いっぱい。:2014/10/19(日) 13:39:11.60 .net
なぜshには配列が無いか? 配列が無くても十分だからだ。

915 :名無しさん@お腹いっぱい。:2014/10/19(日) 13:40:15.79 .net
sh でやる場合、

set $in
for field in "$@"; do

で行けるよ

916 :名無しさん@お腹いっぱい。:2014/10/19(日) 13:41:50.04 .net
cshでも使える
shでもそういう感じのforは出来るが

917 :名無しさん@お腹いっぱい。:2014/10/19(日) 14:33:24.19 .net
>>915
できました!ありがとうごうざいます
作ってるシェルスクリプトの使い勝手が超よくなりました!

皆様もありがとうございました

918 :名無しさん@お腹いっぱい。:2014/10/19(日) 17:09:56.92 .net
実は
for f; do
でもいい

919 :名無しさん@お腹いっぱい。:2014/10/19(日) 18:35:09.12 .net
うおほんとだ
知らんかった…

920 :名無しさん@お腹いっぱい。:2014/10/20(月) 12:59:33.77 .net
作ったシェルスクリプトって実行権限つけてる?
自分はつけてなくてsh 〜とかで実行してる
理由は間違って実行したくないからなんだけどさ

921 :名無しさん@お腹いっぱい。:2014/10/20(月) 13:09:26.67 .net
それならそれでいいんじゃね

922 :名無しさん@お腹いっぱい。:2014/10/20(月) 16:58:41.11 .net
実行権限つけて~/binとかにおいてる。
普通にタブ打って補完してほしいし。

自分で作ったスクリプトで気をつけてるのは
使い方の説明コメントとかヘルプオプションのメッセージとかを
しっかり書くことかな。
詳しい使い方とかしばらくすると忘れちゃうんだよね。
ぐぐっても出てこないしさ。

923 :名無しさん@お腹いっぱい。:2014/10/20(月) 17:25:26.41 .net
同じく
エディタのバッファ上や端末でのワンライナーではなく
ファイルに保存するほどものってのは使いまわすってことだからね
頻度が少ないものは補完の邪魔だからprefixつけてる

924 :名無しさん@お腹いっぱい。:2014/10/21(火) 00:55:19.13 .net
>>920
そういう人は通常のコマンドも撃てないんじゃないの?w
標準コマンドをなぜ間違わないかとか、間違いを防ぐaliasや引数は
どうすればいいかを考えれば良くないか?
(y or n)を利用するだけでも違うと思うが

925 :名無しさん@お腹いっぱい。:2014/10/21(火) 02:00:54.31 .net
ほとんどのコマンドは履歴から補間して実行しちゃうな
俺にとって sh 〜は無駄なあがき

926 :名無しさん@お腹いっぱい。:2014/10/21(火) 03:02:37.98 .net
>>922
自作を~/binに置くのはなんか気持ち悪いな…
そんな運用のシステムを引き継ぎたくない

927 :名無しさん@お腹いっぱい。:2014/10/21(火) 04:43:14.50 .net
>>926
そんなケースはめったにないから気にしなくていいよ
自分用のニッチなもの
~/bin
使いまわせるならお好きに昇格させればいい
/usr/local/bin
/usr/bin
/bin

928 :名無しさん@お腹いっぱい。:2014/10/21(火) 08:50:28.59 .net
つかスクリプトなんてhomeに一枠切っておけば済むのに

929 :名無しさん@お腹いっぱい。:2014/10/21(火) 09:04:42.35 .net
みんなで使ってるサーバなら/usr/local使えないし
~/binに入れるのは普通だと思うけど
というかどこに入れればいいねん

930 :名無しさん@お腹いっぱい。:2014/10/21(火) 09:16:20.91 .net
普通というか、~, /var/tmp, /tmpの内のどれかの中にしか置けなくね?w

931 :名無しさん@お腹いっぱい。:2014/10/21(火) 09:51:26.07 .net
>>930
root権限ないの?
みんなで使うものなら管理者に言って置かせてもらえばいいじゃん。

932 :名無しさん@お腹いっぱい。:2014/10/21(火) 10:01:32.78 .net
>>931
なんでみんなで使う前提なの?

933 :名無しさん@お腹いっぱい。:2014/10/21(火) 10:15:54.97 .net
>>932
前提じゃないよ。
もしみんなで使うものなら、って話。

934 :名無しさん@お腹いっぱい。:2014/10/21(火) 10:26:40.88 .net
>>920はみんなが使うスクリプトじゃなくて
自分しか使わない俺俺スクリプトのことを言ってるような気がするけど
みんなが使うものなら当然実行権限付けるだろうし

935 :名無しさん@お腹いっぱい。:2014/10/21(火) 10:29:04.23 .net
みんなが使うものなら/usr/localに置くし自分しか使わないものなら~/binとか好きな場所に置く
ようは>>926がちょっとずれてるんじゃねってこと

936 :名無しさん@お腹いっぱい。:2014/10/21(火) 10:29:39.28 .net
UNIXサーバーの管理をしています。
ユーザーはスクリプトの実行は禁止ですが、
最近、ユーザーでも自分のホームフォルダーにスクリプトをコピーし、
X権限をすることによってスクリプトが実行できてしまうことが判明しました。
これはOSのセキュリティーボールではないのでしょうか?
ユーザーのフォルダーではたとえX権限がされていても
実行できないようにする方法はありますか?
必要ならカーネルにバッチを当てる方法も、やもうえません。

937 :名無しさん@お腹いっぱい。:2014/10/21(火) 10:44:48.62 .net
>>934
> >>920はみんなが使うスクリプトじゃなくて
> 自分しか使わない俺俺スクリプトのことを言ってるような気がするけど
その辺は明記されてないね。

>>935
>>926は「みんなで使うものが~/binに置いてある」と読み取ったんだろう。

938 :名無しさん@お腹いっぱい。:2014/10/21(火) 11:03:56.75 .net
>>936
ネタだと思うけど、いちおう。
/homeを別パーティションにして、マウントオプションにnoexecを追加する。
もしくは、rbash->bash、rzsh->zshみたいなsymlinkを作って
ログインシェルをrbash/rzshに変更する。
いずれにせよsh hoge.shみたいにして実行されるのを防ぐことはできないが。

939 :名無しさん@お腹いっぱい。:2014/10/21(火) 11:04:48.25 .net
>>938
いつもの改変コピペ君だろ
かまっちゃいかん

940 :名無しさん@お腹いっぱい。:2014/10/21(火) 11:20:53.71 .net
ディレクトリの考えは人それぞれだからなぁ
ただスクリプトのように本来のOSに無関係な
作業プログラムは全員が使うなら全員共通の
home域や個人で使うhome枠とかmnt枠に切るね。
システムダウンの代替やOSの総更新というか
障害復旧で関わらない領域やディスクやパーテーションに
作業用というかユーザや管理者がしたためたツールは置いておきたい。

941 :名無しさん@お腹いっぱい。:2014/10/21(火) 14:12:34.98 .net
使えるユーザを限定しようとするときはグループを分ける必要が出てきて
やっぱりroot権限がいるからrootの中の人にどこまで任せるかということになるか

942 :名無しさん@お腹いっぱい。:2014/10/21(火) 14:17:24.25 .net
>>920は納得したのか?

943 :924:2014/10/21(火) 20:08:57.18 .net
みなさんごめんなさい。
/binと間違った。
>>926で~/binとコピペして目に見えているはずなのに
/binと間違った。ビール飲んでたせいです

944 :名無しさん@お腹いっぱい。:2014/10/21(火) 22:32:58.37 .net
>>920
特定のディレクトリでしか実行しないものは、
そこに置いて、cd してから sh 〜 で実行してる。
どこでも使うものは、実行権限つけて /usr/*/bin/ とかに入れて
他のコマンドと同じように使ってる。
普段使わないものは ~/script/ 以下にサブディレクトリ作って置いてあって
PATH は通してない。

945 :名無しさん@お腹いっぱい。:2014/10/21(火) 22:35:08.54 .net
>>934>>937
間違って実行したら困るような品質のスクリプトをみんなで使っちゃ駄目だわな。

>>943
>>926 ユーザアカウントごと引き継ぐような運用が前提なの?」
とか思ってたけどそういうことか。納得。

946 :名無しさん@お腹いっぱい。:2014/10/22(水) 08:45:07.37 .net
ruby gemだと~/.gem/ruby/2.0/bin とかに入るし、pythonだと
~/.local/bin に入ったりする。
個人的には~/bin よりむずむずする。

947 :名無しさん@お腹いっぱい。:2014/10/23(木) 01:41:08.25 .net
~/.gemは他を汚さないって事で別に良いと思うけど、
~/.local/binはなんでそうなったんだ…

948 :名無しさん@お腹いっぱい。:2014/10/23(木) 03:18:36.37 .net
例えば awk -F: '{print $1}' /etc/passwd の結果を

users=(root daemon bin ...)

のようにbashの配列にまとめたいのですが、どのように書くのがシンプルなのでしょうか?

#!/bin/bash
users=()
while read user; do
users=("${users[@]}" "$user")
done < <(awk -F: '{print $1}' /etc/passwd)
declare -p users

もっと簡単に書けるのでは? と思っています。

949 :名無しさん@お腹いっぱい。:2014/10/23(木) 04:31:23.09 .net
read -a

950 :名無しさん@お腹いっぱい。:2014/10/23(木) 04:54:32.57 .net
>>948
内部コマンドのみで書ける

users=(`while IFS=: read u x; do echo $u;done < /etc/passwd`)

951 :名無しさん@お腹いっぱい。:2014/10/23(木) 05:32:28.62 .net
>>950
()で囲うだけで配列にできるのですね。

results=("$(コマンド)")
ダブルクォーテーションで囲えば空白を含む場合も問題ないですね。

とてもシンプルになりました。
ありがとうございました。

952 :名無しさん@お腹いっぱい。:2014/10/23(木) 05:50:14.41 .net
>>951
> results=("$(コマンド)")
> ダブルクォーテーションで囲えば空白を含む場合も問題ないですね。
勘違いしていました。
これだと配列の要素が1つだけでだめですね。

953 :名無しさん@お腹いっぱい。:2014/10/23(木) 06:23:00.43 .net
あるコマンドの出力結果の各行が要素となる配列を作りたい。
出力行にスペースを含まない場合は >>950 のように()で囲めばいい。
スペースを含む場合は >>948 のようにやる必要がある。

ということみたいですかね。
たいへんお騒がせしました。

954 :名無しさん@お腹いっぱい。:2014/10/23(木) 06:38:12.59 .net
>>953
>>948 のようにやる必要はない。
改行を IFS として >>951 みたいにやればいいだけ

955 :名無しさん@お腹いっぱい。:2014/10/23(木) 06:41:57.64 .net
>>953
IFS='
' list=(`ls -l`)


これでls -l の各行ごとに配列要素に入る。IFS変更してることに注意。

956 :名無しさん@お腹いっぱい。:2014/10/23(木) 06:52:10.33 .net
>>954,953
なるほど。
処理が終わったらIFSを元に戻せばいいですし、これでいけますね。

シェルがおもしろくなってきましたw
ありがとうございました。

957 :名無しさん@お腹いっぱい。:2014/10/24(金) 09:46:02.92 .net
bashの配列もいいけど、>>914,913,916が無かったかの様に進んでいくのが残念なので一言

もともと for 文も変数をインクリメントしてループする様には出来ていない for in (foreach) 文だし、
シェルスクリプトでは、改行区切りで配列のようにデータを扱うのが素直なやり方だと思うのだが、どうだろうか?

#!/bin/sh
LF='
'
exec 3<&0 0< input.txt
while
 IFS=$LF read line
do
 echo "$line"
done
exec 0<&3 3<&-


IFS_BKUP=$IFS
IFS=$LF
for line in $( ls -l )
do
 echo "$line"
done
IFS=$IFS_BKUP

958 :名無しさん@お腹いっぱい。:2014/10/24(金) 13:01:25.31 .net
よくわからんが俺なら、cut -d: -f1 /etc/passwd するね

959 :名無しさん@お腹いっぱい。:2014/10/24(金) 13:54:52.89 .net
お前は何を言ってるんだw

960 :名無しさん@お腹いっぱい。:2014/10/24(金) 14:24:22.48 .net
>>958
直前までデータのまとめ方の話だったけど、その話では無かったつもりだった
紛らわしく書いてしまったみたいだ

変数に入れるなり、ファイルにするなりしても、大抵は配列は特に必要なく、
改行区切りのデータのまま扱うのがシェルスクリプトらしいかと、い痛かった

#!/bin/sh
exec < /etc/passwd

users=$(
 #cut -d: -f1
 while
  IFS=: read user trash
 do
  echo "$user"
 done
)

IFS='
'
for user in $users
do
 echo "$user"
done

961 :名無しさん@お腹いっぱい。:2014/10/30(木) 00:56:19.87 .net
ミドルウェアのインストーラ(シェルスクリプト内)に
uuencode/uudecodeで巨大なファイルを埋め込んでるのがあったんだが
スクリプト内にファイルを仕込むことで、何か特別な意味あったりするの?

メモリが足りなくなって、インストーラがコケまくるし
再実行するたびにデコードして展開するから胸糞悪かった

962 :名無しさん@お腹いっぱい。:2014/10/30(木) 03:42:14.29 .net
シェルスクリプトで全部配布出来る、とか。

963 :名無しさん@お腹いっぱい。:2014/10/30(木) 05:28:34.84 .net
Windowsっぽくしたかったんじゃね。

964 :名無しさん@お腹いっぱい。:2014/10/30(木) 05:39:51.98 .net
uuencodeなだけいいじゃないか。
javaのインストーラなんて直接バイナリ埋め込んでるし。
シェルスクリプトをexitで終了すればexit以降の部分がバイナリでもOKという技。
tail -n +行 でバイナリ切り出して解凍、みたいな。

965 :名無しさん@お腹いっぱい。:2014/10/30(木) 13:37:12.47 .net
>>961
実行するだけでインストールできるから楽でしょ
この間インストールしたjava(jdk)もその形式だったし

966 :名無しさん@お腹いっぱい。:2014/11/09(日) 18:06:16.96 .net
もう10日書き込みなしか
でもみんな見てはいるんだろうなと予想

967 :名無しさん@お腹いっぱい。:2014/11/09(日) 18:50:24.89 .net
では、以下のより善い最適な正解を考えよう

http://hello.2ch.net/test/read.cgi/morningcoffee/1408885443/924
> 924 名前:名無し募集中。。。@転載は禁止 []: 2014/11/06(木) 22:56:57.47 0
> いくつもtar.gzがあるときにどのtar.gzにMakefileが入ってるか探そうと思ったらこんな感じ?
>  tar -xzf *.tar.gz
>  find ./ -name Makefile
> でもこれだとフォルダ名が被った時に上書きされてしまう・・・もっとうまいシェルあるかな?

> 927 名前:名無し募集中。。。@転載は禁止 []: 2014/11/06(木) 23:33:24.12 0
> bash以外で使えるかは知らないけど
> find -name "*.tar.gz" | while read ; do (echo " -- $REPLY ---" ; tar -tf "$REPLY" | grep Makefile) done

> 928 名前:名無し募集中。。。@転載は禁止 []: 2014/11/06(木) 23:58:28.48 0
> shだとこんな感じで動きそう
> find . -name "*.tar.gz" | while read REPLY; do (echo " -- $REPLY ---" ; tar -tf "$REPLY" | grep Makefile) done

968 :名無しさん@お腹いっぱい。:2014/11/09(日) 18:59:36.73 .net
>>967
zgrep -l Makefile *.tar.gz
で一発。

969 :名無しさん@お腹いっぱい。:2014/11/09(日) 21:01:40.56 .net
>>966
専ブラで見てるから書き込みが無いと見ないんだな・・・
正直なところココに書き込むか他の質問スレに書き込むか迷って
他に書き込むことはある

970 :名無しさん@お腹いっぱい。:2014/11/09(日) 21:22:13.32 .net
>>968
それではサブディレクトリ以下の*.tar.gzを検索しない

971 :名無しさん@お腹いっぱい。:2014/11/09(日) 22:38:09.71 .net
zgrep -l Makefile **/*.tar.gz

972 :名無しさん@お腹いっぱい。:2014/11/09(日) 22:43:36.52 .net
>>971
カレントディレクロリの*.tar.gzを検索しなくなった

973 :名無しさん@お腹いっぱい。:2014/11/09(日) 23:58:58.66 .net
ロリ…

974 :名無しさん@お腹いっぱい。:2014/11/10(月) 00:04:45.26 .net
ディレクトロリ

975 :名無しさん@お腹いっぱい。:2014/11/10(月) 00:22:06.71 .net
いくつもあるとしか言ってないから、そういう場合は大抵、ひとつのディレクトリで十分だと思うな。

976 :名無しさん@お腹いっぱい。:2014/11/10(月) 00:49:17.58 .net
まあ何にせよ、現状は
find . -name "*.tar.gz" | while read REPLY; do (echo " -- $REPLY ---" ; tar -tf "$REPLY" | grep Makefile) done
最強だな。
サブディレクトリの*.tar.gz全ても、*.tar.gzの中のリストも
表示される

977 :名無しさん@お腹いっぱい。:2014/11/10(月) 01:11:31.68 .net
>>972
はい、ごめんなさい

>>976
最強?
並列で動いてるようにすら見えないのだが

978 :名無しさん@お腹いっぱい。:2014/11/10(月) 01:20:38.07 .net
横から見てたけど、結果出すのが強いと思うよ

979 :名無しさん@お腹いっぱい。:2014/11/10(月) 01:25:12.67 .net
>>976
・ファイル名に改行コードが入っていたら?
・"〜.tar.gz" っていう名前のディレクトリがあったら?
・whileの中は { echo ...; tar -tf ...; } でいいんじゃ?(わざわざサブシェルにする理由がワカらん)

980 :名無しさん@お腹いっぱい。:2014/11/10(月) 01:26:05.43 .net
>>978
言い出しっぺの法則って事で
速度度外視でいいからサンプル生成コードを出してくれ

981 :名無しさん@お腹いっぱい。:2014/11/10(月) 01:36:13.41 .net
>>980
俺は「結果出すのが強い」と事実を書いただけだが、何の「言い出しっぺ」なの?

982 :名無しさん@お腹いっぱい。:2014/11/10(月) 01:39:33.45 .net
$ find . -type f -readable -name "*.tar.gz" -print0 | xargs -0 -I'{}' /bin/bash -c 'echo " -- {} ---"; tar -tf "{}" | grep Makefile'

983 :名無しさん@お腹いっぱい。:2014/11/10(月) 01:53:14.13 .net
>>982
横から見てた別人だけど、なるほどそういう方法もあるんですね。
ちなみに>>976に対するアドバンテージってナニですか?
>>977のいう並列動作ですか?

984 :名無しさん@お腹いっぱい。:2014/11/10(月) 01:58:22.51 .net
>>976
readは指定しなければREPLYに入れるから冗長。

985 :名無しさん@お腹いっぱい。:2014/11/10(月) 02:03:07.35 .net
>>983
>・ファイル名に改行コードが入っていたら?
>・"〜.tar.gz" っていう名前のディレクトリがあったら?

これ↑に対処。並列動作させる場合は xargs に -P0 を付けるとよろし

986 :名無しさん@お腹いっぱい。:2014/11/10(月) 02:19:56.10 .net
>>985
なるほど。その対策ですか。

-P0 付けたら表示がバラバラになってしまいますね。

987 :名無しさん@お腹いっぱい。:2014/11/10(月) 02:28:00.33 .net
ファイルの順序はバラバラになるけど、Makefileが含まれているかどうか
が判れば良いはずなので問題はないと思う。ファイルの表示順序を維持
したい場合は GNU parallel を使えば良い。オプションはxargsの上位互換
になっている

988 :名無しさん@お腹いっぱい。:2014/11/10(月) 02:40:36.58 .net
GNU Parallel 版

$ find -L . -type f -readable -name "*.tar.gz" -print0 | sort -z | parallel -P 0 -0 -k 'echo " -- {} ---"; tar -tf "{}" 2>/dev/null | grep Makefile'

"-k" オプションが入力順序と出力順序を一致させる(keep order)
それと、find に "-L" オプションを付けて、tar のエラーメッセージを捨てる様にした

989 :名無しさん@お腹いっぱい。:2014/11/10(月) 02:49:17.86 .net
>>981
「結果」なるもの定義が
速度?ゴルフ?動けばいいの?
などとあいまいで分かりづらかったんだよね。
でも本人さんなら「結果出すのが強い」と明確に判断できるような
お題のサンプルぐらいは提示できるひとかなっと思ったんだ
なんだかごめん。

990 :名無しさん@お腹いっぱい。:2014/11/10(月) 05:32:23.44 .net
zgrep -lr Makefile .
一発

991 :名無しさん@お腹いっぱい。:2014/11/10(月) 09:24:03.48 .net
/bin/zgrep: -r: option not supported

992 :名無しさん@お腹いっぱい。:2014/11/10(月) 12:34:39.57 .net
>>989
> 「結果」なるもの定義が

普通に流れ読めばわかるだろ

993 :名無しさん@お腹いっぱい。:2014/11/10(月) 12:54:30.50 .net
dump(ufsdump)形式で固めたアーカイブを、
展開せずに tar (tar.gz)形式に変換したいんだが、
何かいい方法ある?

994 :名無しさん@お腹いっぱい。:2014/11/10(月) 15:03:04.46 .net
>>993
さらに上からtarする。

995 :名無しさん@お腹いっぱい。:2014/11/11(火) 00:56:17.74 .net
次スレ

シェルスクリプト総合 その24?2ch.net
http://peace.2ch.net/test/read.cgi/unix/1415634843/

996 :名無しさん@お腹いっぱい。:2014/11/11(火) 08:23:57.90 .net
>>995


997 :名無しさん@お腹いっぱい。:2014/11/11(火) 14:05:29.13 .net
梅がてら最近のケアレスミスを紹介

wgetでサイトのページ取ってきて解析するスクリプト作ってた
でもたまに解析に失敗する
試しにsleep入れたらちょっとましになったけどやっぱり失敗することがある
処理時間も考慮する必要があるから無駄に30秒とか入れたくないし・・・
でよく見直したら行末に「&」が付いてて非同期処理になってた
経緯としては標準出力&エラーを/dev/nullに叩き込んでたんだけど
いつも使うnohupの処理をそのままパクってきたときに消し忘れてた
これがわかるまでwgetってバッファとかメモリからの書き出しに
ラグがあるのかと思ってたくらいいいorz

998 :名無しさん@お腹いっぱい。:2014/11/11(火) 17:12:33.03 .net
URLのをクォートせずにコピペしてクエリの&でbgにしてることは、まれによくある。
クエリにコマンドしこまれてたら、セキュリティホールだな。区切り文字となるスペースないから、大したことできないかもだけど。

999 :名無しさん@お腹いっぱい。:2014/11/11(火) 17:35:57.09 .net
>>998
あるあるw

ちなみに、特殊文字を含むデータをペーストしようとすると警告してくれる端末エミュレータが
あった気がする。TeraTerm だったかなあ? あの機能には助けられた覚えがある。

1000 :名無しさん@お腹いっぱい。:2014/11/11(火) 18:29:25.62 .net
Xの端末は腐ったときに表示した文字をコマンドとしてシェルが実行してしまうことがあるよねw

252 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★