1 名前:名無しさん@お腹いっぱい。 [2009/07/01(水) 09:42:48 ] シェルスクリプトの総合スレです。 スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずは注意点、リンク、地鎮祭など(>>1-6 くらい)をご覧ください。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。 src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/ heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルスクリプトのことをシェルってゆーな ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも RubyやPerlの方が適した仕事には素直にそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 前スレ シェルスクリプト総合 その14 pc12.2ch.net/test/read.cgi/unix/1233179688/
22 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/08(水) 13:08:42 ] おもわずググっちまったorz
23 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/08(水) 13:17:05 ] >>22 see >>4
24 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/08(水) 13:18:29 ] いや、自作の方な
25 名前:名無しさん@お腹いっぱい。 [2009/07/10(金) 00:53:20 ] 質問です。 たとえば、以下のような仮のhogeコマンドを実行すると、 $ hoge -12 hoge.dat foo.dat bar.dat パラメタで指定したファイル(hoge.dat、foo.dat、bar.dat)の12行目だけをリストするようなコマンドはないでしょうか? よろしくお願いします。
26 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 01:14:30 ] シェルスクリプトスレなのに、単一のコマンドでないといかんのか? でないなら for i in hoge.dat foo.dat bar.dat; do sed -n 12p "$i"; done とか、 cat -n hoge.dat foo.dat bar.dat | egrep '^ *12^I' とか。 「コマンド」風にしたいなら、関数にするなり、別のスクリプトにするなり。
27 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 06:43:11 ] >>26 シェルスクリプトスレで質問してるんだから、 $ hoge -行番号 ファイル... という形式の引数を渡せるようなシェルを書いて回答してやれよ。 例えば、-12 で渡された引数を、sedの中に 12p の形に渡すためには 文字列の変換処理とかがちょっと必要になるだろ。 そのあたりも含めての質問だと思うが。
28 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 09:16:55 ] シェルを書いて回答してやれよ(笑)
29 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 09:47:48 ] >>26 2つ目の、cat -n の例、それじゃ駄目だろ。 全部のファイルに通し番号で番号が付いちゃうから。
30 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 10:04:15 ] 俺のcatはファイルごとに1から始まるぞ
31 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 10:06:41 ] どこの方言OSのcatですか?
32 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 10:30:33 ] OpenSolarisとFreeBSDとNetBSDです。おたくはどちらのご出身で?
33 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 10:51:08 ] >>25 awk 'FNR==12{print}' が単純でエレガントでは。パイプやループが要らないし。
34 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 11:02:28 ] あ、シェルにするには、 #!/bin/sh n=$1 shift awk "FNR==-($n){print}" "$@" ね。-12とかの引数をマイナスの数とみなして、awkの中で符合反転してる。
35 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 13:05:32 ] シェルにする、とな!
36 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 15:19:28 ] >>32 みえすいた嘘付くな。 $ uname -a SunOS opensolaris 5.11 snv_111b i86pc i386 i86pc Solaris $ cat hoge boke kasu $ cat -n hoge hoge 1 boke 2 kasu 3 boke 4 kasu
37 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 21:10:31 ] >>36 $ uname -a FreeBSD freebsd.example.com 7.2-RELEASE FreeBSD 7.2-RELEASE #2: Fri May 22 10:29:03 JST 2009 root@freebsd.example.com:/usr/obj/usr/src/sys/GENERIC i386 $ cat -n /etc/ntp.conf /etc/ntp.conf 1 server ntp1.jst.mfeed.ad.jp 2 server ntp2.jst.mfeed.ad.jp 3 server ntp3.jst.mfeed.ad.jp 1 server ntp1.jst.mfeed.ad.jp 2 server ntp2.jst.mfeed.ad.jp 3 server ntp3.jst.mfeed.ad.jp
38 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 21:11:39 ] ちなみに GNU の cat だと連続する。 $ gcat -n /etc/ntp.conf /etc/ntp.conf 1 server ntp1.jst.mfeed.ad.jp 2 server ntp2.jst.mfeed.ad.jp 3 server ntp3.jst.mfeed.ad.jp 4 server ntp1.jst.mfeed.ad.jp 5 server ntp2.jst.mfeed.ad.jp 6 server ntp3.jst.mfeed.ad.jp
39 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/10(金) 21:19:02 ] ntp.nict.jp 使ってやれよ!
40 名前:名無しさん@お腹いっぱい。 [2009/07/10(金) 21:51:19 ] >>39 Stratum 2 で充分だよ。
41 名前:名無しさん@お腹いっぱい。 [2009/07/11(土) 14:58:42 ] >>36 > みえすいた嘘付くな。 デフォルトだと/usr/gnu/binにあるcatが動くのも知らんのか。 わざわざインストールしてみたりしたんだろうか。 GNU以外でcat -nの番号が連続する実装ってある?
42 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/11(土) 17:42:32 ] >>33 >>34 のエレガントな解が出た今となっては、 cat -n(笑)を使うようなかっこ悪い解はどうでもよい。
43 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/11(土) 19:55:16 ] かっこ悪(笑)
44 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/11(土) 21:51:28 ] (command) って command ってやるのと何か違います?
45 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/11(土) 22:23:25 ] デヴャブ
46 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/11(土) 23:47:08 ] >>39 3msくらい遠い。ジッタは大差ない。
47 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 01:38:50 ] >>44 一例 cd / ; cd /tmp ; pwd cd / ; ( cd /tmp ) ; pwd
48 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 06:48:20 ] >>47 それは当然知ってる。 コマンド1個だけの場合に、 command と (command) に違いがあるかどうかを聞いてるんだが。
49 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 07:00:54 ] >>44 シェルによっては、シェル自身の最適化で、 ( ) を付けていてもサブシェルの必要がない場合はサブシェルにはしないため、 (command) と command に違いはない。
50 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 08:32:03 ] >>48 有る。
51 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 08:41:05 ] ash zsh ksh では (command) と command に違いはないようだ。(トレースして確認)
52 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 12:45:20 ] それらにおいても unset PATH と (unset PATH) は動作が違う気がする
53 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 14:01:37 ] >>52 それはあたりまえ。で、そんなことは聞いてない。 >>49 > 「サブシェルの必要がない場合はサブシェルにはしない」 欲嫁。
54 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 14:09:27 ] >>48 そこまでいくと実装依存的な話になる気がするけど 誰かに " (command) と command に違いは無い " とでも言って欲しいの? で誰かがそういったところで保証される訳でもなし " (command) と command " に違いはないから今後は " command "で書こうって話にはならない 逆に " (command) と command " に違いがないから作成中のスクリプトで「今困ってる」っていうなら そこまで動作を調べられる>>48 なら解決方法も分かってるだろ? バカなの?
55 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 14:14:05 ] バカで〜す
56 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 14:48:35 ] >>54 > 実装依存的な話になる気がするけど すでに、>>51 が、 > ash zsh ksh では (command) と command に違いはないようだ。 って(実装依存を前提として)答えてるのに、いまさら「気がするけど」って何? 補足したいなら、>>51 が調べた以外のシェルではどうなってるか試して レポートするべきじゃないの?
57 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/12(日) 17:08:44 ] ___ モシャモシャ / \ / ⌒ ⌒ \ / (●) (●) \ >56なに言ってんだこいつ | 、" ゙)(__人__)" .)| ___________ \ 。` ⌒゚:j´ ,/ j゙~~| | | | __/ \ |__| | | | | | / , \n|| | | | | | / / r. ( こ) | | | | | | ⌒ ーnnn |\ (⊆ソ .|_|___________|  ̄ \__、("二) ̄ ̄ ̄ ̄ ̄l二二l二二 _|_|__|_
58 名前:amatsuno ◆Z7H81aEWFM [2009/07/13(月) 12:42:35 ] テストします。 次で質問させて下さい
59 名前:amatsuno ◆y1bfd53lWE [2009/07/13(月) 13:02:32 ] 質問させて下さい。 AIX(ksh)で、以下を行おうとしています。 コマンドなどわかりましたら、教えて下さい。 やりたいこと) csvファイルを読み込んで、データを抜きだす。 csvファイル) A_table,3,DEF_ind,JKL_ind,TUV_ind,out.txt のように書かれたリストが複数行有ります。 出力ルール) csvファイルの第1カラム目に書かれたテーブルを見て、 その中から該当の文字列を呼び出します。 該当の文字列は、 第2カラムで指定された数字分、第3カラム目から先のカラムに書かれたものになります。 (上記の場合、第2カラム目が3なので、第3カラム目から第5カラム目までとなります) そしてその出力を最終カラムで指定したファイルに出力します。 上記の出力結果は、 DEF_ind JKL_ind TUV_ind をout.txtに出力します。 すいませんが、 わかるかた、宜しくお願いいたします。
60 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 13:21:29 ] >>59 ほれ、 awk -F, '$1=="A_table"{out=$($2+3);for(i=1;i<=$2;i++)print $(i+2)>>out}'
61 名前:amatsuno ◆y1bfd53lWE [2009/07/13(月) 13:47:11 ] >60 ありがとうございます。 ただこれを実行したところ、1箇所だけ問題があるようで、 3カラム目から先が永遠に出力されてしまい、ひたすら空白行が出ます。 第2カラム目で指定しらカラム数で止めるには、 どうすれば良いのでしょうか? たびたびで申し訳ございませんが、宜しくお願いいたします。
62 名前:amatsuno ◆y1bfd53lWE [2009/07/13(月) 13:51:46 ] >60 もうしわけございません。 61はデータ側の問題でした。 スクリプトは完璧でした。 誠に申し訳ございません。 ありがとうございました。
63 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 14:02:13 ] 不正なデータとして、 第2カラムが数値以外だと、ループがおかしくなるな。 そういう場合でも安全なように、 for(i=1;i<=$2;i++) を、 for(i=1;i<=$2+0;i++) にしておいた方がいいかも。
64 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 14:13:42 ] >>59 >>60 awkはシェルにあらず。 シェルスレならシェルで解決。 #!/bin/sh IFS=, while read line do set $line case $1 in A_table):;;*)continue;;esac shift max=$1 shift eval out=?$$# i=1 while [ $i -le $max ]; do echo "$1" shift i=`expr $i + 1` done > "$out" done
65 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 14:19:55 ] awkも可だよ。
66 名前:amatsuno ◆y1bfd53lWE [2009/07/13(月) 14:33:33 ] >>64 このawkを含んだ処理のkshは、 1.リストからデータの抜き出し 2.抜いたデータのインデックス検索 3.インデックス検索でたデータのバックアップ 4.バックアップデータのソート になります。 その一部でしたので、 ここで質問させていただきました。
67 名前:名無しさん@お腹いっぱい。 [2009/07/13(月) 23:23:55 ] 質問させてください。 テキストファイルの最後からN行を削除するにはどうしたらいいでしょうか? 例えばa.txtの最後から2行を削除して保存したいです。よろしくお願いします。
68 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 23:36:53 ] >>67 head -n `expr ?`wc -l < a.txt?` - 2` a.txt
69 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 23:39:34 ] >>68 「保存」してねえぞ (echo '$-1,$d'; echo wq) | ed -s a.txt
70 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 23:41:10 ] >>68 全角?はなんのおまじない?
71 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 23:43:51 ] >>69 printfコマンドって、使えない環境もあるのかな。 あと「wq」は使えなくて「w」と「q」の2コマンドなら OKという環境はよくあるね。
72 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 23:44:10 ] >>69 ありがとうございます。 でも結構難しいですね。もうちょっと簡単に短くできませんでしたっけ?
73 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 00:47:11 ] 度々すみません。 たしかheadで出来たと思うのですが a.txtの最後から2行を削除して保存。とか出来ませんでしたっけ?
74 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 01:09:23 ] 保存はともかく、 末尾の指定行数をカットできるのはGNUのおせっかいheadくらいじゃないか
75 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 07:38:51 ] >>70 半角バックスラッシュが?に化ける模様。 そう解釈すれば >>68 が正解。
76 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 08:06:31 ] Safari@Macかね?
77 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 16:19:50 ] >>71 >printfコマンドって、使えない環境もあるのかな。 SunOS4 とか。
78 名前:amatsuno ◆y1bfd53lWE [2009/07/14(火) 17:52:11 ] この前はありがとうございました。 もうひとつ教えて下さい。 前回教えていただきましたリストを1行にまとめる方法を教えて下さい。 変更前のファイル(b_ind)の中身);0 DEF_ind JKL_ind TUV_ind 変更後のファイル(a_ind)の中身); DEF_ind,JKL_ind,TUV_ind 上記では3行ですが、実際は1-8のいずれかの行数となります。 このような複数行をカンマ区切りの1行にしたいのです。 DBからバックアップを取る時の指定のインデックスのため、 カンマ区切りの1行記載が必要となりました。 すいませんが知っている方、 宜しくお願いいたします。
79 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 18:01:02 ] >>78 >>60 のスクリプトをちょっと修正すればいいだけだよ。 awk -F, '$1=="A_table"{out=$($2+3);for(i=1;i<$2+0;i++){printf $(i+2) ",">>out}print $(i+2)>>out}'
80 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 19:17:06 ] >>78-79 awkはシェルにあらず。 シェルスレならシェルで解決。 #!/bin/sh IFS=, while read line do set $line case $1 in A_table):;;*)continue;;esac shift max=$1 shift eval out='$'$# i=1 while [ $i -lt $max ]; do echo -n "$1", shift i=`expr $i + 1` done > "$out" echo "$1" >> "$out" done
81 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 21:01:22 ] 経験的にsedとawkはrcスクリプトで使われてるのでOK
82 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/14(火) 21:16:41 ] 経験的にイマドキのOSはrcスクリプト自体を使わないのでNG
83 名前:amatsuno ◆y1bfd53lWE [2009/07/15(水) 09:40:43 ] >>79 できました。 ありがとうございます。
84 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/15(水) 16:09:35 ] >>82 テンプレ読み直してこい あまりキチガイめいたこと言うなよ
85 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/16(木) 00:53:20 ] #!/bin/rc もベル研純正シェル
86 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/17(金) 21:39:49 ] >>34 awkはシェルにあらず。 シェルスレならシェルで解決。 #!/bin/bash n=$((-$1)) shift for file in "$@"; { i=1 while IFS= read -r line do ((i++ == n)) && { echo "$line" break } done < "$file" }
87 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/17(金) 21:52:56 ] bash使うなよ
88 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/17(金) 22:25:33 ] bashはLinux板でやれ
89 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/17(金) 22:39:05 ] >>87-88 bashに過剰反応するな。 kshでもzshでも動くから、bash依存とまでは言えない。 #!/bin/ksh n=$((- $1)) shift for file in "$@"; { i=1 while IFS= read -r line do ((i++ == n)) && { echo "$line" break } done < "$file" }
90 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/18(土) 00:36:24 ] POSIX準拠だから#!/bin/shでもいいはず、といってみる
91 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/18(土) 01:40:37 ] /bin/shにはPOSIX shellを置く、なんてことはPOSIXに書いてない
92 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 13:50:12 ] シェルスクリプトでドラッグアンドドロップできる?
93 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 14:12:21 ] >>92 目的は何?
94 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 14:32:02 ] >>93 目的がわかっても答えられないのに逆質すんな。
95 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 14:38:10 ] あぁ、釣りか。 つられちゃったw てへっ?☆
96 名前:92 mailto:sage [2009/07/21(火) 15:19:06 ] ちょっと思いついたので聞いてみただけです。目的はありません。
97 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 01:01:27 ] シェルスクリプトで手マンできますか?
98 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 01:03:03 ] >>97 目的は何?
99 名前:sage [2009/07/22(水) 15:28:06 ] 質問させてください。 標準入力から入力した値を処理するシェルスクリプト(Bシェル)を作成しています。 入力値に\(バックスラッシュ)が入る可能性があるので、 readのオプションに「-r」を付けて、入力値をすべて受け取れるようにしようと思ったのですが、 「-r」オプションをつけると「英数字以外の文字が使用されています。」というメッセージが出力され オプションが使えないようです。 例) OS:Solaris10 $ cat aaa.sh #!/bin/sh read aaa echo $aaa read -r ppp echo $ppp $ $ ./aaa.sh III ←コマンドラインから入力 III ←出力 ./aaa.sh: -r: 英数字以外の文字が使用されています。 ←オプションを付けたreadに対してのエラーメッセージ 質問ですが、Bシェルでは、readに「-r」オプションは使えないのでしょうか? (manを見る限り使えないとは言ってないように思われたのですが) もし、使えないとすると、何か他に方法をご教授頂けないでしょうか? (出来る限りBシェルでしたいと考えているのでこのコマンドだけkshで実行するなどでしょうか) よろしくお願いします。
100 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 15:45:09 ] どうみても使えるとは書いていませんが、何を見ているのでしょうか? docs.sun.com/app/docs/doc/816-5165/sh-1?l=Ja&a=view
101 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:14:27 ] >>99 Solarisの/bin/shのreadは、-rには対応していません。 bashか、zshか、kshを使いましょう。
102 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:18:57 ] >>99 どうしても /bin/sh だけでやりたい場合、 read -r aaa の代わりに、 aaa=`head -1` とやる方法がある。
103 名前:sage [2009/07/22(水) 16:32:21 ] ありがとうございます。 >>100 -r 使えないんですね。 docs.sun.com/app/docs/doc/819-1210/read-1?a=view を見て、標準のオプションなのかなと思い込んでました。 >>101 やっぱり他のシェルにするべきなのか 検討します。 >>102 その様な方法もあるんですね。勉強になります。 今回使用できるのか検討します。
104 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:32:27 ] なるほどねえ
105 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:34:43 ] >>103 > docs.sun.com/app/docs/doc/819-1210/read-1?a=view sh のとこに -r 書いてないじゃん。
106 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:39:22 ] docs.sun.com に書いてあるのは、外部コマンド版の /usr/bin/readじゃん。 中身はkshスクリプト。 これって、結局シェル変数が親プロセスに渡らないから意味ないし、 外部コマンド版の /usr/bin/cd と並んで意味不明コマンドのひとつなんだよな。
107 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:40:44 ] >>106 いや、/usr/bin/read 以外にシェルの内部コマンドについても書いてあるよ。
108 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:44:04 ] >>107 そんなことは知ってるよ。 そうじゃなくて、/usr/bin/readのアフォさ加減について話題を振りたいわけだが。
109 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:46:03 ] >>106 の書き方じゃ知ってたかどうかわからんよ。
110 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:50:18 ] 質問者の >>99 が、shの内部コマンドのreadは使えなくても、 shから/usr/bin/readを呼び出せば使える、と勘違いしていた可能性もあるわな。
111 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:04:48 ] >>108 POSIX標準では、 ・$0 "$@"で実装できるからシステムの負担にはならない ・いい使い方があるかも知れない ・対称性のため などと存在理由を説明しています。
112 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:26:25 ] >>111 >・対称性のため なら、なぜ、eval exit export wait などについては 外部コマンド版がないのか合理的な説明をお願いします。
113 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:35:26 ] POSIX仕様には書いてありません。
114 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:41:28 ] POSIX標準がそう決めた理由を聞いているのに、 「POSIX仕様には書いてありません」は循環論法。
115 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:53:32 ] >>111 に理由聞いてもしょうがないんじゃね。
116 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:56:28 ] 使えない外部コマンドがあるくせに、 Solarisでは /usr/bin/[ が削除されてるんだよなぁ。 ほんとわけわからん。
117 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:57:33 ] >>116 使いたいの?
118 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:59:48 ] v7shをもってきて使いたくなるかもしれないじゃないか
119 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 18:16:31 ] >>117 使いたいかどうかじゃなくて、 /usr/bin/[ は、呼び出せば動作する。 一方、/usr/bin/read とか、/usr/bin/umask とかは readや umaskの動作はしない。 動作するものを削除して、動作しないものを配置することの馬鹿さを言ってるんだが。
120 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 18:56:40 ] あってもなくても害がないならどっちでもいいじゃん。 馬鹿と非難するほどのことでもないと思うけど。
121 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 19:39:41 ] これ、正しいか? docs.sun.com/app/docs/doc/819-1210/read-1?a=view > 例 1 read コマンドの例 > > 以下に示す /usr/bin/read の例は、入力ファイルの内容を、各行の先頭フィールドを最後尾に 移動して出力するものです。 > example% while read -r xx yy > do > printf "%s %s\n" "$yy" "$xx" > done < input_file
122 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 20:12:29 ] マニュアルのバグだね。send-prしといてね。