1 名前:名無しさん@お腹いっぱい。 [2008/02/11(月) 19:21:07 ] シェルスクリプトの総合スレです。 スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずは注意点、リンク、地鎮祭など(>>1-6 くらい)をご覧ください。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashなので特に注意。 ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルスクリプトのことをシェルってゆーな ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも RubyやPerlの方が適した仕事には素直にそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 前スレ シェルスクリプト総合 その9 pc11.2ch.net/test/read.cgi/unix/1187130302/
38 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:48:13 ] >>35 ああ、それでいいんですけどシェルスクリプトで書く方法がわかりません… もう、他のスクリプト言語でも使ってしまえばいいんですが、サーバにあまり いらないものインストールもしたくないので。
39 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:48:13 ] すいません、env TZ=GMT-15 `date +%b%d` としても、2月12日とでてしまうのですが…。 日付を Feb 12 と出したいので…orz
40 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:49:42 ] >>39 env LC_ALL=C TZ=GMT-15 date +%b%d
41 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:50:15 ] シェルスクリプトであるディレクトリの下のディレクトリひとつひとつに対して 作成日時 or 曜日を判断できて、rmを実行できれば解決です。
42 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:51:15 ] >>38 スクリプト一発でなんとかするんじゃなく >>34 じゃだめなん?
43 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:55:34 ] >40 ありがとうございます。 今までcsh使ってて、混乱していました…orz
44 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:56:42 ] >>42 > 4日前のを消すスクリプトを日曜以外毎日動かすとか。 を見逃してました これでいいですw ありがとうございました。
45 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 01:05:06 ] GNU dateがあれば、 dir=20080213 s=`date --date=$dir '+%s'` nows=`date '+%s'` diff=`expr "$nows" - "$s"` w=`date --date=$dir '+w'` if [ "$w" -eq 0 -and "$diff" -gt 604800 ]; then # 60*60*24*7 remove; elif [ "$diff" -gt 36288000 ]; then # 60*60*24*7*30*2 remove fi なければ、perlで同様のコードを。
46 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 01:06:52 ] "$w" -ne 0 でした。
47 名前:39-43 mailto:sage [2008/02/13(水) 01:26:33 ] さらにすいません…。 env LC_ALL=C TZ=GMT-15 date '+%b %e' で望みどおりでたんですが、これをAAAに入れて検索条件にしたいんですが、 AAA=`env LC_ALL=C TZ=GMT-15 date '+%b %e'` としても昨日にならなくて困っています。。。
48 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 01:29:20 ] GNU dateがあれば、 date --date=yesterday なければ、perlで同様のコードを。
49 名前:47 mailto:sage [2008/02/13(水) 01:39:46 ] >48 ありがとうございます。やっぱりそうですか…。
50 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 06:22:53 ] 初心者ですみませんが質問させてください。 aaa bbb と書いてあるa.txtをtrコマンドでxxxに置換して保存したいのですが tr 'aaa\nbbb' 'xxx' < a.txt を実行すると画面に表示されてa.txtに保存できません。 しかもxxxxxxxxと表示されている・・・ どうやってうまい具合にa.txtに保存できますでしょうか?
51 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 07:05:45 ] >>50 そもそも trコマンドを勘違いしてる。 それだと、aaa改行bbbという並びに関係なく、 aまたはbまたは改行がすべて xに変換される。 例えばファイル内容が abab改行 だったとしても xxxxx に変換される。 同じファイルに出力する方法はまた次の段階で。
52 名前:50 mailto:sage [2008/02/19(火) 07:16:41 ] >>51 なるほど。 trでもsedでもいいのですが aaa bbb を xxx に変換したいのです。 うーん。何でどうやったらいいのだろう。。
53 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 07:29:35 ] >>50 ほれ、考えてやったぞ。 (rm a.txt; sed 'N; s/aaa\nbbb/xxx/; P; D' > a.txt) < a.txt
54 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 18:05:08 ] chmod で ディレクトリは0755、ファイルは0644に 簡単にする方法教えてくださいませ
55 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 18:09:23 ] findでがんばれ
56 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 18:23:48 ] >>54 もともとディレクトリが700、通常ファイルが600になっているなら、 トップディレクトリで chmod -R go+u-w . で一発。
57 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 20:28:04 ] 単にこういうことしたいみたいな質問はくだ質にいって欲しいなあ。 英作文スレで単語を質問してるようなもんだ。
58 名前:名無しさん@お腹いっぱい。 [2008/02/19(火) 23:13:05 ] >>53 もっと簡単に出きるとオモ >>54 umask
59 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 23:14:22 ] >>53 どうも。LINUX環境ですが実行しても空のファイルが作られるだけでした。 もう1度質問させてください。 複数行の文字列をsedで置換できるようなのですがやり方がわかりません。 マニュアル見ましたがNオプションとやらでできるみたいなのですが 初心者なので理解に苦しんでます。どうやったらできますか・・・
60 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 23:19:19 ] >>58 あふぉちゃう? umaskではすでに存在するファイルのパーミッションは変わらない。
61 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 23:22:33 ] >>59 はい、Linuxなら板違い。 ちなみに UNIXだと >>53 でちゃんと動作するよ。
62 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 23:30:40 ] >>59 >>53 が書いているコマンドラインを1字1句そのままコピペして実行したか? Linuxでも >>53 でちゃんと動作したよ。 rm a.txt の部分とか、( ) で囲んでるところとかが重要なんだけど、 自分で勝手に解釈して rm a.txtを省略したりしてないかな? rm a.txtを省略すると同じファイルに上書きされるので 空のファイルができる現象が起こるはず。 あと、環境限定になるが、sed -i を使えば、( )の中で rm するトリックは不要になる。
63 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/20(水) 05:44:43 ] >>62 どうも。がんばってみます。 てかLINUXは板違いなの? テンプレにLINUXもいいようなこと書いてあったのですが板違いなら失礼しました。
64 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/20(水) 09:54:16 ] > てかLINUXは板違いなの? 板違いでは無いと思うけど、unixのシェルスクリプトスレよりも Linuxの初心者質問スレに行った方が良いんじゃない?
65 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/20(水) 12:35:24 ] >>61 はアホだから放置で。
66 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/22(金) 16:26:31 ] うーん、UNIXの授業という授業でLinuxを動かしてるんですけど、 この場合どちらで聴いたらいいですか? 来週までにレポート出さないと単位がやばいのです
67 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/22(金) 16:31:41 ] >>66 宿題禁止なのでどっちも駄目。単位落して再履修が本人のため。
68 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/22(金) 16:32:23 ] シェルスクリプトはここで聞けばいいよ。 けど宿題は自分でやりなよ。
69 名前:名無しさん@お腹いっぱい。 [2008/02/22(金) 19:04:37 ] バッシュで使えてボーンで使えないシェル記法を10個挙げるとすると 何になりますか? 端的に解答をお願いします。
70 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/22(金) 19:42:40 ] >>69 エクレアみたいな名前のコマンドが使えませんでした。
71 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/22(金) 19:43:30 ] Appendix B Major Differences From The Bourne Shell www.gnu.org/software/bash/manual/bashref.html#Major-Differences-From-The-Bourne-Shell
72 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/22(金) 20:01:34 ] >>70 10個、具体的にお願いします。 >>71 日本語でお願いします。 あ、来週月曜までにお願いします。
73 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/22(金) 20:08:40 ] >>72 エクレア?みたいな名前のコマンドが使えませんでした。
74 名前:名無しさん@お腹いっぱい。 [2008/02/22(金) 21:16:55 ] rsh で、リモート側の戻り値 $? を取得することは可能でしょうか?
75 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/22(金) 21:20:21 ] >>74 不可能。sshなら可能。
76 名前:名無しさん@お腹いっぱい。 [2008/02/23(土) 16:28:51 ] あるディレクトリ中でファイルのタイムスタンプの新しい順にls表示するには ls -lt でできますが、 これを、あるディレクトリ以下のサブディレクトリを全部含めて、かつ、 どのディレクトリにあるかに関係無しにタイムスタンプの新しい順にls表示するには どうしたらいいでしょう? ls -ltR では、ディレクトリごとにしかソートされません。 なるべく簡単な方法(コマンドラインにすぐ打てる程度)を希望します。
77 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 16:38:18 ] そういうのはくだ質へ行ってください。
78 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 16:40:07 ] >>77 くだ質へ行ったところでお前答えられるのかよw
79 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:04:11 ] ls -lR | sort では駄目なの? sort条件の設定がめんどくさそうだけど。
80 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:18:23 ] >>79 はい、だめです。
81 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:20:44 ] >>80 それじゃ他の板行って。ここはスクリプトの板であって、コマンドの板ではないから。
82 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:24:19 ] >>81 そのコマンドをシェルスクリプト中に書きます。
83 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:27:08 ] >>82 >>6
84 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:32:50 ] まずはコマンドとして実行してみて確認するためと、 今後とも定石として覚えやすいように、なるべく簡単な方法を聞いたまでです。 目的はシェルスクリプトに書くことです。コマンドの使い方の質問ではありません。 では、よく知っている方、解答をどうぞ、 ↓
85 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:39:21 ] 手当たり次第man
86 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:41:00 ] お前アホだろ。 perl scriptで、 mtimeのepochTime ファイル名 と出力させてsort -nr
87 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:42:59 ] 屁理屈だけは一人前だな。 しかし、お前の屁理屈を受け入れる必要は全然無い。 残念だなあ、くだ質でなら答えてやったのに。
88 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:44:11 ] lsとコマンド組み合わせで行けそうだし、 >なるべく簡単な方法(コマンドラインにすぐ打てる程度)を希望します。 これはaliasか、これ用のシェルスクリプト書けば行けるけど、 考えれば考えるほど>>77 が正しく思えるようになってきたw
89 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:44:21 ] >>86 perlを使わずにお願いします。
90 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:46:29 ] PATTERNS="*.jpg *.gif" のような、globパタンを空白で区切って並べた 変数が与えられたとして、 ディレクトリ $dir に存在するファイルでこれにマッチするものを 処理するにはどう書くのがいい? cd $dir; for f in $PATTERNS だと、$dirにcdできないといけないのがちょっといやかな、と。
91 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:49:41 ] >>90 cd || exit って感じでcdできなかったら例外処理するようにしたら?
92 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:50:42 ] ふつー cd $dir&& for f in $PATTERNS
93 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:54:28 ] そういうことを言ってるんじゃなくて、 cdをしたくないんじゃないのかな?
94 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:55:37 ] ああ、確かにw ではちょっと訂正させていただいて。 cd "$dir" && for f in $PATTERNS だと$dirにcdできないといけないけど、ディレクトリにrパーミッションが 出ていてxが出ていない場合も処理できる書き方ができたらいいなと。
95 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:55:43 ] じゃあfindとか
96 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 18:06:34 ] >>93 そういう意味です >>95 ちょっと思いつかなかった。有望かも。 でもfindの-nameはパタン一つしかとれない。 echo "$PATTERNS"|sed -E 's/^[[:space:]]*// s/[[:space:]]*$// s/[[:space:]]+/ -name /g s/^/-name /' ぐらいでいいのかな?
97 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 18:06:35 ] >>84 find . -print0 | xargs -0 stat -t %s の出力をどうにかすればいいんじゃない?
98 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 18:11:55 ] >>94 xないとパターン展開できないんだけど? (direcotry listing属性) rのみで問題ないのは既にパスが分かっているときだけ。 だからx立っているの前提で、 FILES=`(cd $dir; echo $PATTERNS)'`
99 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 18:16:26 ] 逆だろ。rがないとリスティング出来ない。 ただxがないとアクセスできないから意味ないんじゃね? >>94 かなり特殊なケースでリスティングだけ出きればいいのかも知れないが。
100 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 18:39:23 ] xなくてもrが有ればパターン展開は出来る。 ループ内でset +xしてるのがダサいな。 set -f for f in $(for p in $pat; do set +f; [ "$(echo ${dir}/${p})" = "${dir}/${p}" ] || echo ${dir}/${p};done); do basename "${f}";done
101 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 18:50:53 ] パターンがglobパターンじゃない場合に見つけられなかった。 set -f for f in $(for p in $pat; do set +f; [ "$(echo ${dir}/${p}*)" = "${dir}/${p}*" ] || echo ${dir}/${p};done); do basename "${f}";done
102 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/24(日) 07:19:02 ] >>96 find . \( -name '*.[ch]' -or -name '*.asm' \) ... とかできないか?
103 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/29(金) 15:55:20 ] 犬糞厨はこっちへ シェルスクリプト総合@LINUX Part3 pc11.2ch.net/test/read.cgi/linux/1184077033/
104 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/01(土) 23:48:31 ] ●質問 /hoge/ 以下にあるディレクトリ群の中身のファイルリストを フルパス形式で各ディレクトリ毎に作りたいです。 ●自分なりに調べた結果 findコマンドを使うとフルパスで結果が返ってくる事がわかりました。 こうしました。 $find /hoge -name "*.txt" > hoge.list ですがこれだと全てのディレクトリの.txtまでのパスが書かれてしまいますので これを各ディレクトリ毎に作りたいんです。そしてそれを~/listに保存したいです。 手作業でもいいのですがOSに不慣れなうえディレクトリが120ほどあり困っています お力お借り出来ませんでしょうか?よろしくおねがいします。 丸投げするつもりはないです 知恵を貸してほしいです。
105 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/01(土) 23:52:48 ] ls -Rオススメ
106 名前:104 mailto:sage [2008/03/02(日) 00:14:25 ] >>105 ありがとうございます。 すみません自分の説明が下手でした・・ $cat a_list /hoge/a/hoge1.txt /hoge/a/hoge2.txt $cat b_list /hoge/b/hage.txt /hoge/b/hage.txt 伝わりますでしょうか・・。
107 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/02(日) 00:50:58 ] こんなんかな find . -depth 1 -type d | while read dir do ls -lR $dir > ./tmp/${dir}_list done
108 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/02(日) 00:53:54 ] あ、出力がフルパスじゃないや。 まぁ、なんかこんな感じでできそうな希ガス。
109 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/02(日) 00:58:29 ] find . -depth 1 -type d | while read dir do find /path/to/hoge/ > ~/list${dir}_list done こんなんか。3連カキコすんまそん。
110 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/02(日) 01:33:33 ] サブディレクトリもあるのかとか、 *.txt 以外のファイルもあるのかあれば表示してもいいのかとか、 ちと条件不足
111 名前:104 mailto:sage [2008/03/02(日) 01:41:01 ] ありがとうございます。 >>109 /path/to/hoge/を書き換えしmkdir ~/listしたうえで実行してみました。 以下のようになります。 find: パスは評価式の前におかなければならない Usage: find [-H] [-L] [-P] [path...] [expression] >>110 条件ですか・・。 サブディレクトリはないです。*.txt以外表示はしたくないです。 *.txt以外のファイルも混在しています。
112 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/02(日) 01:59:50 ] find の行にほかに何か書いたんじゃ? find /path/to/hoge -name "*.txt" > ~/list${dir}_list かなぁ。 find /path/to/hoge/ てすると結果が /path/to/hoge//dir になるぽい。 ちょっと今Macしか手元にないのでちょっと挙動が違うかもね。 俺もあんまり詳しくないんでw
113 名前:104 mailto:sage [2008/03/02(日) 02:28:31 ] >>112 何も書いてないですね。自分に出来るかわからないですけど教えてもらったのを 参考に弄ってみたいと思います。 Macもコマンド使えるんですかー 知りませんでしたw ありがとうございました。一旦、スレを離れます。
114 名前:名無しさん@お腹いっぱい。 [2008/03/05(水) 00:49:41 ] HOGE=20080302022831 たとえば2008年3月2日 2時28分31秒を意味する みたいな環境変数あったとして、 これに180秒足すとか、 時刻の加減算したいのだけどなんかいい方法ない?
115 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/05(水) 01:14:43 ] date -j -f %s $(($(date -j -f %Y%m%d%H%M%S "$HOGE" +%s) + 180)) +%Y%m%d%H%M%S みたいな?OSというかdateによるけど。
116 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/05(水) 04:26:24 ] UNIX epochは素晴らしい。 64bitにした時signedにしてないシステムがあるのは嘆かわしい。
117 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/05(水) 14:50:47 ] dateコマンドはシステムによって違いすぎるから、ほとんどの日付計算はperlに丸投げ
118 名前:名無しさん@お腹いっぱい。 [2008/03/06(木) 13:08:35 ] ある テキストファイルに"aaa"という文字列が入っていたら[処理A]を テキストファイルに"bbb"という文字列が入っていたら[処理B]を ってシェルスクリプトだけでできるかな? bashで。
119 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 13:19:01 ] bashは知らんがshで case $(cat x.txt) in *aaa*) echo 'do A';; *bbb*) echo 'do B';; esac
120 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 13:23:09 ] 両方入っていたら?
121 名前:名無しさん@お腹いっぱい。 [2008/03/06(木) 13:25:03 ] >>119 すげえ!頭の構造が違う! ありがとう。
122 名前:名無しさん@お腹いっぱい。 [2008/03/06(木) 13:25:45 ] >>120 泣きながら修正する
123 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 14:12:58 ] >>119 ファイルサイズがでかいとつらそうだな
124 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 14:15:27 ] grep -s aaa file && echo 処理A grep -s bbb file && echo 処理B
125 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 15:36:21 ] >>119 それ bash。 純正 shでは動かん。
126 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 15:41:02 ] >>125 すげー理屈だな。
127 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 15:43:33 ] まぁbashで動くならいいんじゃね。
128 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 15:49:49 ] 純正 shって何?
129 名前:名無しさん@お腹いっぱい。 mailto:sag [2008/03/06(木) 16:02:36 ] Version 7 あたりか
130 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 16:34:24 ] 俺は124みたいな方法が好み $( )が動くのはkshからか?
131 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 16:49:43 ] >>124 それだと今のgrepでは行が表示されちゃうよ。 骨董品のような環境しか使ってないことバレますよw
132 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 17:59:52 ] *BSDユーザはbash依存にはうるさいが、ash依存「$( )とかexport A=aとか」には 無頓着な傾向があるな。
133 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 18:27:06 ] export A=aはkshでも出来るからどうでも良い
134 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 18:41:48 ] 現実に純正shとやらが載ってる環境なんて今時滅多になかろうし、 テンプレにある議論の基準として参照できそうなのもPOSIXの仕様くらいなので 仕方ない面もあると思う。 >>132 は*BSDユーザに何をみてshの仕様を判断することを期待しているの?
135 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 19:02:35 ] そもそも「純正 sh」って表現が意味わからん。
136 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 19:04:57 ] そうですか。Solarisは今時滅多にないですか、、
137 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 19:07:57 ] >>134 「純正 sh」なんて言わないで 「FreeBSD の /bin/sh で試した」とか言えばいいじゃん。
138 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 19:09:10 ] はいはいashash
139 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 19:10:00 ] >>137 は勘違いしてるね。 FreeBSD の /bin/sh は 純正 sh じゃない。(ashだから) だから、FreeBSD の /bin/sh では >>119 が動いてしまう。 純正 shでは動かないけど。
140 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 19:35:26 ] >>139 純正shって結局何? System 7のshが純正ってことでいい? >>137 それじゃ一般化した議論ができないよ。 まず、$( )とかexport A=aとかが純正shとやらにはありません、 ということを*BSDユーザに対して説得力ある説明をするにはどうするの?
141 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 19:42:05 ] >>140 別に一般化しなくていいと思うけどな。 「(OS 名) の /bin/sh では動かないよ」でいいじゃん。
142 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 20:20:17 ] 「Solarisの/bin/shには$( )とかexport A=aとかがありません」これでいい?
143 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 20:33:05 ] その調子で、Solaris以外も全部列挙していってくれ。
144 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 20:42:22 ] Solarisはいまどきめったにないです
145 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 21:13:15 ] 多くの商用UNIXは互換のために古いshが残されてる。 Solarisの場合、多くのスクリプトがkshベースになってるけどな。
146 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 21:21:53 ] 商用UNIXがもうそれほど多くないです
147 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 21:25:27 ] しょうよねぇ
148 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 22:24:07 ] HP-UXは11iでbourneは完全になくなった
149 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 06:51:44 ] 実装とmanだけで、ちゃんとした仕様がないんだから、 純正shなんて言っても始まらない。 今はPOSIXが標準。 >>1 >・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 なんて馬鹿げてる。
150 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 07:01:33 ] POSIX sh や ksh を前提にしてもいいかもね
151 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 07:14:25 ] よくないだろw
152 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 07:22:03 ] そう? Bourne Shellを前提にするよりはいろいろと有効だとおもうけど
153 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 08:22:29 ] 正直、AT&Tの純正/bin/shが使える環境の方が特殊。 原理主義者は別スレ立ててそこでやってくれ。 そこで永遠に添削してれば良かろう。 つ 【純正/bin/shが】シェルスクリプト【唯一の正当なsh】
154 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 08:46:54 ] いやだから、Solarisの/bin/shが現存するんだって。Solarisももう特殊なのか?
155 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 09:13:02 ] 特殊な部類と言われてもそれほど驚かないけど。 /bin/shをposix shに置き換えていないのはまだ生きているものの中ではsolarisぐらい?
156 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 09:48:19 ] 使用シェルを明示すればいいだけのような気がする。 それでも差異を知っておくのは別に悪いことじゃないと思うんだけど、 特定のOSしか相手にしない連中ならそれでもいいか。
157 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 09:58:02 ] つまり純正shとかいってたのは、Solarisで動かないのは認めねーってのがホンネかw
158 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 10:20:04 ] Solarisなんて現場ではもうほとんど使われてないだろ。 使われているのは昔のマシンで、移行が面倒だからそのまま動いてるだけのもの。 そういうマシンは保守のみで、新規にスクリプトを書くことはないので、 結局Solaris用のスクリプトなんてもう書くことはない。
159 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 10:25:19 ] 自分の場合、Solarisに限らず古めの商用UNIXをお守りすることがある。 入れ替えろつってもムリな環境ってのはあるから。装置の一部になってるとか。 OSのアップグレードすらムリだったり。 若い連中には/bin/shと書いておきながらbash前提のスクリプト書くやつが いたりするんだが、犬以外の作業ではまっていたりする。 そんなやつは知識が足りてないから、なかなか解決できないのが笑えるよ。
160 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 10:25:56 ] >>158 自分の知ってる世界がすべてだと思わない方がいいよ。
161 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 10:50:13 ] Bourne shを前提にすればSolarisのshすら拡張されている。
162 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 10:51:15 ] >>160 こういうふうに、反論する(反例を示す)わけでもなく、 一般論だけ言って本人は反論したつもりになってるのって間違ってるよな。
163 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 10:57:52 ] >>161 じゃあ、Solarisの/bin/shで使えて、Bourne shでは使えない例を1つ以上挙げて。 あらかじめ言っとくけど、あくまでシェルスクリプトとしてね。 インタラクティブモードでの拡張は別。(set -mでjob controlが使えるようになるとか)
164 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 11:16:01 ] ^ がパイプとして動くshはまだどっかにある?
165 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 11:23:50 ] >>163 関数。
166 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 11:28:01 ] オリジナルBourne shellって一体どのバージョンのこと指しているの? POSIXなら仕様のversionでどれかはっきりするけども。 オリジナルBourne shellって言っても、どれか特定すら出来ないでしょ。 後から行われたバグフィックスは含むのか含まないのか。
167 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 11:39:06 ] >>164 Solarisの/bin/sh は ^ がパイプとして機能する。Bourne sh踏襲のため。
168 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 11:58:56 ] 反例ないようだし、実質 Solaris /bin/sh基準でいいんじゃね?
169 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 12:04:57 ] 可哀想に、耄碌して目も見えなくなったのか……
170 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 12:07:54 ] 基準なんているか? 質問者の環境で動けばいいじゃん。
171 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 12:17:05 ] そういうことにしてしまうとbashを排除する口実がなくなる。
172 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 12:38:31 ] 実質POSIX sh基準でよさそうだな。SUSv3と一体化したし。
173 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 12:40:50 ] だから、それじゃSolarisで動かないとあれほど、、
174 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 12:43:10 ] Solaris爺様には必要なときにSolarisではどうするかと質問してもらうということでいいんじゃない。
175 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 12:44:44 ] Solarisはkshがあるから、POSIXのコード渡されても問題ないでしょ。
176 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 12:44:57 ] POSIX信者もbashと同様にウザイことに最近気がついた。
177 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 12:46:14 ] Bourne shell原理主義者もな。
178 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 12:47:28 ] 学生のときSolarisにお世話になった俺は心情的にはSolaris使える人を維持できるよう このスレも気を配った方がいいとは思うのだが、昨日からの流れ見てると 到底このスレのSolaris使いを擁護する気にはなれないwww もうPOSIX shスレでいーよ。
179 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 12:53:45 ] せっかくだからPOSIXと由緒正しいBourne shellの違いを上げてみる? [[ 新test式 ]] $(( 算術式 )) 引数がない場合の"$@"問題
180 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 13:00:43 ] そもそもtestがbuiltinだ、ボケ
181 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 13:01:17 ] そもそもtestがbuiltinじゃないだ、ボケ
182 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 13:01:43 ] 建設的な話のもっていきかただとは思うが、まず > 由緒正しいBourne shell とやらを特定しようぜ。できればSolaris以外のソースで頼むわ。 Solarisのshをもってきてこれが純正だっつーならバージョンも明記でな。 いまのところ、Version 7のshがそれということになりかねない。
183 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 13:04:09 ] なりつつある、の方が適当だったか。
184 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 13:11:16 ] 人は皆、理想のシェルを追い続ける旅人のようなものさ。
185 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 13:18:46 ] $( コマンド ) < POSIX
186 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 13:30:45 ] >>184 理想でいえば、rc はなかなかいいよ(単なるまぜっかえし)
187 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 13:35:48 ] 仮にPOSIXで桶にしてしまうと、 print hoge (printfじゃないよ、読み間違えるなよ) なんてのも桶になってしまう。 POSIX的にはechoは非推奨で、printに書き換えなきゃならないからな。 で、*BSDユーザーからは printなんてコマンドねーよ、って話になる。
188 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 13:42:10 ] >>187 はつみみなのでソースよろ。
189 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 13:56:56 ] echoはプラットフォームごとに違いが大きいからなあ。
190 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 14:10:08 ] Solarisに至っては内蔵コマンドなのにPATHによって挙動が変化するしね
191 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 16:36:46 ] POSIXにprintコマンドなどない。 POSIXについてすら>>187 のように妄想を語り出す奴がいるようでは 仕様を特定できないBourne shでは到底基準にならないな。
192 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 16:51:06 ] とりあえず、間を取ってkshぐらいで動けばまぁ文句も出にくいかと。
193 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 17:39:04 ] >>191 xpg4ってPOSIXじゃないの?
194 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 17:48:55 ] Unix95とかUnix2003(OSXのあれ)とかと同類。 はっきりいって一番どうでもいい規格w
195 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 21:06:07 ] 仕様を手に入れやすいというメリットはあるね。
196 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 22:50:06 ] >>193 違うよ。
197 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 23:36:16 ] >>190 > Solarisに至っては内蔵コマンドなのにPATHによって挙動が変化するしね マジ? ちょっと信じられないんだけど。
198 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 23:39:35 ] >>179 > せっかくだからPOSIXと由緒正しいBourne shellの違いを上げてみる? 関数が内部コマンドより優先 > POSIX # [[ test式 ]] ってPOSIXだったかなあ…
199 名前:名無しさん@お腹いっぱい。 [2008/03/08(土) 01:38:57 ] >>163 ${parameter##word} ${parameter#word} ${parameter%%word} ${parameter%word}
200 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/08(土) 07:55:45 ] >>199 それはSolarisの/bin/sh でも使えない。よって例にならない。
201 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/08(土) 08:21:28 ] POSIXだからといって [[ ]] を使ったりすると *BSDユーザーが困るだろ。だからPOSIXを尺度にすることは事実上無理がある。
202 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/08(土) 10:54:49 ] [[ 〜 ]] はPOSIXじゃないのでその主張には無理がある。
203 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/08(土) 11:11:35 ] >>197 $ sh -c 'type echo; echo -n hoge' echo is a shell builtin -n hoge $ PATH="/usr/ucb:$PATH" sh -c 'type echo; echo -n hoge' echo is a shell builtin hoge (改行なし)
204 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/08(土) 12:07:28 ] じゃあ、kshって結構 POSIXとはかけ離れてるんだ。
205 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/08(土) 12:29:33 ] kshをフルに使って書いたものはPOSIX shで動かないという意味では。 kshにあってPOSIXで採用されなかったものとしては、select文もそうだね。
206 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/08(土) 12:42:50 ] 実際のスクリプトでは全く使われていないのに 参考出品のリファレンスみたいに /usr/xpg4/bin/sh を置いてるSolarisって一体、、、 しかも、/usr/xpg4/bin/shはPOSIXじゃないし、 /usr/xpg4/bin/shが新標準だとしても 未だに/usr/xpg4/bin/shで /bin/shを置き換える気配もないし、、
207 名前:X/Open mailto:sage [2008/03/08(土) 12:44:44 ] >>206 > しかも、/usr/xpg4/bin/shはPOSIXじゃないし、 ( ゚д゚)ポカーン
208 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/08(土) 12:54:38 ] >>207 >>196 ( >>193 )
209 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/08(土) 12:55:25 ] >>207 >>194
210 名前:X/Open mailto:sage [2008/03/08(土) 13:04:11 ] 違うのは当たり前だろ POSIXと違うとか 新標準とか アホかと思う
211 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/08(土) 13:06:00 ] /usr/xpg4/bin/shを置くなら、 なぜ /usr/posix/bin/sh を置かないのか、って話かな?
212 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/08(土) 13:06:30 ] その違うのをどうしましょうって話じゃないですか。
213 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/08(土) 13:22:56 ] XPG4準拠のが別途用意してあるのはいいことだ。 /bin/shと置き換えるとか、>>206 は意味不明すぎ。
214 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/08(土) 21:16:51 ] autotoolsの吐くconfigureで使われているか否か、は移植性の判定材料になるだろうか。
215 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/08(土) 21:37:59 ] BSDヲタが騒ぐからautoconfは控えることw
216 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/08(土) 21:43:42 ] Solarisの/usr/xpg4/bin/shも、HP-UX、AIXの/bin/shも実体はkshだっつうの。 で、kshはPOSIXに一応準拠している。というかPOSIXが後付でkshの仕様をパクっただけ。 ただし、仕様が曖昧なところが多いから、 POSIX志向が強いbashなんかとkshでも、結構挙動が違っているところがある。
217 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/08(土) 21:49:08 ] 実体一緒でもargv[0]が違えば挙動が違うでしょ。
218 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/13(木) 15:52:12 ] Solarisでは/usr/xpg4/bin/shとkshは別バイナリだぞ。嘘書くな。 ハードリンクもしてないし、当然argv[0]も見てない。cmp比較してから書けよ。
219 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/13(木) 16:29:01 ] ソースレベルでは99%同じだけどな。
220 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/14(金) 19:19:44 ] 指定フォルダ以下のファイル数を findを使って調べたいのです。 どなたかヘルプおながいします
221 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/14(金) 19:32:16 ] wc -l で行数を数えればいいんじゃねの
222 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/14(金) 19:45:19 ] フォルダって何ですか?
223 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/14(金) 22:03:10 ] >>222 > フォルダって何ですか? わろた
224 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/14(金) 22:11:38 ] >>222 素人さんにも通じるディレクトリの一般的な呼び方です。
225 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/14(金) 23:57:27 ] 質問です。 NETWORK |AAAA BBB CCCC |AAAA BBB CCCC AAAA |BBBB CCCC DDDD BBBB |UUUU DDDD FFFF このような5000行のテキストからヘッダー以外の最初のカラムを抜き出したいのですが ヘッダーと2行目の空白も抜き出してしまい、うまくいきません。 元のファイルをいじらず、うまくヘッダーを除いたカラムを抜き出せませんか? どうか教えていただけないでしょうか?
226 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 00:15:30 ] sed -n 's/^[^|]*|//p' | awk '{ print $1 }' sedは文字単位、awkはカラム単位と分担する
227 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 00:17:47 ] 「ヘッダーと2行目の空白も抜き出し」た後に、先頭の2行を削ればいいのでは。 うんたらかんたら | { read x; read x; cat; }
228 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 00:22:25 ] sed -ne '3,$p' | ...
229 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 04:59:25 ] ヘッダってのは一カラム目の事なのか? 下手な説明だなw
230 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 05:15:04 ] >>225 sed '1,2 d; s/|.*//' awk -F '|' 'NR > 2{ print $1 }' cut -d '|' -f 1 | tail +3
231 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 09:23:42 ] >>226 sedでできることはすべてawkでもできるんだから、 awkを使うならsedは使っちゃ駄目。 1個のawkでできるのにsedと分担するのはバッドデザイン。 今回の場合は結局sedだけでできるんだから、 >>230 が最良回答だな。
232 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 09:32:56 ] >>230 > sed '1,2 d; s/|.*//' できてないやんw
233 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 09:39:22 ] 俺は仕様がわからんのだが… 二行目以外にも1カラム目が空白の行があるんじゃないのか? それなら、 awk 'NR > 1 { if ($2 !~ /^\|/) print $1; }'
234 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 09:42:21 ] >>231 >>sedでできることはすべてawkでもできるんだから それは違う。 また、仮に出来ることでも 分担させることで、何をやっているのか明確になるなら無問題。 決してバッドデザインなどでは無い。
235 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 09:49:07 ] >>234 それは awkプログラムになれていない者の考え。
236 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 09:51:13 ] >>232 できてるだろ。
237 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 09:54:56 ] というか、>>226 の sedの部分、間違ってるやん。 1カラム目を逆に削除してるww sedすらロクに書けない者が「分担」ですかw 何をやっているのか明確になってるはずなのに、こんな明らかな間違いですかww
238 名前:名無しさん@お腹いっぱい。 [2008/03/15(土) 10:05:16 ] >>234 sed でできて awk でできないことってたとえば何?
239 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 10:52:44 ] >>237 おれは別に当人じゃないけど、 問題文を君とは違う解釈をしているだけで、 間違いではないと思う。 >>238 さあ?例えば出力の判定が遥か前方に有る場合とか?
240 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 10:59:45 ] >>235 なれていないの定義が良く解らんが、 シェルのラッパを被っただけのawkスクリプトを書くわけじゃなくて、 シェルスクリプトを書くためにはawkプログラムを知悉する必要は無いと思う。 当人がsedで書いた方が後でメンテをし易いと思うなら、 そうすべきと思うことを阻害する理由は何もない。
241 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 12:45:14 ] 一行野郎でどっちも使ってるけどそれぞれに良さはあるよ。 置換処理は sed の方が簡単に書ける。 カラム指向の処理は awk が便利。 ただ、sed の出力を awk に食わせるのは無駄が多いと思う。 たいていはどちらかだけで書けるだろうから。 俺はややこしくなってきたら perl とか ruby に逃げちゃうし。w シェルスクリプトで重要なのはメンテする人が分かりやすい事だと 思っているからこの考えを無理強いするつもりは無いけどな。
242 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 13:33:44 ] >>225 を良く読むと、>>233 が正解仕様のような気がするのだが…
243 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 14:43:31 ] awk -F"|" 'NR>1{print $1}'
244 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 14:47:46 ] それじゃ二行目の空白が出力される。 >>225 はデータに全角空白が含まれるから仕様が良くわからん。
245 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 23:11:58 ] 質問です。 二つのファイルがあります。 ファイルAには以下の内容。 ----------------------- aaa bbb ccc ddd eee fff ggg ----------------------- ファイルBには以下の内容がかいてあります。 ----------------------- bbb ccc ----------------------- ファイルAからファイルBの内容を除去したファイルCを作りたいのですが、 どのようにすればよいでしょうか? (ファイルAやファイルBの内容は、時々かわります。)
246 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 23:28:15 ] Bの各行が独立したパターンならgrep -f Bでよさそうだけど、 bbb ccc という塊で削除したいならそうもいかんよな。 diff -u A B | sed -n '1,/^@/d;/^-/s/^-//p' とか?
247 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 23:29:04 ] おっと ×grep -f B ○grep -vf B
248 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 23:31:32 ] >>245 ほれ、作ってやったよ。 #!/bin/sh cmd='cat fileA' while read str do cmd="$cmd | grep -v $str" done < fileB eval $cmd
249 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/15(土) 23:36:03 ] >>248 それだったら、grep -vf fileB fileA でいいじゃん。 >>247 がすでに答えてる。
250 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/16(日) 14:52:28 ] ファイルA,Bの並びが同じで、ファイルAにだけある行があるという場合は commが使える。
251 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 00:36:36 ] >>250 commって辞書順に並んでないと使えないよ。 たぶん、このケースはプログラムで一行づつチェックするしかないと思うんだ。
252 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 05:09:00 ] fgrepにした方が安全。-eも付けて。
253 名前:名無しさん@お腹いっぱい。 [2008/03/18(火) 10:25:45 ] solarisのシェルスクリプトで教えてください。 スクリプト内で自分自身が置かれているディレクトリの絶対パスを取得したいのですが上手くいきません。 $0にパスが格納されていると聞いて以下のコードをtest.shとして実行したのですが./testという結果しか返ってきません。 #!/bin/bash /bin/echo $0 どうすれば絶対パスを取得できますか?
254 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 10:28:28 ] >>253 pwd
255 名前:名無しさん@お腹いっぱい。 [2008/03/18(火) 10:39:20 ] >>254 できましたー! 本当にありがとうございます。
256 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 10:48:09 ] ( cd `dirname $0` && pwd ) が妥当では?
257 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 10:50:59 ] $0 書き替えて呼ばれたら無効だけどな。 www.nurs.or.jp/~asada/FAQ/UNIX/section4.4.html
258 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 11:08:19 ] >>255 >>254 は嘘回答だお。本当にありがたいかw スクリプトが置かれているディレクトリじゃなくて、 スクリプトを実行したディレクトリが表示されるだけ。
259 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 11:09:29 ] 回答っていうか、ヒントでしょ。 そのまま使うわけがない。
260 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 11:18:52 ] ヒントとしても質が低いな
261 名前:255 [2008/03/18(火) 11:26:10 ] すいません。 cronで動かしたら違うディレクトリを持ってきました。 どうすれば良いでしょうか。
262 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 11:38:23 ] >>261 だから言っただろ
263 名前:255 [2008/03/18(火) 11:44:49 ] >>262 迂闊でした。
264 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 11:50:16 ] その後のレスぜんぜん読んでないのな。
265 名前:255 [2008/03/18(火) 11:58:38 ] cd `dirname $0` && pwd でできました! 本当にありがとうございました。
266 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 12:11:02 ] 次はスペース付きパスでハマるわけだな
267 名前:255 [2008/03/18(火) 13:01:56 ] かさねがさねすいません。 cd `dirname $0` && pwd ↑ この結果、どうやれば変数に格納できますか?
268 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 13:46:23 ] >>267 ` ` のネスティングの問題だな。 hoge=`cd \`dirname $0\` && pwd`
269 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 13:49:00 ] 問題: >>268 を、スペースを含むPATHでも対応できるように書き直せ
270 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 13:59:14 ] hoge=$(cd "$(dirname $0)" && pwd) でお
271 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 14:06:30 ] >>270 不正解
272 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 14:13:19 ] >>271 なんで?
273 名前:255 [2008/03/18(火) 14:17:06 ] 今度こそ本当にできました! 皆さん本当に本当にありがとうございました。 >>269 わ、わかりません。 もっと勉強して出直します。
274 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 14:25:44 ] >>272 $0 自体がスペースを含んでたら駄目だろ。実験すれば一発。 あと、$( ) じゃなくてあくまで ` ` で書いて欲しいな。
275 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 14:35:18 ] >>274 > $0 自体がスペースを含んでたら駄目だろ。実験すれば一発。 気づかんかった。 > あと、$( ) じゃなくてあくまで ` ` で書いて欲しいな。 エスケープが多いと見にくくない?
276 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 16:27:40 ] $( )で問題なし
277 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 16:34:22 ] >>276 あるだろ。
278 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 16:35:58 ] ヒント:元質問者のOS
279 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 16:36:10 ] 最終的にカレントディレクトリもスペースを含むことを考えて、 hoge="`cd \"\\`dirname \\"$0\\"\\`\" && pwd`" かな? 手許に環境がないから、誰か実験してw
280 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 16:43:31 ] >>279 不正解
281 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 16:44:53 ] $(cmd)はPOSIX shellにはあるから問題ないだろ
282 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 16:46:24 ] >>277 どんな問題があるの?
283 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 16:57:56 ] NGワード推奨「P○SIX」
284 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 16:59:32 ] 回答してる奴に茶々入れる奴はうざいですねw
285 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 17:10:01 ] ろくな内容じゃないのにね。
286 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 17:36:34 ] >>280 そんなの見りゃわかる。 どうせ、書くならもっと有意義なことを書いてもらいたい。
287 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 17:37:38 ] 否定以外書いたらそこの浅さがバレルじゃない
288 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 18:00:26 ] >>286 見りゃわかるならお前が正解書けばいいじゃないか。 本当はわからなかったんだろ?
289 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 18:06:15 ] と威勢だけは大変よろしいのでした
290 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 18:16:52 ] hoge=$(cd "$(dirname "$0")" && pwd) dirname $0にスペースが含まれていてもok。
291 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 18:23:46 ] >>290 じゃあ、それを ` ` を使って書いた場合は?
292 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 18:25:01 ] 290ですが、なんか妙なタイミングで書いちゃったみたいねw 私は290が今日はじめてなので念のため。 Solarisということなので``でも書いときます。たぶんこれでいいはず。 hoge=`cd "\`dirname "$0"\`" && pwd`
293 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 18:26:46 ] >>292 正解
294 名前:名無しさん@お腹いっぱい。 [2008/03/18(火) 18:32:07 ] Bシェル教えてください。 次のようなシェルがあり、関数func1のコードは変更せず、かつ画面に"aaa"と表示させたいんです。 <Bシェル> func1(){ exit 1 } func1 echo "aaa" perlのevalみたいな制御ができれば嬉しいんですが、 Bシェルでこれを実現させる法ありませんか? <perl> eval{ func1; }; if($?){ … }
295 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 18:36:37 ] func1をサブシェルで実行。(func1)
296 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 18:36:59 ] ・シェルスクリプトのことをシェルってゆーな return 1
297 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 18:38:16 ] func1変更禁止かorz
298 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 19:34:19 ] func1(){ exit 1 } echo "aaa" func1 これで良いんじゃね?w
299 名前:294 mailto:sage [2008/03/18(火) 20:11:07 ] >>295 ありがとう。それでなんとかなりそう。 >>296 そうしたいのはやまやまなんですがね。 >>298 さすがにそれは無理。
300 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 20:17:01 ] 呼び方変えるくらいすぐできるでしょ。
301 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 20:35:30 ] >>295 で解決済。それ以外の回答はハズレ。
302 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 21:50:16 ] はいはい
303 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 22:07:59 ] シェルの入門書を見て↓のようなシェルを書きましたが動きません。 原因は何ですか? #!/bin/sh echo Hoge World
304 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 22:34:38 ] #!/bin/sh echo Hoge World
305 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 22:36:29 ] >>303 滑ってるよ
306 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 22:40:00 ] >>304 ええ、ですからそう書いたのですが、動かないんです、、
307 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 22:43:37 ] それOS windowsだよ
308 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/18(火) 22:49:50 ] >>303 コンパイラは何使いましたか? バージョンによって使えない命令があります。
309 名前:名無しさん@お腹いっぱい。 [2008/03/19(水) 02:06:49 ] >>303 えすぱーくますた chmod +x hoge.sh ./hoge.sh じっこーけんげんじゃね?
310 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 03:43:04 ] 全然違うなw
311 名前:名無しさん@お腹いっぱい。 [2008/03/19(水) 07:20:45 ] >>309 動きました ありがとうございました!
312 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 07:44:57 ] >>311 はにせもの。 >>309 それはすでにやってます。まだ動きません。
313 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 08:14:54 ] 「シェル」を書いてるんだから、それだけじゃ難しそうだな… シェルスクリプトだとすると echo の e が全角なのが気になるが実際は違うよな?
314 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 08:20:19 ] またシェル開発者ですね、わかります
315 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 08:39:01 ] そうです。開発に配属されたら、シェルを書けることが必須だったんです。 ちょっと焦ってます、、
316 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 08:41:15 ] 天然だw
317 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 13:02:17 ] 仕事でシェル書くの?
318 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 13:18:46 ] シェルスクリプトで引っかかってるようだと 開発部門でやっていくの大変じゃない?
319 名前:初心者 [2008/03/19(水) 14:36:50 ] すいませんシェルスクリプトで0から9を 横に0123456789 と表示したいのですが、数字を縦にしか表示できなくて。 どなたか教えてください。
320 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 14:38:59 ] >>319 for((i=0;i<=9;i++)){ echo -n $i;};echo
321 名前:初心者 [2008/03/19(水) 14:46:18 ] >>320 ありがとうございます。 for 変数 in リスト do 処理 done の形で書くことは出来るのでしょうか? たびたびすいません。
322 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 14:47:41 ] >>321 for i in 0 1 2 3 4 5 6 7 8 9;do echo -n $i;done;echo
323 名前:初心者 [2008/03/19(水) 14:58:57 ] ありがとうございました。 処理の部分で使われている -n はどういった意味なのですか?
324 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 15:04:07 ] これは醜い
325 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 15:06:41 ] seq -s "" 0 9
326 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 15:10:11 ] これは酷い初心者です
327 名前:初心者 [2008/03/19(水) 15:11:07 ] すいません。酷いのはわかってますが、本当はじめたばかりで。 でも、ちゃんと意味も理解していかないとと思いましたので・・
328 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 15:21:49 ] >>325 seq: command not found
329 名前:名無しさん@お腹いっぱい。 [2008/03/19(水) 15:26:38 ] あのー(汗 どうしてこんなむずかしいことが出来るの? すごいよ。君たちは。感心してます^^。ガンバってくださいね。
330 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 15:57:41 ] >>323 man echo
331 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 16:10:09 ] >>322 の実行結果 -n 0 -n 1 -n 2 -n 3 -n 4 -n 5 -n 6 -n 7 -n 8 -n 9 ??? なぜ?
332 名前:初心者 [2008/03/19(水) 16:10:44 ] >>330 ありがとうございました。 man コマンドを見るのを忘れてました。助かりました。
333 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 16:12:15 ] 問題: >>322 をOSに依存しないようにポータブルにせよ
334 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 16:15:05 ] printfを使えばよい
335 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 16:34:16 ] echo 0123456789
336 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 16:41:14 ] >>334 外部コマンドを使わずに >>335 論外
337 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 16:50:16 ] >>334 printfがないOSもある
338 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 16:53:48 ] printfがだめならこれでどうだ if [ "`echo -n`" = "-n" ]; then echon() { echo "$@\c"; } else echon() { echo -n "$@"; } fi for i in 0 1 2 3 4 5 6 7 8 9; do echon $i; done; echo
339 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 16:57:15 ] out=;for i in 0 1 2 3 4 5 6 7 8 9; do out=$out$i;done;echo $out
340 名前:名無しさん@お腹いっぱい。 [2008/03/19(水) 17:08:07 ] dateコマンドってミリ秒の取得できますか?
341 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 17:11:17 ] >>340 GNU dateなら +%N でできる。
342 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 17:11:22 ] 実装によるんじゃね
343 名前:名無しさん@お腹いっぱい。 [2008/03/19(水) 17:31:41 ] 当日の日付をミリ秒まで取得したいです。ミリ秒の精度としては 3桁でよいみたいです。
344 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 17:33:48 ] 人の話を聞かんやっちゃな。
345 名前:名無しさん@お腹いっぱい。 [2008/03/19(水) 17:35:27 ] 申し訳ないです。 date +%Nでできたので、実際にやりたいことを書いてみました。
346 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 17:40:06 ] m=`date +%N | head -c 3` date +'%Y年%m月%d日 %H:%M:%S.'"$m"
347 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 17:43:52 ] >>346 一旦変数に入れる意味ないやん。 date +'%Y年%m月%d日 %H:%M:%S.'`date +%N | head -c 3`
348 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 17:52:53 ] >>346-347 dateを2回起動してるのが無駄。 date +'%Y年%m月%d日 %H:%M:%S.%N'|head -c 27;echo
349 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 17:58:13 ] sed 's/......$//'
350 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 17:58:42 ] >>348 27文字で決め打ちしてると、年月日などの文字数が変わった時困る。 ↓の方がエレガント expr "`date +'%Y年%m月%d日 %H:%M:%S.%N'`" : '\(.*\....\)'
351 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 18:17:21 ] date +'%Y年%m月%d日 %H:%M:%S.%3N'
352 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 18:47:39 ] 文字列処理の話はいいから、date +%Nが使えないOSではどうするんだよ?
353 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 18:48:36 ] 泣き寝入りです。
354 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 20:18:36 ] GNU dateをインストールする
355 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 21:12:16 ] 000でごまかす
356 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 22:16:36 ] >>317 周りにtclsh改造して自前のシェル作る奴いるからなきにしもあらず #半導体業界のtcl好きは異常だと思う…
357 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 22:25:23 ] こんなプログラムを持ち運ぶ(精度はマイクロ秒だけど) #include <stdio.h> #include <sys/time.h> int main(int argc, char **argv) { struct timeval tv; if (gettimeofday(&tv, NULL)) perror("error!\n"); printf("%d\n", tv.tv_usec); return 0; }
358 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 22:32:57 ] >>356 そのためのツールだし。> TCL
359 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 22:35:19 ] >>357 持ち運ぶなら、持ち運びやすいようにショートコーディングに徹しなさい。 #include<sys/time.h> main(){struct timeval t;gettimeofday(&t,0);printf("%d\n",t.tv_usec);}
360 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 22:40:37 ] >>359 ショートコーディングというからには、#includeなんてしちゃ無駄だろ。 main(){int t[2];gettimeofday(t,0);printf("%0d\n",t[1]);} %dは%0dに直しておいた。桁揃えのため。
361 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 22:47:45 ] >>360 もっと短くなるよ。int宣言も無駄だね。 main(t){gettimeofday(&t,0);printf("%0d\n",1[&t]);}
362 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 22:50:27 ] >>360 桁揃えは %06d じゃないのか?
363 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 22:58:39 ] やべえ。こいつら正気じゃねえ。
364 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 23:04:37 ] 日頃古いshへの移植性で争ってるスレとは思えない
365 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 23:05:16 ] 改行はむしろ余計なのではないか?
366 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/19(水) 23:05:36 ] じゃあ、まとめるとこんな感じ? ↓ gccコンパイル込みでシェル関数にしたよ #!/bin/sh micro_sec() { echo 'main(t){gettimeofday(&t,0);printf("%06d\n",1[&t]);}'|gcc -xc - ./a.out; rm a.out } hoge=`micro_sec` echo $hoge
367 名前:名無しさん@お腹いっぱい。 [2008/03/20(木) 00:56:56 ] >>363 UNIX板は、やぱスゲーひといるよね まだまだすごいことができるのだと思いますが Cも知りたくなってきたw
368 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/20(木) 01:44:52 ] スゲーんじゃなくて悪乗りしてるだけだと思うが >>366 echo はいらんだろ?
369 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/20(木) 02:49:33 ] #!/usr/bin/tcc -run #include <sys/time.h> void main(void) { struct timeval tv; gettimeofday(&tv, NULL); printf("%.6d\n", tv.tv_usec); }
370 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/20(木) 04:21:02 ] >>321 $ for m in `jot 10 0`; do echo -n $m; done 0123456789 jotも知らんとは>>321 よ、なさけない。
371 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/20(木) 07:23:13 ] >>370 $ jot jot: command not found
372 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/20(木) 07:27:07 ] >>368 欲嫁。言いたいのはmicro_sec()の部分だけ。 下のechoとかはmicro_secの使い方の1例を挙げてるだけだろ。 直接表示なら micro_secを直接実行でいいし、 変数に入れたなら、変数に入っているという確認のためにechoしてるだけ。
373 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/20(木) 07:29:18 ] >>369 /usr/bin/tcc: command not found
374 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/20(木) 07:32:25 ] >>372 いや、そこではねくて
375 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/20(木) 07:37:35 ] >>374 シェル関数の中のechoは必要だろ。gccの標準入力に食わせるために。 echoなしでヒアドキュメント( << )でやる方法は 一時ファイルができるから美しくない。 ヒアドキュメントを使わずに、echoも使わない方法ってある?
376 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/20(木) 12:09:43 ] >>373 sudo aptitude install tcc
377 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/20(木) 12:26:21 ] >>376 sudo: command not found
378 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/20(木) 12:27:52 ] $ su Enter password: su: password incorecct. $
379 名前:名無しさん@お腹いっぱい。 [2008/03/20(木) 14:52:56 ] なんかbashでcを組んでしまう勢いだなww
380 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/20(木) 17:18:16 ] >>366 まあジョークだろうからどうでもいいが、 現在時刻をミリ秒単位の精度で得るために まずその場でコンパイルを始めるってどういう設計だwww
381 名前:名無しさん@お腹いっぱい。 [2008/03/20(木) 21:28:00 ] tcc ってARM?
382 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/21(金) 00:06:22 ] Tiny C Compiler fabrice.bellard.free.fr/tcc/ TinyCC mailing list mail.freesoftware.fsf.org/mailman/listinfo/tinycc-devel Ubuntu packages.ubuntu.com/gutsy/tcc Debian packages.debian.org/etch/tcc RPM fr2.rpmfind.net/linux/rpm2html/search.php?query=tcc TinyCC Changelog fabrice.bellard.free.fr/tcc/changelog.html version 0.9.21: - ARM target support
383 名前:あ [2008/03/21(金) 09:28:07 ] 文字列のaからzを for 変数 in リスト の形で表すにはどうしたらよいのでしょうか?
384 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/21(金) 10:12:32 ] $ for i in `seq 97 122`; do printf '\x'`echo "obase=16;$i" | bc`; done seqなければwhile + exprで
385 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/21(金) 10:42:58 ] >>383 for i in `perl -le 'print for a..z'`; do echo $i; done
386 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/21(金) 10:49:30 ] >>384-385 という冗談はさておき、シェルスクリプトとしてやるにはどうしたらよいのでしょうか?
387 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/21(金) 10:52:03 ] bashなら for i in {a..z}; do echo $i; done
388 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/21(金) 10:55:41 ] >>386 シェルスクリプトだろ。冗談はよせよ。
389 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/21(金) 10:57:05 ] まあ、perl使うのは反則だわな
390 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/21(金) 11:00:08 ] for i in a b c d e f g h i j k l m n o p q r s t u v w x y z
391 名前:名無しさん@お腹いっぱい。 [2008/03/21(金) 11:02:45 ] >>387 動くのか?
392 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/21(金) 11:03:07 ] ボーンなら、 for i in `bash -c 'echo {a..z}'`; do echo $i; done
393 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/21(金) 11:04:04 ] >>391 動くだろ。bash3以降だけどな。
394 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/21(金) 11:07:09 ] つーか元の要求がよくわからん。
395 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/21(金) 11:17:07 ] どれも>>390 これとそれほどタイプ数がかわらないという
396 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/21(金) 11:32:31 ] yes ''|cat -n|head -122|tail -26|while read i; do printf "%o¥n" $i;done|while read o;do printf "¥¥$o¥n";done すごく無駄なことをやった気がする。
397 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/21(金) 11:37:14 ] for i in \ `echo 'main(c){for(c=97;c<123;c++)printf("%c ",c);}'|gcc -xc -;./a.out;rm a.out` do echo $i done
398 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/21(金) 11:44:50 ] IOCCCみたいになってきたな
399 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/21(金) 12:25:20 ] IOSSC International Obfuscated Shell Script Contest
400 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/21(金) 14:19:42 ] むしろIntranational
401 名前:名無しさん@お腹いっぱい。 [2008/03/23(日) 04:35:19 ] すんまそ date を使って 20080322123456 年月日時分秒の書式でファイルを作りたい cmd 1 10000 第1引数 +n秒 (-1なら引く) 第2引数 第1引数を行ってm回繰り返す。 while (n<$2) do touch `date '+ expr $a'` a=a+$1 done みたいなことをしたいですが、どうすれば良いですか?
402 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/23(日) 05:13:42 ] 誰か翻訳頼む
403 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/23(日) 08:39:07 ] >>401 できたよ ↓ #!/bin/sh n=$1 i=1 while [ "$i" -le "$2" ]; do date +%Y%m%d%H%M%S -d "$n second" n=`expr "$n" + "$1"` i=`expr "$i" + 1` done ただし、GNU date必須。 補足: >>402 わからないなら黙ってろ
404 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/23(日) 08:41:55 ] >>403 で動作(表示)確認してから、 date +%Y%m%d%H%M%S -d "$n second" を touch `date +%Y%m%d%H%M%S -d "$n second"` に直すとファイルが作れる。
405 名前:401 [2008/03/25(火) 01:16:11 ] ありがと あしたやってみる。 感謝です。
406 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/25(火) 23:05:33 ] GNU date必須なんて答で、恥ずかしくないの?
407 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/25(火) 23:20:15 ] >>406 じゃ、お前、GNU date使わないバージョンの回答しろよな。
408 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/25(火) 23:58:42 ] 恥ずかしいなら黙ってればいいのに。
409 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/26(水) 09:43:59 ] >>406 そんなコト言い出したらきりがない。 相手の環境が分かっていて、そこに GNU date が無いなら酷いが 質問者はそんな情報出した? # なかったとしても「ぢゃGNU date 入れよ」ってなるかもシランがそれは知らん。
410 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/26(水) 09:59:39 ] >>406 not speak, write scripts.
411 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/26(水) 11:00:39 ] GNU date使わずにポータブルにやるなら、 awkあたり使った方がいい。 date +%Y%m%d%H%M%S -d "$n second" を、 awk 'BEGIN{print strftime("%Y%m%d%H%M%S", systime()+'$n')}' に書き直す。 >>406 答えられないなら黙ってろ。
412 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/26(水) 11:37:03 ] >>411 それ、GNU awk必須だろw
413 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/26(水) 12:13:04 ] 2chで他人に黙ってろとかいう奴にろくな奴はいない。
414 名前:名無しさん@お腹いっぱい。 [2008/03/26(水) 12:36:48 ] ひとつの解を出す分だけ、貴殿よりマシだと思う
415 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/26(水) 12:51:58 ] 自分で設定した「ポータブルにやるなら」という問題に対して 出したものがポータブルじゃないのに解を出したことになるのだろうか。
416 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/26(水) 14:23:46 ] まぁ>>406 よりは随分マシw
417 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/26(水) 14:51:14 ] これでどうだ。ポータブルだろw #!/bin/sh my_date() { echo 'main(t,b){t=time(0)+'$1';strftime(&b,16,"%Y%m%d%H%M%S\n",localtime(&t));printf(&b);}' | gcc -xc - 2>/dev/null ./a.out; rm a.out } n=$1 i=1 while [ "$i" -le "$2" ]; do my_date "$n" n=`expr "$n" + "$1"` i=`expr "$i" + 1` done
418 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/26(水) 14:56:56 ] おしいな。 gccのところがccなら。
419 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/26(水) 15:01:06 ] >>418 ccにすると、「language optional software package not installed」って出て 動かないOSがあるから、gccの方がポータブル。 ~
420 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/26(水) 16:48:33 ] strftimeのない昔のUNIXは切り捨て?
421 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/26(水) 16:55:18 ] strftime()使わずに、struct tmの中身を直接printf()すればいいかな。
422 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/26(水) 17:27:15 ] コード長くなっちゃうなぁ。 テストしやすいように、$1 $2 はデフォルトを入れるようにしておいた。 #!/bin/sh my_date() { echo ' #include <time.h> main(){struct tm *t;int i;i=time(0)+'$1';t=localtime(&i); printf("%04d%02d%02d%02d%02d%02d\n", t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);} ' | gcc -xc - 2>/dev/null ./a.out; rm a.out } set ${1-5} ${2-3} n=$1 i=1 while [ "$i" -le "$2" ]; do my_date "$n" n=`expr "$n" + "$1"` i=`expr "$i" + 1` done
423 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/26(水) 17:47:31 ] ネタひっぱりすぎ
424 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/28(金) 00:31:20 ] 日付関係はperlでやらないか。結構古くても入ってるでしょ、perl。
425 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/28(金) 03:21:18 ] 誰かshell scriptでDateTimeライブラリ書け。
426 名前:401 [2008/03/28(金) 05:18:13 ] できました。 ありがとう。 ひっぱって悪いですが>401の内容で 20080322123456FreeBSD 20080322123456NetBSD 20080322123456OpenBSD のように第3引数を「FreeBSD」のようにしてファイル名に付けたい です。 自分でやってみましたが touch `date +%Y%m%d%H%M%S -d "$n second" `$3 とか d=date +%Y%m%d%H%M%S -d "$n second" f=$d$3 touch `echo $f` としますが invalid argumentなど出ます。 この場合は、どうしたらいいですか。 gnu dateですた
427 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/28(金) 06:54:01 ] >>426 > touch `date +%Y%m%d%H%M%S -d "$n second" `$3 ここで date がエラーを吐いているのなら n に値を代入し忘れている可能性が高い。 まず $n の値を確認しろ。
428 名前:401 [2008/03/28(金) 07:10:23 ] すみません。 家で、今確認しました。 >>426で touch `date +%Y%m%d%H%M%S -d "$n second" `$3 と書きましたが。 touch `date +%Y%m%d%H%M%S -d "$n second" $3` のようにしてエラーが出ていました。 $3の前後に「`」を移動する いま、>>426のようにしたら意図通りできました。 会社でもやってみます。 すんませーーーん
429 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/28(金) 08:12:00 ] ここに来てる人、OSはUNIXだよね? (FreeBSDとかSolarisとか) GNU dateって、わざわざインストールしてるの? まさか犬じゃないよね?
430 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/28(金) 09:45:54 ] してる。 GNU testも、gwakも。 犬がどうしたとかそんな馬鹿な偏見はないから。
431 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/28(金) 11:59:03 ] >>429 FreeBSDはUNIXなの?
432 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/28(金) 12:25:21 ] FreeBSD=unixで良いじゃん。 別に定義の話をしてるわけじゃなし。
433 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/28(金) 12:33:51 ] FreeBSDをUNIXに含めるんであれば Linuxを含めない理由ないでしょ。
434 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/28(金) 12:55:21 ] LinuxはLinux板という専用の隔離板があるので、 そちらに行けば良いと思います。
435 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/28(金) 13:36:03 ] そうなればそうなるわな
436 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/28(金) 15:15:13 ] UNIX でも通用するポータブルなスクリプトを知りたいならここだと思ってた。
437 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/28(金) 15:43:48 ] じゃあ GNU date使っちゃ駄目じゃん。
438 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 02:50:31 ] AIX4ばっかりの仕事の俺に愛の手を!GNU系でもインストールなんて許されてねぇ
439 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 04:06:52 ] Cもだめってこと?
440 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 10:57:42 ] --prefix=$HOMEで入れちまえ、とかなんとか。 でもコンパイラも入ってなかったりするのさ。
441 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 11:19:10 ] というわけでGNU date必須の回答を出して悦に入るのは恥知らず。
442 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 11:19:14 ] だったらいまあるものでなんとかすればいいじゃない
443 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 11:21:33 ] 今回の場合、GNU以外のdateでは不可能。
444 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 13:18:57 ] dateというファイル名でperlで組めばお題は満足する。 安易に不可能とか言い切って恥ずかしくないの?
445 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 13:30:29 ] 一時、awkが有料のUNIXあったよな。
446 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 13:33:30 ] >>444 perlを使ったらシェルスクリプトじゃない。 perlが非標準のUNIXもある。
447 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 13:36:23 ] perlが入っていればそれでいいけどねー
448 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 13:45:27 ] >>446 おまえの脳内定義の「シェルスクリプト」で使用可能なコマンドを列挙しろ。 そしてそれ以外は認めないというスレを立ててそっちに行け。
449 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 13:52:40 ] >>444 じゃあ、perl使ってGNU dateそっくりのスクリプト書いてみろよ。 どうせそれもできないのに知ったかで言ってるんだろ。
450 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 13:53:09 ] まあ当該質問の環境でperlが使えるかは未知数だから…
451 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 14:07:54 ] autoconfが生成するconfigureって移植性は相当意識してるらしいね。 autoconfの本(紙の)読んだらいろいろクドクドかいてあった。
452 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 14:08:44 ] GNU dateの互換である必要は全く無い。 こんな単純な事に気付かなくて恥ずかしくないの?
453 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 14:17:19 ] 問題はそこじゃないから
454 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 14:30:54 ] うん、 > GNU date必須の回答を出して悦に入るのは恥知らず。 これに尽きるね。
455 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 15:03:37 ] >>452 GNU dateの互換である必要ないから、 回答例を1例でも挙げてみろよ。まだ1例も挙げてないじゃないか。 やっぱり知ったかなんだろ?
456 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 15:41:56 ] 別解を提示する事と > GNU date必須の回答を出して悦に入るのは恥知らず。 は、独立という事に気付かないって恥ずかしくないの?
457 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 16:00:12 ] なんだ、やっぱり解答できないんだ。
458 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 16:49:25 ] 恥の上塗りしないで引っ込んでりゃいいのに。
459 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 18:30:19 ] GNU date が優秀なのは分かったから それを使わないポータブルでエレガントな別解プリーズ
460 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 18:54:53 ] Perlだとこうか($nに秒単位の差分をいれてね) perl -MPOSIX -le "print POSIX::strftime(q{%Y%m%d%H%M%S}, localtime($n+time))" これは未検証だがどうだろうか date -r $(expr $(date +%s) + $n) +%Y%m%d%H%M%S
461 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 18:58:27 ] POSIX dateには-uしかなかったからこれはポータブルじゃないね 次の人お願い
462 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 19:13:48 ] 彼によるとGNU date以外の回答はシェルスクリプトじゃ無くなるようですよ。 何しろそれ以外の解は存在しないらしいですから。
463 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 19:14:47 ] >>462 糞粘着しねよ
464 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 19:41:47 ] ようやく恥というものがわかったのか?
465 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 21:11:30 ] 正直dateとかどうでもいいよw いつまで続けんのw
466 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 21:50:26 ] もうテンプレにLinux禁止、GNUコマンド禁止って入れとけよ
467 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 22:04:49 ] じゃあ、perlもGNUモノだから禁止ですね。
468 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 22:13:41 ] >>467 ?
469 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 22:14:53 ] 恥ずかしいなら黙ってればいいのに。
470 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 22:16:35 ] perlはGPLであってGNUじゃないでしょ? # Artistic Licenseも選択できる。
471 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 22:24:54 ] perlはもともとスレ違いだから禁止。 ときどき空気読まずにperlでの解答する香具師居るが、単にスレ違いが見過ごされているだけ。
472 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 23:27:53 ] 質問者の環境で動けばそれでいいじゃない。
473 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 23:30:34 ] >>445 BSD拡張が有料だった時代もあったなあ。
474 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 23:37:41 ] >>439 Cもダメ。C必須のアプリを入れるならOKだけれど!かなしい!
475 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 23:40:00 ] >>472 そうだね
476 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/29(土) 23:43:06 ] >>474 つ ハンドコンパイル
477 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/30(日) 00:10:24 ] >>476 それだ! よく考えたら、適当な環境でクロスコンパイルすればいいのか
478 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/30(日) 00:11:22 ] 風紀委員がうるさいから禁止事項にはしないほうが良い。
479 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/30(日) 00:41:27 ] 質問者の環境で動けばどうでもいいよ
480 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/30(日) 03:56:12 ] 既に遠い過去の>>428 で解決しててな
481 名前:名無しさん@お腹いっぱい。 [2008/03/30(日) 03:58:09 ] >>441 くだらん事書いて、刺された方が切れたんだろ? おまえ、第三者から見て、評論家だけで役にたって無い気がするぞ。 空気悪くなってんだから、少し考えてはどうですか?
482 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/30(日) 09:01:53 ] 恥ずかしいなら黙ってればいいのに。 > 自称被害者
483 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/30(日) 19:01:21 ] 自覚なしに恥の上塗りをするのは勝手
484 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/30(日) 20:43:35 ] svn help|sed -n '/^ \([a-z]\+\) \?.*/{s//\1/p}' の出力をリストとして処理するんですが 改行をデリミタとして分解すると分解後のリストの中に""のような空の要素ができてしまいます echoの-nオプションのように最終行の改行を出力しないようにする方法を教えてください 現在は分解する前に部分文字列を作る関数でsubstring(0, str.length())のようにして取り除いてます
485 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/30(日) 21:22:52 ] >>484 コマンド置換で一旦変数に取り込めば最後の改行はカットされるけどな。 変数の値を参照する時も echo -n で参照。 hoge=`svn help|sed -n '/^ \([a-z]\+\) \?.*/{s//\1/p}'` echo -n "$hoge"
486 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/30(日) 21:53:57 ] どうもありがとうございました なんかのソースに付いてるようなスクリプトでわざわざ代入しているのにはこういう理由もあったんですね
487 名前:名無しさん@お腹いっぱい。 [2008/03/31(月) 02:16:54 ] とりあえず正常化 仕切り直していきましょう
488 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 03:17:20 ] Mysqlバックアップ処理や別サーバへのFTP通信等を 行いたいのですが、 mysqldump -u root -p password のようなコマンドを打つとpsなどで パスワードがローカルユーザーに漏れる可能性があるかと思います。 何か良い隠ぺい策ってないでしょうか?
489 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 03:21:23 ] expectスクリプト
490 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 04:11:10 ] expect以外のよい方法ってないでしょうか? パスワード遮蔽のみのために expectを用いるのは結構つらいと感じましたので。。。。 すいません。。。。
491 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 06:29:31 ] 原則としてコマンドライン引数にパスワードを直接書くのはダメ。 mysqldumpの仕様によるのでここではなくMySQLのスレ(データベース板?)できくべきだが ・パスワードをファイルに保存してそれを引数に与える ・コマンドが読む設定ファイルにパスワードを書く ・環境変数でパスワードを与える などコマンドラインで暴露しない方法が必ずある筈。調べてみて。
492 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 07:03:12 ] 正常化したかと思ったらスレ違いネタ,,
493 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 08:14:21 ] >>490 バックアップ専用のユーザを作って、そのユーザで実行すれば他のユーザからは隠蔽される。 他のユーザから見えてしまうような環境なら、別マシンで実行すべし。
494 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 08:19:50 ] はぁ?
495 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 10:21:08 ] > ・環境変数でパスワードを与える 嘘を教えないように。
496 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 10:29:56 ] おそらく、環境変数をコマンドラインで展開せずに、 実行コマンドが直接 getenv()とかで環境変数を読めば問題ないと 勘違いしたんだろうが、環境変数にパスワードを設定するのは論外。 ps e すれば環境変数の内容は丸見え。
497 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 10:33:59 ] >>495 嘘じゃなくて推測でしょ。
498 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 10:51:36 ] うそ【嘘】 2 正しくないこと。誤り。
499 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 10:52:41 ] 正しい方法知ってるなら教えてあげたら?
500 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 11:07:28 ] お前自分で書いてるだろ。 > mysqldumpの仕様によるのでここではなくMySQLのスレ(データベース板?)できくべきだが このスレでは、コマンドラインで暴露しない方法として「環境変数でパスワード渡す」は真っ赤な嘘。 という事を指摘すればよい。 お前、プライド(ぷぷっ)に実力が追いついてないぞ。
501 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 11:21:38 ] APOPみたいにチャレンジからMD5で計算して渡すように 仕様変更すればいいんだよw
502 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 11:29:22 ] 引数に渡すときに? いずれにせよ、どこかで生パスワードが必要じゃん。
503 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 11:41:46 ] >>502 だからAPOPみたいにって言ってるだろ。 APOPの結果を引数に付けて丸見えになっても無問題。
504 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 11:50:52 ] そのAPOPの結果を求めるコマンドにはどうやってパスワードを...
505 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 11:54:44 ] 環境変数で渡すんだよ!
506 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 11:59:34 ] 最初のコマンドはexpectスクリプト使えば(以下無限ループ
507 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 12:04:33 ] >>504 結果を求めるコマンドが、別ファイルからパスワードを読めばいいだけ。 頭使えw
508 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 12:18:34 ] >>507 つまらんな。仕様変更するならパスワード不要の方法に変更しろ。
509 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 12:24:29 ] というか、仕様変更するなら最初からファイルからパスワードを読むように 仕様変更すればいいだけ
510 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 12:35:12 ] expectが大きすぎるならttyrec/ttyplayだね。 本人登場しないし、この話題はもういいんじゃない?
511 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 13:27:19 ] >>510 ttyrec/ttyplayでどうやるの?
512 名前:510 mailto:sage [2008/03/31(月) 14:04:25 ] そこまでやるのはスレ違いだからマニュアル読んで。
513 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 14:10:20 ] >>512 man ttyrec 読んだけど >>488 に使えそうな機能見あたらないよ。 どの辺に書いてあるの?
514 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 14:12:46 ] 見つけられないなら仕方ないですねw
515 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 14:35:22 ] >>496 君の使ってるOSだとpsで他ユーザのプロセスも環境変数が見えるの? 見えるとしたらそれ、脆弱性だから。 Solarisでもパッチ出てるだろ。
516 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 14:53:58 ] MySQL 6.0の公式リファレンスでは (5.5.6. Keeping Your Password Secure dev.mysql.com/doc/refman/6.0/en/password-security.html ) -pオプションはインセキュアであるとして、セキュアな方法として * Store your password in an option file. * Store your password in the MYSQL_PWD environment variable. を挙げてるな。 環境変数が問題だというならMySQLの公式リファレンスも直させなきゃな。 まあ、頑張れw
517 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 14:57:01 ] 裏も取らずにテキトーなこと言うやつが多過ぎるな。
518 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 15:33:42 ] Solarisのはこれか。 sunsolve.sun.com/search/document.do?assetkey=1-26-102215-1 Solution Type Sun Alert Solution 200448 : Security Vulnerability With The "/usr/ucb/ps" Command Impact A security vulnerability in the "/usr/ucb/ps" (see ps(1B)) command may allow unprivileged local users the ability to see environment variables and their values for processes which belong to other users.
519 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 16:35:03 ] >>517 そりゃ、不適当なこと言っちゃダメだろ
520 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 21:49:36 ] security.bsd.see_other_uids=0 で良いのでは無いか? 他のOSの事は知らないけど。
521 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/31(月) 22:12:21 ] >>516 おいおい、自分の厨房っぷりを隠そうと嘘を嘘で上塗するのか? 続きに「極端にインセキュアと考えなければならなくて、使用すべきでない」と 書いてあるじゃないか。 それとも本物の中学生か? 英語読めるようになってから出直しておいで。 Section 4.2.2.2, 懼Using Option Files懼, discusses option files in more detail. Store your password in the MYSQL_PWD environment variable. This method of specifying your MySQL password must be considered extremely insecure and should not be used. Some versions of ps include an option to display the environment of running processes. If you set MYSQL_PWD, your password is exposed to any other user who runs ps. Even on systems without such a version of ps, it is unwise to assume that there are no other methods by which users can examine process environments. See Section 2.14, 懼Environment Variables懼.
522 名前:名無しさん@お腹いっぱい。 [2008/03/31(月) 23:48:17 ] 文字化けしてるな。>>516 はさすがに逃亡だろうな。だから恥ずかしいなら黙っていろと... 環境変数でパスワード渡していいのは小学生までという結論でいいか? dev.mysql.com/doc/refman/6.0/en/password-security.html Store your password in the MYSQL_PWD environment variable. This method of specifying your MySQL password must be considered extremely insecure and should not be used. Some versions of ps include an option to display the environment of running processes. If you set MYSQL_PWD, your password is exposed to any other user who runs ps. Even on systems without such a version of ps, it is unwise to assume that there are no other methods by which users can examine process environments. See Section 2.14, "Environment Variables".
523 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 00:14:26 ] mysql*についてはmy.cnfに書いとけ、そして600にしとけ、でいいんでは?
524 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 00:31:31 ] psで環境変数が他人にばれるOSってどれ?
525 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 00:51:39 ] >>524 KKCに匹敵する恥晒しといてまだ粘着してるの? 恥ずかしいなら黙っていればいいのに。 > Even on systems without such a version of ps, it is unwise to assume that there are > no other methods by which users can examine process environments. たとえ、そのようなpsが無いシステム上でも、ユーザーがプロセスの環境変数を調べる他の方法が 無いと仮定するのは賢くありません。
526 名前:488 mailto:sage [2008/04/01(火) 02:06:50 ] ・パスワードをファイルに保存してそれを引数に与える とのことですが、 password.txt にpasswordを入力して mysqldump -u root -p < password.txt をしてみましたが、うまく動きませんでした。 なんとなくリダイレクト(の逆?)の使い方を間違っている気はします。 特にmysqldumpに限らず、 -pオプションが使えるその他のコマンドなどでも 共通で使えるセキュアな方法を取りたいのですが、 具体的にどんな記述にすればよかとでしょうか?
527 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 04:02:15 ] つ >>523
528 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 07:27:08 ] >>524 >>518 が言ってる通りSolarisだろな。patchも割りと最近のものだし。 そう頻繁にpatch当てられない環境とか、あえて古いバージョンのまま使わなければ ならない環境とかありそうだし、古いpsは結構残っているのでは。
529 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 07:36:05 ] ucbにあるやつでは一番使うコマンドだな。
530 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 10:02:05 ] >>526 通常、パスワードは/dev/ttyをオープンしてそこから読むので、リダイレクトしても駄目。 他のコマンドでも共通で使えるセキュアな方法はexpect(もしくはそれに類する、擬似端末 から流し込める)コマンド。 >>528 自称セキュリティ研究者の厨房が騒ぎ立てるまでは、環境変数が読めるのが仕様だった。 今でも*BSDは厨房の戯言として相手にしていない。 こんな基本的なことも知らないのが複数人いるはず無いので、自演の可能性9割だな。 自演までして恥ずかしくないの? しかもpsだけの問題じゃないという事も指摘されてるのに、恥ずかしいなら引っ込んでなよ。
531 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 13:05:06 ] >>530 つ >>523 すでに別の最適解が示されてるのに、話戻して expectはないだろw 流れ欲嫁。
532 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 13:14:32 ] >>530 FreeBSDでは ps e で、自分以外のプロセスの環境変数は表示しないようになってるよ。 嘘書くんじゃない。
533 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 13:15:56 ] >>531 恥ずかしいなら黙ってればいいのに。 my.cnfはその他のコマンドで共通に使えるのか? >>526 > -pオプションが使えるその他のコマンドなどでも > 共通で使えるセキュアな方法を取りたいのですが、
534 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 13:17:32 ] >>533 >>490 >expect以外のよい方法ってないでしょうか?
535 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 13:42:07 ] FreeBSDのpsが自分以外の環境変数を表示してたのは前世紀の話。変更は1999年。
536 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 14:07:07 ] 「恥ずかしいなら引っ込んでなよ」が口癖の >>530 氏の発言録: (ps が他人のプロセスの環境変数を表示してしまう問題について) >自称セキュリティ研究者の厨房が騒ぎ立てるまでは、環境変数が読めるのが仕様だった。 >今でも*BSDは厨房の戯言として相手にしていない。 要約すると、 「*BSDでは、psで他人のプロセスの環境変数を表示できても、それは仕様であって それを問題視するのは自称セキュリティ研究者の戯言。 今でも*BSDではpsで他人のプロセスの環境変数を表示できる」 恥ずかしいですかwww
537 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 14:13:09 ] >>530 は取り下げよう。俺は恥は知っているからな。
538 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 14:26:28 ] >>536 この人にとっての今はだいたい10年前と思うと辻褄が合う気がする。 >>537 > psだけの問題じゃない も取り下げということでいいのか? psのsetuidを落とすのがworkaroundということは普通に考えれば ps固有の問題ということになると思うのだが。 違うなら違うでいいので具体例を出すなりして立証してくれ。 まさか引用した箇所にそう書いてあるからそうなんだとか言わんよな。
539 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 14:30:05 ] psがsetuidで動作していたのっていつの時代? それも10年前かw
540 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 14:55:01 ] 平ユーザが ps e で他ユーザの環境変数が見えない OS でも、 実行したのが root なのであれば見えるでしょ。 別ホストで動いている mysql に接続しようとしていて、 そのホストの root がその mysql の権限を持ってないのであれば、 mysql のパスワードは root に知られちゃマズいわけで、 やっぱり環境変数でパスワードを渡すのはよろしくない。 もっとも、それをいったら chmod 600 my.cnf も同じだけどな。
541 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 14:58:03 ] >>538 > psだけの問題じゃない これはmysqlが言っていること、 www.google.com/codesearch?q=%2Fdev%2Fkmem&hl=en&btnG=Search+Code これらが安全だと示してくれればオレは取り下げる。もしくは「環境変数は安全」という仕様でもよい。
542 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 15:02:51 ] >>541 > オレは取り下げる というのは「オレが(も)主張する」が前提だよな。当然その立証が先。
543 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 15:05:17 ] 途中で送ってしまった。 >>541 > オレは取り下げる というのは「オレが(も)主張する」が前提だよな。当然その立証が先。 それができなきゃ取り下げざるを得ないのであって、安全だと示してくれれば などと条件をつけられる立場ではない。
544 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 18:32:47 ] >>543 話そらすなよ。 名無しのお前が環境変数は安全だと主張している。 mysqlの公式ドキュメントは安全だと考えていない。 権威の無いお前が安全だと立証しろ。
545 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/01(火) 23:15:20 ] >>540 rootが信用できないマシンに重要な情報を置くな。 (環境変数以前の問題でしょ?)
546 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 01:32:52 ] >>539 かなり昔前からkmemグループによる管理だぞ。 もう20年近く立っているはず。 最近/procがいい加減なことが多いが。
547 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 06:59:36 ] >>546 psがkmemグループ(setgid)で動作していたのっていつの時代? それも10年前かw
548 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 08:12:22 ] >>544 自分で証明できないものだから権威とやらに頼るとは、まさしくこれだな >>538 > まさか引用した箇所にそう書いてあるからそうなんだとか言わんよな。 話をそらしているというか露骨に逃げてるのは君の方だ。 この議論において根拠を提示できないなら意味がない。 恥を知っているというのは口先だけだったな。
549 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 11:12:51 ] >>548 多くの人がレビューした文書と、名無しのお前の主張じゃぶっちぎりでお前のほうが信憑性が低い。 お前が立証しろ。当たり前だ。
550 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 13:16:10 ] 議論というのは発言者が誰であれ根拠に基づいて行うのが当たり前。 勝負あったな。
551 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 13:33:58 ] つか本人が言ってたよね。 > 自称セキュリティ研究者の厨房が騒ぎ立てるまでは、環境変数が読めるのが仕様だった。 それが脆弱性としてアドバイザリまで出されてるってことは 今(10年前ではないw)は他人の環境変数は読めないのが仕様ってことでしょ。 違うというなら仕様として他人の環境変数読めるものを出してみろと。
552 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 13:36:36 ] psに限らず、が抜けてた。
553 名前:名無しさん@お腹いっぱい。 [2008/04/02(水) 15:17:59 ] 質問があります。 shまたは、bashで、makeのように、 2つのファイルを比較して、新しいファイルが生成されている 時だけ処理をしたいのですが、shellへの理解が足りない ためにうまく動かないので、教えてもらえると助かります。 こんな感じです。 do_iconv(){ echo "mv ${i} ${i}.old" echo "iconv -f euc-jp -t utf-8 < ${i}.old > ${i}" } for i in *.html if [ -e ${i}.old ] then if [[ ${i} -nt ${i}.old ]] then do_iconv fi else do_iconv fi done
554 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 15:31:28 ] >>553 > echo "iconv -f euc-jp -t utf-8 < ${i}.old > ${i}" した時点で、${i}の方が常に${i}.oldより新しくなるじゃないか。 本当は何がしたいんだ?
555 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 15:53:19 ] >>554 それより前に if [[ ${i} -nt ${i}.old ]] で比較してるだろ。 わからないなら黙ってろ。
556 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 15:54:56 ] >>553 for i in *.html の次の行に do が抜けてる。
557 名前:553 mailto:sage [2008/04/02(水) 15:55:02 ] >> 554 本当は、上記に書いてますがシェルスクリプトでmake みたいなことがしたいです。 ちなみに、 >> echo "iconv -f euc-jp -t utf-8 < ${i}.old > ${i}" >した時点で、${i}の方が常に${i}.oldより新しくなるじゃないか。 で、ハッとして touch ${i}.old をiconvの後にしてみましたが 変わりません。 $ ls -la --time=ctime *.html -rw-r--r-- 1 foo bar 5388 2008-04-02 14:23 SandBox.html -rw-r--r-- 1 foo bar 4323 2008-04-02 14:06 Travel.html $ ls -la --time=ctime *.old -rw-r--r-- 1 foo bar 5374 2008-04-02 14:06 SandBox.html.old -rw-r--r-- 1 foo bar 3334 2008-04-02 14:06 Travel.html.old のようなときに、SandBox.htmlだけ iconv 処理をしたいのです。
558 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 15:56:54 ] >>553 とりあえずforにはdoつけろな。
559 名前:553 [2008/04/02(水) 15:58:24 ] >> 556 御指摘ども、本当のスクリプトには入れてます。 いまは要点だけ抜き出すと、下記のような感じにしています。 do_iconv(){ echo "mv ${i} ${i}.old" echo "iconv -f euc-jp -t utf-8 < ${i}.old > ${i}" echo "touch ${i}.old" } for i in *.html do if [ -e ${i}.old ] then if [[ ${i} -nt ${i}.old ]] then do_iconv fi else do_iconv fi done
560 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:01:10 ] >>557 おい、--time=ctime かよ。mtimeじゃなくて。 シェルの[[ ]] の -nt では、ctimeでの比較はできない。 mtimeのみ。 本当にctimeでやりたいんなら無理。
561 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:06:09 ] えっと、次は、 > うまく動かない の中身プリーズ。
562 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:06:49 ] >>561 >>560
563 名前:553 mailto:sage [2008/04/02(水) 16:22:10 ] >> 561 うまくいかないの、ココロは、意図は、SandBox.htmlだけ iconv したい のですが、プログラムは SandBox.html および Travel.html の 両方を iconv しようとします。 >> 560 ctimeはダメですか。リダイレクトでファイルを作るから、ctimeでないと ファイルの作成時刻を比較できないと思ってました。がーん、他の方法 を考えなくては
564 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:24:32 ] makeを使えばいいんじゃないか?
565 名前:553 mailto:sage [2008/04/02(水) 16:27:05 ] >> 564 はい。makeを使うことを考えます。 ありがとうございました>みなさん
566 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:31:00 ] >>564-565 アフォか。 makeだって mtimeで比較するよ。 ctimeでの比較が必須なら make使ったって問題は解決しない。 (ctimeの意味を誤解していて、実はmtimeでもOKなら話は別だが)
567 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:37:06 ] >>563 >リダイレクトでファイルを作るから、ctimeでないと >ファイルの作成時刻を比較できない ↑ は誤解してるようだね。 だとすると mtimeで比較して問題ないことになる。 とすると、>>559 のスクリプトでうまく動いているはず。 うまく動いているのに、>>557 で --time=ctime で見ているもんだから、 うまく動いていないと思い込んでいるだけ、というオチ。
568 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:39:24 ] 汚いシェル関数だなぁ。echo消せ。引数使え。
569 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:50:19 ] [ ] と [[ ]] が同居するスクリプトを初めて見た。どっちかに統一しろよ。 [ ] の方推奨だが。 testの -nt は純正シェルでは使えない。 ${i} なんて書くくらいなら "$i" って書け。 { } 付けただけじゃスペース入りファイル名とかの問題回避できないぞ。
570 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 17:28:49 ] 純正シェル(笑)
571 名前:553 [2008/04/02(水) 17:52:14 ] >> 567 誤解してました。 >> 568 shell関数まで添削してもらえるとは恐縮です。 >> 569 ありがとう。[[ ]]ではなく[ ] を使います。 あと、"$i"の記法はshellの本を注意深く読んだらちゃんと書いてありました。 下記のように直して、実行したら意図どおりに動いてます。m(_"_)m ========================================== #/bin/bash -x do_iconv(){ mv $1 "$1".old /usr/bin/iconv -f euc-jp -t utf-8 < "$1".old > $1 touch "$1".old } for i in *.html do if [ -e "$i".old ] then if [ "$i" -nt "$i".old ] then do_iconv "$i" fi else do_iconv "$i" fi done ======================================
572 名前:553 mailto:sage [2008/04/02(水) 17:52:54 ] bash -x の実行例 + for i in '*.html' + '[' -e SandBox.html.old ']' + '[' SandBox.html -nt SandBox.html.old ']' + do_iconv SandBox.html + mv SandBox.html SandBox.html.old + /usr/bin/iconv -f euc-jp -t utf-8 + touch SandBox.html.old + for i in '*.html' + '[' -e Travel.html.old ']' + '[' Travel.html -nt Travel.html.old ']' + for i in '*.html'
573 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 19:12:56 ] >>554 の言うように、 "$i".oldの方を編集しない限り、 必ず"$i"の方が新しいのに、(iconvの結果) > if [ "$i" -nt "$i".old ] してる。逆に"$i".oldを編集したら何も行われない。 仕様を日本語で書いたらどうか? たぶん.iconvedを作って、 "$i"と時間比較して新しいものだけiconv、 最後に必ずtouch .iconved、 これでやりたいことに合うんじゃないか?
574 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 19:43:56 ] >>573 その問題は、 >>557 >touch ${i}.old をiconvの後にしてみましたが ↑ で解決済。 というか、>>571 で、「実行したら意図どおりに動いてます。」 ですべて解決済なんだから、これ以上言うことはない。
575 名前:名無しさん@お腹いっぱい。 [2008/04/02(水) 20:00:06 ] カレントディレクトリが /abc/def/ghi/jkl/mno/pqr/stu/ とフルパスであったときに一番最後の部分(stu)を取り出したいのですが どのように書けばよいのですか
576 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 20:18:40 ] basename /abc/def/ghi/jkl/mno/pqr/stu/
577 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 20:19:16 ] basename `pwd`
578 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 21:33:15 ] >>551 はいはい、それがお前が出した唯一の根拠ね。 で、それが何かの標準になってるのか? ところで、>>516 ので試みた捏造に関しての弁明はどうした?
579 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 21:49:00 ] まだやってんのかw
580 名前:sage [2008/04/05(土) 16:40:16 ] リナックス等の研究やってます。 www.ine.sie.dendai.ac.jp/homepage/ www.ine.sie.dendai.ac.jp/wiki/index.php?FrontPage
581 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 07:37:45 ] シェルスクリプトから以下のようなテキストを呼びだして、 環境変数を展開した上で、位置変数に set したいのですが、 お知恵を拝借したく、どうかよろしくお願いします。 $ cat test.txt $HOME/doc/ いまは、シェルスクリプト内部で、 sed -e 's/\$HOME/$HOME/g' のようにしています。
582 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 07:40:42 ] >>581 eval set `cat < test.txt`
583 名前:581 mailto:sage [2008/04/10(木) 08:20:51 ] >>582 どうもありがとうございます! eval を使ってもう一度、$HOMEを変数展開をするのですね。 独力では全く思いつきませんでした。 本当にありがとうございました。
584 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 08:25:30 ] >>582 catが無駄です。
585 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 08:28:30 ] >>584 catなしでどう書くの?
586 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 08:29:07 ] eval set `< test.txt`
587 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 09:30:12 ] はいはい。bash依存。
588 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 08:28:49 ] 質問です! timeコマンドの結果をファイルに出力したいのですが、 どうやっても0バイトで出力されます。 以下、やってみたことを記載します。 $ time sleep 1 real 0m1.004s user 0m0.000s sys 0m0.001s $ time sleep 1 > hoge.dat real 0m1.439s user 0m0.000s sys 0m0.001s $ cat hoge.dat $ time sleep 1 > hoge.dat 2>&1 real 0m1.009s user 0m0.000s sys 0m0.001s $ cat hoge.dat やってみたこと以上です。 なぜ出力されないのでしょうか?どのようにすれば出力されますでしょうか?
589 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 08:32:44 ] >>588 bash使ってるだろ。 timeはbashの特殊な内部コマンドで、リダイレクトできない。 解決するには一旦サブシェルを通す。 $ (time sleep 1) 2> hoge.dat
590 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 11:19:02 ] >>588 /usr/bin/timeならファイルに出力できるよ。
591 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 11:37:22 ] >>590 >>589 /usr/bin/time は表示書式が違う
592 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:39:52 ] \time
593 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:40:30 ] bashってtimeが内部コマンドなのかw
594 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:44:15 ] 正確には shell keyword
595 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:50:22 ] あれ? マニュアルではtimeじゃなくて、timesになっているけど?
596 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:51:30 ] >>595 ぉぃぉぃ、timesとtimeは全く別のコマンド
597 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:58:21 ] times Print the accumulated user and system times for the shell and for processes run from the shell. The return status is 0. ごめん。マニュアル読んだだけでは何が違うのか分からん。 それに、timeの項目自体が見つからんし。
598 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 15:05:56 ] bash なら help time
599 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 15:06:37 ] man bash なら Pipelines の節。
600 名前:名無しさん@お腹いっぱい。 [2008/04/12(土) 00:11:45 ] しぇるすぷりくとでHTML書いて ボタン押したらhoge.shを実行したい ヒントください><;
601 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 01:02:36 ] >>600 実行環境を限定しなさい。 OSは? httpサーバは? 使用可能なCGIは? CGI実行時のセキュリティ要件は?
602 名前:名無しさん@お腹いっぱい。 [2008/04/12(土) 01:29:51 ] OS: FreeBSD 6.3-RELEASE-p1 http: Apache HTTP Server 2.2.8 CGI: This is perl, v5.8.8 built for i386-freebsd-64int セキュリティ要件: 無し
603 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 01:40:48 ] >>600 すみません、日本語でお願いします。
604 名前:名無しさん@お腹いっぱい。 [2008/04/12(土) 02:00:52 ] 日本語で書いたつもりなのに文字化けしてるんですか?><
605 名前:>>588 mailto:sage [2008/04/12(土) 06:09:32 ] >>589 ありがとうございます。
606 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 06:21:07 ] これシェルスクリプトの話か・・・?
607 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 07:16:24 ] >>601 答えられないくせに実行環境だけ聞くなよ。 実行環境あまり関係ないだろ。
608 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 07:24:57 ] >>600 エスパーすると、Webのフォーム入力でシェルスクリプトを入力して [送信]ボタンを押すと、そのシェルスクリプトが実行されて、 実行結果がWeb上に表示される、って感じのものを作りたいのかな?
609 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 09:21:01 ] エスパーじゃなくてもシェルスクリプトでCGIプログラム作りたいという事はわかる、>>601 が無能なだけ。 >使用可能なCGIは? この質問に至っては噴飯ものだ。 CGI/1.1と答えればいいのだろうか? >>600 CGIというサーバー上でプログラムを動かす仕組みがあるから、検索してわからない事があったらまた来なさい。
610 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 09:52:37 ] >>609 「シェルスクリプトでCGIプログラム作りたい」のじゃなくて、(さすがにそれは知ってるだろ) ユーザーがWeb上で入力したシェルスクリプトを実行してくれるような CGIを作りたいんじゃないのか?
611 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 10:26:00 ] まぁまぁ、ここは有能な>>609 に任せておいたらどうだ
612 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 10:38:47 ] >>610 >>600 からそこまで読み取れるなんて想像力がたくましいな。 でも俺に聞かれても困る。元質問者に聞いてくれ(そして、板違いだからwebprog行け) それとも「CGIを作る? CGI/1.2とかいう新しい規約でも作りたいのか?」と突っ込んで欲しいのか? >>611 == >>601 だな。無能という事実を突きつけられて悔しかったのか? > 使用可能なCGIは? この質問で意図した事を答えてみろ。
613 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 10:43:06 ] hoge.sh は実在します。例示には example.com 等を使いましょう。
614 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 10:51:55 ] >>612 > >>611 == >>601 だな。 違うよ。
615 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 11:11:59 ] >>602 読むと、CGI自体はperlで作るらしいから、 >>610 の解釈が正しそうだな
616 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 11:53:43 ] saryのように高速でかつgrep並みの正規表現検索ができるユーティリティってありませんかね? libstreeとか使って誰か作ってそうな気がするんですが、ぜんぜん見つかりません
617 名前:名無しさん@お腹いっぱい。 [2008/04/12(土) 21:54:43 ] hoge.sh はドメインじゃなくて スクリプト名では・・・
618 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 22:01:28 ] ネタにマジレス
619 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 23:54:44 ] 実際にwhoisしてみると、空いているらしい。>hoge.sh
620 名前:600 mailto:sage [2008/04/13(日) 00:33:33 ] >>602 |しぇるすぷりくとでHTML書いて $create.sh > /usr/local/www/html.html $cat create.sh #!/bin/sh echo \<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\> echo \<HTML LANG=ja\> echo \<HEAD\> echo \<meta http-equiv=\"content-style-type\" content=\"text/css\"\> echo \<META HTTP-EQUIV=Content-Type CONTENT=\"text/html\; charset=EUC-JP\"\> echo \<META name=\"generator\" content=\"shell script\"\> echo \<LINK REV=made HREF=\"mailto:yourmailaddress@your.mail.domain.com\"\> echo \<LINK REL=contents HREF=\"./index.htm\"\> echo \<LINK REL=stylesheet HREF=\"./default.css\" TYPE=\"text/css\" TITLE=\"./default.css\" MEDIA=\"screen,tv\"\> echo \<TITLE\>sample\</TITLE\> echo \</HEAD\> echo \<BODY\> echo \<FORM ACTION=\"/cgi-bin/hoge.cgi\" METHOD=\"POST\" ENCTYPE=\"text/plain\" LANG=\"ja\"\> echo \<div\>\<INPUT TYPE=\"submit\" TABINDEX=\"0\" ACCESSKEY=\"S\"\>\</div\> echo \</FORM\> echo \</BODY\> echo \</HTML\> |ボタン押したらhoge.shを実行したい セキュリティ要件:なしなら、perlスクリプト内に以下のように書けば... $list[0] = "hoge.sh" system "/bin/sh", @list;
621 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 07:32:30 ] >>620 お前 >>600 じゃなくて >>601 だろ。 echoが無駄です。echoは1個だけでできます。 perlのsystemでも、一旦listに入れるのが無駄です。 あと、そもそも >>600 の質問意図とは違うと思います。
622 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 10:30:33 ] echo1つで済むつーか、catとヒアドキュメントの出番じゃね?
623 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 10:37:58 ] ヒアドキュメントはテンポラ作るから嫌い。echo 1つがスマート。
624 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 11:44:04 ] テンポラリ作るとまずいことでもあるんですか?
625 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 11:51:04 ] >>623 どこにできるんだ?
626 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 12:16:26 ] >>624 意味もなくHDDに書き込むのが無駄。 >>625 教えて欲しければ「教えてください」と家。 普通は /tmpにできる。シェル側からすぐに unlinkされるから lsでは見えないけど。トレースすればわかる。
627 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 12:57:52 ] >626 実装による? Linuxのzshとbashで strace cat <<HOGE hoge HOGE としてみたけど別にテンポラリファイル作ってなかった。 fd3番以降を開いてるのは共有ライブラリのリンク時くらい。 "hoge¥n"のreadは0から。 dupとかなかったから、ファイル開いてリダイレクト処理をしたわけでもないな。
628 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 13:18:32 ] >>627 トレースが下手だな catをstraceしてもしょうがないだろ。 bashやzshをstraceすること。 catに渡される時にはすでにunlinkされてるから、 catをstraceしても見つからないはず。
629 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 13:35:53 ] (bashの場合) $ strace -f bash -c 'cat << EOF hoge EOF ' (中略) : [pid 11486] open("/tmp/sh-thd-1208089889", O_RDONLY|O_LARGEFILE) = 4 [pid 11486] unlink("/tmp/sh-thd-1208089889") = 0 テンポラリファイル作ってるね。 (zshの場合) $ strace -f zsh -c 'cat << EOF hoge EOF ' (中略) : open("/tmp/zsh6MaAd3", O_RDONLY|O_NOCTTY|O_LARGEFILE) = 3 unlink("/tmp/zsh6MaAd3") = 0 テンポラリファイル作ってるね。
630 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 13:36:32 ] $ strace -o bash.log bash bash-3.1$ cat <<HOGE > hoge > HOGE hoge bash-3.1$ exit $ egrep '(creat|unlink)' bash.log (なにもなし) だめか。どうやって確認すればいいか、正しいやり方を教えてけろ。
631 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 13:37:09 ] あああ、-fか。理解。
632 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 16:38:06 ] /tmpの日付見ればいいんじゃないの?
633 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 16:59:54 ] catだとすぐ終了しちゃうから、tail -fを使うと良い。 $ tail -f << EOF hoge EOF ってやっておいて、別のxtermから、 $ lsof | grep tail ってやると、(deleted)って表示されてる /tmp以下の一時ファイルがあるのがわかる。
634 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 17:23:23 ] >>632 それだけだと、無関係のプロセスが/tmpをいじくった可能性が残る。
635 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 17:33:54 ] 忙しくないマシンで何回かやれば可能性は実用上0になるだろ
636 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 17:36:00 ] それで満足ならいいんじゃね?
637 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 17:59:36 ] >>633 がもっといい方法示してるじゃないか。
638 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 19:53:17 ] >>626 礼儀知らずで申し分けありませんでした。テンポラリファイルを作るというこ とは、シングルユーザーモードなどで、リードオンリーファイルシステムだと here doc を使ったシェルスクリプトは動かないということでしょうか?
639 名前:名無しさん@お腹いっぱい。 [2008/04/13(日) 20:15:12 ] エディタの置き換えでも出来る事なのですが良ければ教えてください わるs わるk わるi わりこn わりこm わりあt じょうち じょうちょう じょうなん のように語尾にアルファベットが付いているのと付いてないのがあるんですけど アルファベットを削除する方法とかってSEDではどのようにするのでしょうか?
640 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 20:20:09 ] >>639 sed 's/[a-z]$//'
641 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 20:56:04 ] >>586-587 bash依存じゃないだろ。kshでも使えるから、標準で使っていいんじゃないの?
642 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 02:04:22 ] >>641 読まずにりぷらい、まあ、もちつけ共通拡張かも知れないだろ。 POSIXに規定されているか読みなおすんだ。
643 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 13:18:12 ] 配列の値の設定ってバックスラッシュか何かで 複数行にまたがって書くことはできないのでしょうか?
644 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 13:36:12 ] >>643 できる。シングルクォートを使うのがいい。 $ hoge=('aaa aaa aaa' 'bbb bbb bbb') $ echo "${hoge[0]}" aaa aaa aaa $ echo "${hoge[1]}" bbb bbb bbb
645 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 14:56:04 ] >>644 どうもありがとうです
646 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 15:00:53 ] はいはい、バッシュ依存。
647 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 21:22:58 ] kshでも使えるからデファクトだろ?
648 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 13:24:12 ] Solaris8上でBourne Shellを用いてスクリプトを書いています。 dateコマンドを整形する際にシングルクォートで括りますが、 $ echo `date '+%H%M` などとしても通ってしまうのは何故なんでしょうか?
649 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 13:54:55 ] >>648 Solarisのバグです。シングルクォートはちゃんと閉じましょう。
650 名前:名無しさん@お腹いっぱい。 [2008/04/15(火) 20:40:12 ] シェルを始めたのですが、変数でいきなり詰まりました >< $i = 123; =: command not found もしかしてシェルでは = は外部コマンドなんでしょうか?
651 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 20:47:30 ] 何シェルかくらいかこうぜ・・・ i=123
652 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 20:49:37 ] >>651 今度はこうなります i = 123 i: command not found
653 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 20:57:39 ] >>651 のをコピペしな あと、何シェルかくらいかこうぜ・・・
654 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:03:03 ] >>653 この場合何シェルか関係あるか??
655 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:24:30 ] 関係有るから指摘している。 が、cshだったら他所へ行ってくれ。
656 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:26:27 ] cshだったらエラーメッセージが違うじゃん。回答者はそれくらい見抜かないと。
657 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:27:17 ] >□お約束 >・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 > bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
658 名前:650 mailto:sage [2008/04/15(火) 21:30:24 ] #!/bin/shです。 i = 123; ってやっても、やっぱり i: command not found と出ます><
659 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:31:33 ] 650はネタなのかマジなのか。
660 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:50:24 ] シェルでは = は比較を表す (例: [ $i = 123 ] ) 代入は := で。
661 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:50:27 ] i = 123でなくてi=123です。スペースを入れてはいけません。
662 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 22:08:02 ] ネタはほっとけ。
663 名前:名無しさん@お腹いっぱい。 [2008/04/16(水) 08:48:00 ] 質問させて下さい。 あるディレクトリ以下の、特定の拡張子(.tig)をもつファイルの(find ./ -name "*.tig") 名前を変えて( hoge.tig -> hoge_org.tig) その二つの名前を与えたコマンドを実行したいです。( hoge -t hogu hoge_org.tig hoge.tig) for org_name in `find ./ -name "*.jpg"` do $name = $org_name + "_org"; echo $org_name; echo $name; done と言うのを考えてみたのですが、エラーでうまく行きません。 あと、拡張子の前に名前を追加したいのですが、実現方法が分かりません。 もしよろしければ、教えて頂けると助かります。 よろしくお願いします。
664 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 08:53:43 ] >>663 とりあえず、 $name = $org_name + "_org"; の部分のみに回答。 まず、perlみたいな書き方の癖はやめろ。 name=`basename $org_name .jpg`_org.jpg あと、質問が、最初は .tigと言ってるのに下のfor文は .jpgで、矛盾してるぞ。
665 名前:663 mailto:sage [2008/04/16(水) 08:58:21 ] ありがとうございます。 それがわかれば、なんとかできそうです。 .jpgなのは、ローカルな環境でテストをしたため違うファイルを使っていました。
666 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 13:41:14 ] findでやってるから'/'含みのpathnameになる。 しかしbasenameは最後のコンポーネントだけ切り出してしまう。 name=`echo $org_name | sed 's/.jpg$/_org.jpg/'` の方が良いと思われ。あるいは、 dir=`dirname "$org_name"` org=`basename "$org_name"` new=`basename "$org_name" .jpg`_.org.jpg orgpath="$dir/$org" newpath="$dir/$new"
667 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 18:41:06 ] phpのsystem関数から シェルコマンドを実行を試してます。 lftp -f hoge.conf rm hoge.conf したいのですが、 lftp -f hoge.conf がかなり時間がかかるため、 lftp -f hoge.conf > /dev/null & してから rm hoge.conf を実行したいと思います。 system("lftp -f hoge.conf > /dev/null & rm 000 hoge.conf"); とすると lftpが正常に実行されません。 おそらくrmがlftp完了前に実行されているからと思いますが、 どのように記述すれば良いでしょうか? どなたかご教授くださいませ。
668 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 18:56:25 ] >>667 system("lftp -f hoge.conf > /dev/null ; rm hoge.conf"); じゃだめなの?
669 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 19:08:25 ] OSコマンドインジェクションを入れ込まないように気をつけろよ
670 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 19:08:44 ] & を何だと思ってるんだ
671 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 19:26:22 ] system("(lftp -f hoge.conf > /dev/null ; rm hoge.conf) &"); こうかな
672 名前:667 mailto:sage [2008/04/16(水) 19:36:29 ] >>668 これだと rm hoge.conf が lftp 完了前に実行されたようです >>671 "("なんてしらねーよ、みたいなエラーが出てしまいました。
673 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 19:49:57 ] >>672 system("sh -c 'lftp -f hoge.conf > /dev/null ; rm hoge.conf' &");
674 名前:667 mailto:sage [2008/04/16(水) 20:08:22 ] >>673 神サンクスです!!それでいけました!
675 名前:667 mailto:sage [2008/04/16(水) 20:35:38 ] すいません、 いけたと思ったら、lftpが終わるまでブラウザで読み込みが続いてしまいます。 www.stackasterisk.jp/tech/php/php02_02.jsp ---------------------------------------------- > /dev/null」 が「リダイレクト」に相当する記述です。 /dev/null というのは、「ゴミ箱」と思って頂いて構いません。 すべての出力を捨てます。 最後の & は、バックグラウンドで実行するという意味です。 このあたりの詳しいことは UNIX のシェルの本をみれば載っています。 「PHPはそのプログラムの実行が終了するまでハングします」というのは、 つまり IE の地球マークが廻りつづける状態をいいます。 ---------------------------------------------- というのを参照しています。
676 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 02:33:27 ] ぐぐって得た付け焼き刃の知識をこねくるんではなく 一度基礎から勉強した方がよろしいかと。
677 名前:名無しさん@お腹いっぱい。 [2008/04/17(木) 08:36:16 ] >>675 結局jpgなんだねw
678 名前:名無しさん@お腹いっぱい。 [2008/04/17(木) 12:33:53 ] シェルスクリプトで関数計算とかできるの? A= 2√3/0.0000456789*π+$hoge echo $A 小数点以下なげーとか・・・・
679 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 12:47:28 ] >>678 $ hoge=123 $ echo "2*sqrt(3)/0.0000456789*(a(1)*4)+$hoge" | bc -l 238368.58352774053454525488 注: πは (a(1)*4) で表す。(atan(1) = π/4 を利用)
680 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 12:53:56 ] そういう場合はbcとか関数計算を行うプログラムに実行させる。 POSIXシェルならば整数の四則演算が行えるので、この上に(関数演算を含む) 浮動小数点演算を実装すればシェル単独でも可能。
681 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 13:00:42 ] >>679 少し分かりやすく hoge=123 pi="(a(1)*4)" echo "2*sqrt(3)/0.0000456789*$pi+$hoge" | bc -l
682 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 13:14:45 ] 実例 >>679 が投稿された「あと」で、 実例示せずに能書きだけ書いてる >>680 ってマヌケだよなぁ。
683 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 14:29:32 ] 「やりかた」を書くだけで間抜けなのか
684 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 14:33:27 ] 具体的な「やりかた」を書いているのは >>679 の方。 >>680 は具体的な「やりかた」を何ひとつ書いていない、だから間抜け。
685 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 14:34:14 ] そんなことより、批判だけするやつのほうが・・
686 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 15:55:30 ] シエルで、フォントサイズを変えるのはどうやるんですか A$ = "エラーが発生しました" echo A$ のところで、「エラー」の文字だけ大きくしたいんですが
687 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 16:00:27 ] banner Error; echo 'が発生しました'
688 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 16:46:29 ] 仮想端末のエスケープシーケンスにフォントサイズ変更があれば 「エラー」の前後にそのエスケープシーケンスを書けばいい。 色やブリンクの有無といった変更も同様。
689 名前:名無しさん@お腹いっぱい。 [2008/04/17(木) 19:13:26 ] スクリプトの神様 今日もありがとうございました 勉強になりました!!!
690 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 19:54:36 ] banner面白いなw
691 名前:名無しさん@お腹いっぱい。 [2008/04/17(木) 22:12:31 ] >>679 >>680 >>681 神よ! d(゚Д゚)☆スペシャルサンクス☆( ゚Д゚)b さて、Excelを窓からブン投げるかw
692 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 01:03:30 ] このスレは定期的に神が現れるな。的確で即レス、何者なんだろ
693 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 01:38:31 ] >>686 少し目的からずれる気がするが、以前どっかのスレに 投下したスクリプトをちょっと改造したもの。 #! /usr/bin/env bash # vivid_error.sh -- 標準エラー出力に色を付ける # Original: # ttp://d.hatena.ne.jp/goth_wrist_cut/20080122/1201003827 name='vivid_error.sh' (( $# > 0 )) || { echo "error: $name: No argument." 1>&2 exit 1 } temp=$( mktemp "$TEMP/$name.$PID" ) rm -f "$temp" mkfifo "$temp" sed 's/.*/1m\0m/' < "$temp" 1>&2 & "$@" 2> "$temp" status=$? rm -f "$temp" exit "$status"
694 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 02:37:38 ] ESC=$(printf '\033') とかするのおすすめ
695 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 08:19:53 ] terminfoなsystemじゃないとtputはないかも。 BOLD=`tput bold` EXIT=`tput sgr0` printf "${BOLD}This ${EXIT}is a ${BOLD}test${EXIT}.\n" カラーも可能。 文字列加工はsed等で。
696 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 13:32:39 ] fifoなんていらないよね。 #!/bin/sh # 標準エラー出力に色をつけてコマンドを実行 if [ $# -eq 0 ] then echo "Usage: $(basename $0) command args..." 1>&2 exit 1 fi exec 3>&1 ESC=$(printf '\033') "$@" 2>&1 1>&3 | sed "s/.*/$ESC[1;31m\0$ESC[0m/" 1>&2
697 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 18:50:18 ] 初歩的な質問ですが LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined を LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined の様に変更したいのですが・・・ sed -i "s/^LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined/LogFormat \"%h %l %u %t \\\"%!414r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined/g" /root/test で良い様に思うのですが・・・ "%h \"の様な所でエラーが出て変換ができません よろしくです
698 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 18:51:56 ] 初歩的な質問ですが LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined を LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined の様に変更したいのですが・・・ sed -i "s/^LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined/LogFormat \"%h %l %u %t \\\"%!414r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined/g" /root/test で良い様に思うのですが・・・ "%h \"の様な所でエラーが出て変換ができません よろしくです
699 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/20(日) 18:53:14 ] なんとなくワロタ
700 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/20(日) 19:48:07 ] >>698 まず、sedプログラム本体は " " じゃなくて ' 'で囲むこと。 " " だといろいろエスケープが面倒。
701 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 21:47:22 ] >>700 ありがとうございました 修正できました
702 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 22:34:02 ] シェルスクリプトでPerlとかRubyのchopと同等なことって、 どうすればいいですか? bash限定でもかまいません。
703 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/20(日) 22:42:41 ] >>702 シェルでは、何も考えなくても readとかで読み込んだら自動的に chopされてる。
704 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 23:31:00 ] >>703 さっきは、 「echo -nで改行が取れないなあ、あれ?」って状態で質問したのですが、 readでも取れませんでした。で、ようやく\r\n改行だったことに気づきました。 bashの%*\r*で解決しました。
705 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 00:26:14 ] 質問させてください テキストファイル内に 建造物 (けんぞうぶつ) 構築物 (こうちくぶつ) 構造体 (こうぞうたい) ()でくくられた文字のみを取り出したいのですが可能でしょうか?
706 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 00:36:23 ] >705 いくらでも方法はある。 sed、awk、perl あたりなら一行野郎でいける。 awk -F '\\(|\\)' 'length($2)>0{print $2}'
707 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 00:44:02 ] >>706 レスありがとうございます! ちなみにsedだと、どういう風になりますか?
708 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 02:15:09 ] >>706 建造物 (けんぞうぶつ) 構築物 (こうちくぶつ) 構造体 (こうぞうたい) こういうテキストのこともないかな。
709 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 02:19:44 ] $ echo '建造物 (けんぞうぶつ) 構築物 (こうちくぶつ) 構造体 (こうぞうたい)' | sed 's/[^(]*(\([^)]*\))/\1/g' けんぞうぶつこうちくぶつこうぞうたい
710 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 18:20:49 ] 多分、作りこまないと駄目だと思うんですが、駄目元で質問します。 `find .`の結果を各ディレクトリ毎に、 第1のソートキー:ディレクトリorファイルの別(ディレクトリが先) 第2のソートキー:更新時間の降順 でソートしたものが欲しいです。 ファイルブラウザとかだと、そういう表示が出来るので、 もしかすると、簡単におこなう方法があるのかな?と密かに期待してます。 宜しくお願いします。
711 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 18:56:59 ] 普通に考えたら出来る
712 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 19:01:20 ] >>711 結果をファイルに出力してもいいのであれば、 find -type dでループを回していけばやれるのはわかっているのですが、 作業ファイルを介さずにそのままwhile readで受け取れるくらい 簡単な方法がないかな?と思って質問させて頂きました。
713 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 19:12:16 ] 多分スクリプト言語使った方がいいと思う
714 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 19:19:38 ] >>713 ちょっとごめんなさい ディレクトリは名前順でもいいです。 当初>>710 で書いたよりはずっと簡単に実現できます。
715 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 19:19:44 ] >>711 そういうことはお前の考えた結果を貼ってから家。
716 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 19:26:48 ] >>714 「ディレクトリが先」という条件さえなければ、 単に ls -latR で行ける。findすらいらない。 >>712 結果をファイルに出力する方法でやる方法がわかってるなら、 それをファイルに出力しない方式に書き換えることは多分できる。
717 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 19:31:02 ] >>710 GNU ls使えば、 ls -latR --group-directories-first で一発。
718 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 20:23:19 ] みなさんどうもありがとうございました。 結局(とりあえず)、 find -d でループを回して作業ファイルを作る方法にしました。 ディレクトリは名前順でファイルは更新時間降順にしました。 ちなみにGNU ls 5.21で--group-directories-firstはサポートされてませんでした。
719 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 21:04:47 ] find ... -print0|xargs -0 ... と区切りをわざわざ^@にするのが推奨されてるのって何故なんですか?
720 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 21:13:18 ] 他の文字はファイル名に使われてるかもしれないから。
721 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 21:55:46 ] -print0|xargs-0を使うのは石器人。 現代人なら-exec utility_name [argument ...] {} +
722 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 21:57:15 ] いまさら-execはちょっと…という気分 気分だけね
723 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 22:08:08 ] >>722 お前、行末の「+」の意味知ってて発言してるのか?
724 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 22:15:16 ] >>718 GNUコマンド群くらい最新にしとけよ。6.xなら使える。
725 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 02:59:08 ] >>724 バージョンアップできない(許可されない)環境って結構多いぞ。 (*nix系ならローカルに実行環境つくれば済む話だが)
726 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 07:04:01 ] >>725 もしそういう環境なら、GNU lsを入れること自体許可されないだろ。 (古いバージョンとは言え)GNU lsが入っているということは、 OS標準じゃないコマンドを自分でインストールしてもいい環境と考えられる。
727 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 10:39:16 ] システム構築時にGNU系を入れて構築、運用開始した後、 バージョンアップの費用(現システムの稼働確認費用)が認められないため、そのままってパターンが多い。 そういうトコだと、ローカルに新版lsをコピーしてくる方が(手続き的に)楽だったり。
728 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 12:30:34 ] >>710 タイムスタンプが、 2008-04-22 12:30 こういう形式で、 $6, $7にあると仮定すれば、 ls -l | sort -k 6,7 | sort -sr でいい。-sはstable sort。
729 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 13:27:05 ] >>728 それだと symbolic link が先頭に来てしまうので失格。
730 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 13:30:00 ] >>728 というか、せっかく sort -k 6,7 したあとで sort -sr したら 最初の sort -k 6,7 が無意味になってしまうし、全然ダメじゃん。
731 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 19:43:49 ] つ sort -srk 1,1
732 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 19:58:42 ] >>731 >>729 失格。
733 名前:名無しさん@お腹いっぱい。 [2008/04/23(水) 15:40:13 ] Apache の mod_ext_filter モジュールを利用したスクリプトを作成しています。 Apache --標準出力--> script --標準出力 --> Apache を行うスクリプトにて、 Apache からの標準出力を $temp_file に書き出して主な処理をした後に cat $temp_file を行い Apache に返しているのですが、 #!/bin/sh temp_file=`mktemp` while read line do echo "$line" >> $temp_file done ファイル操作 cat $temp_file rm -f $temp_file 上記コードだと、HTML ソースに \ $ ` などが入っていた際に、 echo "$line" >> $temp_file で意図せぬ動作が起きてしまいます。 またファイルに書き出す事で処理速度の低下も考えられるので、 Apache からの標準出力(複数行)を変数に格納する方法はないかと思ったのですが、 どなたかご教授ください。
734 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/23(水) 20:08:40 ] >>733 それはシェルのreadの仕様だから仕方ない。 そもそも while readで読む必要ないだろ。 while do ... done の部分全部を、 cat > $temp_file に置き換えればよろし。
735 名前:733 mailto:sage [2008/04/23(水) 20:31:31 ] >>374 おぉ、色々と勘違いしていたみたいですね。 ご指摘の方法でやってみたところちゃんとできました。 すみません、ほんと有難うございます。
736 名前:733 mailto:sage [2008/04/24(木) 00:18:33 ] 733です。 度々すみません。 #!/bin/sh temp_file=`mktemp` cat > $temp_file ファイル操作 cat $temp_file rm -f $temp_file 確かにご教授いただいた上記コードで可能なのですが、 Apache からの標準出力をファイルに書き出さず、変数として処理する事は出来ないのでしょうか?
737 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/24(木) 00:55:16 ] そんなに速度が気になるなら他の言語でやったほうがいい
738 名前:733 mailto:sage [2008/04/24(木) 01:45:55 ] >>737 ありがとうございます。 色々試行錯誤してみます。
739 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/24(木) 06:52:22 ] >>736 その「ファイル操作」の内容が、 sed 's/hoge/boke/' < $temp_file だとすると、そもそもcatは2つとも要らない。 #!/bin/sh sed 's/hoge/boke/' ↑の2行だけでOK。 sedは、何も指定しないと標準入力から読んで標準出力に出すから。
740 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/24(木) 06:56:05 ] >>736 一旦変数に入れたいなら、 tmp=`cat` とする。これで変数tmpに入る。 参照する時は、 echo "$tmp" とする。シェルに特殊文字を解釈されないように" "を付けるのを忘れないように。
741 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/24(木) 19:36:45 ] >>739 返信ありがとうございます。 標準入力の内容によって条件わけがしたかったので、ご指摘の方法は断念しました。 >>740 返信ありがとうございます。おかげさまで出来ました。 一つ疑問が残るのですが、ダブルクォート (") は $ ` \ 以外を普通の文字として扱うと認識していますが。 # echo "`date`" Thu Apr 24 17:55:30 JST 2008 # cat sample.html <html> <body> `date` </body> </html> # cat filter.sh #!/bin/sh temp=`cat` echo "$temp" # cat sample.html | sh filter.sh <html> <body> `date` </body> </html> なぜ echo "$temp" では ` が普通の文字として扱われているのでしょうか? お恥ずかしい質問で済みません。
742 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/24(木) 19:38:59 ] 変数、サブシェルなどの展開は一度だけ。 再度展開したい時はeval。
743 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/24(木) 20:15:21 ] >>742 eval をさっそく調べ、勉強になりました。 ありがとうございます。
744 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 00:26:56 ] 質問させてください。 シェルスクリプトで16進数を2進数に変換するにはどうしたらいいでしょうか?
745 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 00:49:57 ] どうしてもシェルスクリプトというならこんな感じか。 最適なのはbc。sedだけでもできる。 h2b() { for h in `echo $1 | sed 's/\(.\)/ \1/g'`; do case $h in 0) echo -n 0000;; 1) echo -n 0001;; 2) echo -n 0010;; 3) echo -n 0011;; 4) echo -n 0100;; 5) echo -n 0101;; 6) echo -n 0110;; 7) echo -n 0111;; 8) echo -n 1000;; 9) echo -n 1001;; a|A) echo -n 1010;; b|B) echo -n 1011;; c|C) echo -n 1100;; d|D) echo -n 1101;; e|E) echo -n 1110;; f|F) echo -n 1111;; esac done echo }
746 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 00:54:10 ] >>755 あ、どうしてもってわけじゃないです。 コマンドとかありますか?何度もすいません。
747 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 01:17:50 ] bcで16進数を2進数に変換。 できそうでよくわからない・・・orz
748 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 01:18:21 ] bcならこんな感じかな、便利だね知らなかったよ。 echo "obase=2; ibase=16; $1" | bc
749 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 01:32:27 ] >>748 ありがとう。しかしながら 例えば 0xffffff00 これを10進数に変換したいと思い echo "obase=10; ibase=16; 0xffffff00" | bc とやってみましたがsyntax errorがでました・・・orz
750 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 01:40:21 ] 頭に0xは付けずに,それから大文字で書かないといけないっぽい.
751 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 02:03:41 ] >>750 なるほど。ありがとうございました。
752 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 06:48:02 ] >>749 bcなんか使わなくても printfで一発だろww $ printf '%d\n' 0xffffff00 4294967040
753 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 08:48:45 ] んっと、釣られとくけど、 志村ー
754 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 13:18:18 ] >>753 なにが釣りなのかわからないゆとりな俺にkwskたのむ シェルスクリプトのtmtowtdiな感じって好きだ
755 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 13:28:34 ] printf(3)は二進がないからなあ。 printf(1)の%bは違う意味だし。
756 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 13:35:12 ] >>775 欲嫁。 >>749 は 16進→10進の質問。 >>752 はそれに最適解を答えている。
757 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 22:01:10 ] 昨日質問した者です。ちょっと間違ってました。ごめんなさい。 正しくは ffffff00 これを 255.255.255.0 に変換したい。です。 これってできるのでしょうか?
758 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 22:09:13 ] 簡単だね >>757 $ hex=ffffff00 $ printf '%d.%d.%d.%d\n' `echo $hex | sed 's/../0x& /g'` 255.255.255.0
759 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 22:57:09 ] >>758 すごいなぁ。ありがとう。
760 名前:名無しさん@お腹いっぱい。 [2008/04/26(土) 12:50:24 ] >>758 これは(・∀・)イイ!! もれももらた
761 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/26(土) 16:59:52 ] よく読まずに余計な突っ込みした >>753 は今ごろ赤面ww
762 名前:名無しさん@お腹いっぱい。 [2008/04/28(月) 17:23:56 ] >>761 kannke-nexekedo お前のレスうざい
763 名前:名無しさん@お腹いっぱい。 [2008/04/29(火) 09:04:12 ] シェルで、拡張子の付いていないファイルを一発でワイルドカード指定するには どうすればいいですか? あるいは、何かのオプション変更とかで、 * で、hogeとかだけにマッチして、 hoge.hog にはマッチしないようにして、 *.* とやった時だけ hoge.hogにマッチするようにしたいんです。
764 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 09:43:06 ] 一部シェル限定ならできる 一発でなくていいならできるようにはできる
765 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 11:18:22 ] >>764 kwsk
766 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 12:33:12 ] >>764 は、具体的な「やりかた」を書かない(書けない)知ったかの >>680 と同一人物、に1俵。
767 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 12:39:25 ] >>765 シェルは何だ? ワイルドカード使うシチュエーションは?カレントディレクトリだけなのか? ファイルの表示ができればいいだけなのか?各ファイルに何かするのか? >>766 あいにく違うな 1俵よこせ
768 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 12:43:35 ] >>767 じゃなくて、逆にその「できるシェル」を教えて欲しい。 シチュエーション関係なしに、すべての場合において * が hoge.hogにはマッチしないようにしたい。
769 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 12:46:16 ] EXTENDED_GLOBつきのzshで*~*.*かな。
770 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 12:55:22 ] * 1個の動作を変えられるようなシェルはないかと思う 同じくzshで setopt EXTENDED_GLOB ls -d [^.]#
771 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 12:57:46 ] command.com
772 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 13:01:56 ] 少なくとも >>766 だけうざいな
773 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 13:50:40 ] シェルを秘密にしたいのだからエスパースレに行くべきだな。 全ての場合を見通して答えてくれるエスパー様(>>766 )に任せよう。
774 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 13:58:03 ] できるシェルを教えてくれっていう質問だから、 シェルを秘密にしてるのとは違うかと
775 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 20:45:09 ] よく読まずに余計な突っ込みした >>773 は今ごろ赤面ww
776 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 21:08:40 ] >>775 お前のレスうざい
777 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 21:32:45 ] OSを秘密にしているのだから、エスパー様の出番だな。 余計な突っ込みした、知恵足らずの>>775 は今ごろ赤面ww
778 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 21:41:31 ] シェルはOSには依存しないな。 余計な突っ込みした、知恵足らずの>>777 は今ごろ赤面ww
779 名前:名無しさん@お腹いっぱい。 [2008/04/29(火) 21:43:02 ] > シェルはOSには依存しないな。 > シェルはOSには依存しないな。 > シェルはOSには依存しないな。 > シェルはOSには依存しないな。 > シェルはOSには依存しないな。 > シェルはOSには依存しないな。
780 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 21:54:17 ] まあよくある願望とごっちゃにしたな
781 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 22:04:17 ] たとえば最近の例を引き合いに出すが、 >>757 の質問(OS不明)に >>758 が的確に回答してる。 どこにもOSに依存してるところはないな。 >>757 に対して「OSが秘密じゃ答えられない」なんていってる奴は 無知をさらけ出してる奴。OSがわかったところで答えられないだろう。
782 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 22:06:52 ] 全然関係ない事例を持ち出して > シェルはOSには依存しないな。 > シェルはOSには依存しないな。 > シェルはOSには依存しないな。 > シェルはOSには依存しないな。 > シェルはOSには依存しないな。 > シェルはOSには依存しないな。 を誤魔化そうとする>>778 憐れ。
783 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 22:08:34 ] 本件事例の >>769 の回答は、OSには依存しないな。
784 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 22:17:34 ] 糞みたいな雑談でスレを延ばすなよ コードで語れ
785 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 22:22:29 ] G Em7 Am7 Am7/D D7 G
786 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 22:23:36 ] >>769 は誤回答。お題は「* で、hogeとかだけにマッチして、hoge.hog にはマッチしない」
787 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 22:25:33 ] OSに依存しない誤回答ですね。
788 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 22:45:17 ] 誤解答を例示して > シェルはOSには依存しないな。 を誤魔化そうと必死の>>778 憐れ。
789 名前:名無しさん@お腹いっぱい。 [2008/05/02(金) 11:38:05 ] $ls test1.jpg test10.jpg test2.jpg test3.jpg test4.jpg test5.jpg test6.jpg test7.jpg test8.jpg test9.jpg と1桁の数字からなる連番ファイルがあるときに $ls test0001.jpg test0002.jpg test0003.jpg test0004.jpg test0005.jpg test0006.jpg test0007.jpg test0008.jpg test0009.jpg test0010.jpg というように4桁の連番ファイルにリネームしたいのですが、 ご教授お願いします。
790 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 11:40:37 ] >>789 mv sed printf for これだけ調べればできる
791 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 11:41:07 ] 書き忘れた、 test10.jpg これ 1桁の数字じゃないよな
792 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 11:43:03 ] >>789 環境依存かつ汎用性ナシだけど、 おれならこうやっちゃう。 $ for i in {1..9}; do mv test$i.jpg test000$i.jpg; done $ mv test10.jpg test0010.jpg
793 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 11:49:01 ] >>789 #!/bin/sh for file in *.jpg do num=`expr $file : '[^0-9]*\([0-9]*\)'` base=`expr $file : '\([^0-9]*\)'` num=`printf %04d $num` echo mv $file $base$num.jpg done
794 名前:789 mailto:sage [2008/05/02(金) 11:52:46 ] >>791 最初1桁の例だけ書いてたんで、 2桁も混じっているということを書き忘れました。 >>792 $ for i in {1..9}; do mv test$i.jpg test000$i.jpg; done $ for i in {10..99}; do mv test$i.jpg test00$i.jpg; done ってかんじですかね。ありがとうございます。
795 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 11:52:51 ] >>790 具体例を示さない奴は黙ってろ。あと、sedよりexprの方がいいな。
796 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 11:53:29 ] >>794 >>793
797 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 11:55:18 ] 3桁のときは、0を一つ、2桁の時は、0を2つ 一桁のときは、0を3つってつけてけばいいねん sedだけでできる
798 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 11:56:45 ] >>797 そんなことをしなくても >>793 で一発。
799 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 11:57:56 ] でしたね^^ 解決したようで
800 名前:793 mailto:sage [2008/05/02(金) 12:09:21 ] sedだけでやるならこうかな ↓ #!/bin/sh for file in *.jpg do new=`echo $file | sed 's/[0-9]/0000&/; s/[0-9]*\([0-9][0-9][0-9][0-9]\)/\1/'` mv $file $new done
801 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 12:11:08 ] ごちゃごちゃしてるなぁ
802 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 12:13:48 ] そう思うならprintfの方がすっきりする
803 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 12:16:28 ] カレントディレクトリ配下で自分が所有者のファイルを探してすべて消したいのですが、 どのように書けばいいですか?
804 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 12:17:35 ] find . -user `whoami` -exec rm -f {} \;
805 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 12:18:06 ] ありがとうございます 試してみます
806 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 20:11:05 ] >>795 > >>790 > 具体例を示さない奴は黙ってろ。あと、sedよりexprの方がいいな。 お前が真っ先に黙れ。
807 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/05(月) 12:08:46 ] 若干スレ違いですが、 シェルスクリプラーなみなさんが詳しそうなので質問させてください。 unix,linuxで、 カーネルの脆弱性なんかでrootに権限昇格の可能性があるのって 特定コマンドを利用不可にしていたら難しい、 なんてことあるでしょうか? また、特定コマンドを利用した回数、利用したユーザ、 とか調べる方法ってないでしょうか?
808 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/05(月) 13:02:50 ] つ BSD acct & lastcomm
809 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/05(月) 13:55:52 ] >>807-809 具体例を出さない書き込みは禁止。
810 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/05(月) 15:43:33 ] 若干どころじゃなくスレ違い。
811 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/05(月) 15:47:30 ] 「シェルスクリプロ」って何ですか?
812 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/05(月) 15:57:16 ] シェルスクリプる
813 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 08:56:10 ] a 5 9 2 b 7 3 6 c 5 3 2 d 8 3 7 e 4 4 4 のようなテキストファイルから a 5 9 2 16 b 7 3 6 16 c 5 3 2 10 d 8 3 7 18 e 4 4 4 12 のように行の値の合計を右端に出力したいのですがどうしたらできますか? awk '{print $1,$2,$3,$4,$1+$2+$3}' のようにではなく、列の値の数が3でなくても対応できるようにしたいです。
814 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 09:01:46 ] >>813 簡単だね。 #!/bin/sh while read line do set $line shift sum=0 for i in "$@" do sum=`expr $sum + $i` done echo "$line $sum" done < file
815 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 09:20:27 ] 適当にがんばってみたらできたました。 ありがとうございました。 awk '{sum=0;for(i=1;i<=NF;i++)sum+=$i; print $"$i",sum}' test.txt
816 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 09:38:50 ] >>815 ちゃんと「シェルで」答えてくれた >>814 に礼もなしで 自己解決かよ。 しかも、awkでやるならスレ違い。awkスクリプトはシェルスクリプトにあらず。
817 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 09:41:33 ] おいおい、 >>815 の awkだと間違ってるぞ。 1列目の文字がたまたま数値的に 0 と評価されたら 結果的に正しく動いてるように見えるけど、 1列目に数値と解釈される文字があったらアウト。 このスレ的には >>814 が正解。
818 名前:名無しさん@お腹いっぱい。 [2008/05/06(火) 20:45:33 ] unix初心者ですが、シェルについて教えてください。 if文で、if〜then〜else〜endif を使用しています。 if文の判定は、ファイル有無の判定です。 判定対象のファイルを正規表現で記述すると、elseまで辿り着きますが、 メタキャラ"?"で判定すると、elseまで辿り着かず、 「照合パターンに合いません」 と出力され終了してしまいます。 シェルの構文は下記の通りです。 #!/bin/csh if ( -f /tmp/a?a.log ) then echo "ファイルが見付かりました" else echo "ファイルが見付かりませんでした" endif メタキャラを使用して、ファイル判定をする方法を教えて頂けませんでしょうか。 宜しくお願い致します。
819 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 20:50:12 ] >>818 cshでスクリプトを作ってはいけません。 どうしてもcshが良いなら独学でどうぞ。
820 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 21:05:42 ] >>818 #!/bin/sh if [ -f /tmp/a?a.log ]; then echo 'ファイルが見付かりました' else echo 'ファイルが見付かりませんでした' fi
821 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 21:15:22 ] #!/bin/sh [ -f /tmp/a?a.log ] && { echo 'ファイルが見付かりました' } || { echo 'ファイルが見付かりませんでした' }
822 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 21:19:42 ] #!/bin/sh s=; [ -f /tmp/a?a.log ] || s='せんで'; echo 'ファイルが見付かりま'"$s"'した'
823 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 21:27:57 ] s=;(</tmp/a?a.log)2>/dev/null||s='せんで';echo 'ファイルが見付かりま'"$s"'した'
824 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 22:16:35 ] ゴルファーがいるw
825 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 22:21:36 ] すんません、検索したけど見つからなかったので教えてください。 bash + awk, bc, perl あたりで、小数部が3桁の計算をして、 その結果を変数に格納してます。その後、その変数の値を 絶対値にして返してくれるコマンドはありませんか? 上記のbash, awk, bc, perl あたりでできれば一番良いのですが。 よろしくお願いしまつ。
826 名前:名無しさん@お腹いっぱい。 [2008/05/06(火) 22:44:52 ] > 820、821 ありがとうございました。 Bシェルで作成します。 … 作成したのですが、複数ファイルがマッチした場合、 ファイル名: binary operator expected が表示され、マッチしたにも関わらず、elseが適用されます…。 ご存知でしたら、複数マッチしても、真となるような方法を教えて頂けませんでしょうか。
827 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 22:58:20 ] >>825 マイナス符号を取ったらいいだけだろ $ var1=-123.456 $ expr $var : '-*\(.*\)' 123.456 $ var2=123.456 $ expr $var : '-*\(.*\)' 123.456
828 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 23:01:42 ] >>826 #!/bin/sh if ls /tmp/a?a.log 2>/dev/null; then echo 'ファイルが見付かりました' else echo 'ファイルが見付かりませんでした' fi
829 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 23:14:46 ] >>825 $ var=-123.456 $ echo ${var#-} 123.456 $ var=123.456 $ echo ${var#-} 123.456
830 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 23:22:26 ] bash依存乙。
831 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 23:29:02 ] だからksh由来だと何度(ry まあテンプレにもあるようにsh以外ならそう明記すべきだな。
832 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 11:40:42 ] カレントディレクトリ配下のファイルにsedをかけたいのですが、 どのようにしたらできますか?
833 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 11:50:19 ] >>832 要エスパー質問だなw for file in * do sed 's/hoge/hage' "$file" > "$file".new done てことをやりたいのか?
834 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 11:54:09 ] >>832 OSやシェルの種類/バージョンは秘密ですか? それを秘密にしたままでは誰も答えられないでしょう。 このレス以外、レスは0件でしょう。
835 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 11:58:42 ] OSはわかりません。(アウトソーシングでunameが使えないため) ShellはBashです。 $ bash --version GNU bash, version 3.1.17(1)-release >>833 それだと、カレントディレクトリのファイルしか置き換えできません。 カレントディレクトリ配下をすべて置き換えたいです。 また、置き換えしたいので、.newファイルを作成したいのではないです。 (名前を変更すればいいだけですが。)
836 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 12:02:49 ] >>835 find . -type f -exec sed -i 's/hoge/hage' {} \;
837 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 12:06:32 ] >>834 OS関係ないだろw すでに適切な回答がなされた後で再読み込みもせずに余計なことを書いた >>834 は今ごろ赤面。
838 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 12:09:01 ] >>835 「カレントディレクトリ配下」という言葉の使い方を間違ってます。
839 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 14:40:31 ] >>832 , >>834-835 , >>837-839 具体例を出さない書き込みは禁止。
840 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:20:43 ] >>838 配下っていう意味的にはあってるでしょ
841 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:21:36 ] >>840 合ってない。直下のディレクトリのみ指す用語。
842 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:24:34 ] >>841 配下って言うのは、傘下って意味。 参加は直下以外も指す。 ダイハツの下もTOYOTAの傘下でしょ。
843 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:39:44 ] >>842 勝手に言葉を定義されても、困るのですが。
844 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:46:27 ] その人の支配に属していること。また、その者。手下。部下。 - 三省堂提供「大辞林 第二版」より 類語: ⇒ 関連語 てした【手下】 ⇒ 関連語 さんか【傘下】 ⇒ 関連語 したやく【下役】 - YAHOO辞書より
845 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:47:48 ] 一言「サブディレクトリ以下も含む」と付け加えれば意味が通じたのに、 >>832 は「サブディレクトリ」という用語を知らないに1票。
846 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:52:45 ] 例えば、 /aaa/bbb というディレクトリがあって、 touch /aaa/bbb/ccc.txt ってやりたい時、 bbbディレクトリに書き込みパーミッションがあれば、 aaaディレクトリは書き込み禁止であっても書き込める。 よって、bbbはaaaに支配されているわけではない。 aaa自体の書き込みパーミッションは、 aaa直下に作成するファイルにしか効かない。 つまり、bbbはaaaの支配には属していない。
847 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 19:10:11 ] 基本的には親ディレクトリを削除したら下は全部削除されるんだから支配されてるでしょ。 孫請け会社が親とは直接的なやり取りがないのとおなじ
848 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 19:19:12 ] リンク
849 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 19:19:17 ] >>846 >>847 だから、勝手に言葉を定義されても困るのですが。 >>845 「再帰的(reccursive)に」というキーワードがありますね。 よくあるオプションは-rですか。
850 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 19:21:22 ] -Rだな
851 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 19:33:05 ] >>849 言葉を定義してるはあなたも同じでしょ。 YAHOO辞書に従うと、類義で傘下があるから傘下としてはただしいんだし。
852 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 19:42:10 ] >>851 いや、してませんけど。 言葉は流動的なもので、大辞林や広辞苑にこう書かれている、としても、 それがすべての場合に同様に正確にあてはまるわけではないのは、日常の 言葉のやりとりで体得していないのですか? プログラム言語じゃあるまいし。
853 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 20:20:38 ] >>847 逆。下のディレクトリがあると親ディレクトリは削除できない。 そういう意味では子に親が支配されてる。 あと、NFSとかnullfsでループバックマウントする場合、 子のディレクトリを別の場所にマウントすると まさに親ディレクトリに関係なく子のディレクトリにアクセスできる。 ディレクトリ間は単にリンクしあっているだけであって、支配関係はない。
854 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 22:40:38 ] >>852 指標にはなるでしょ。 根拠をしめしてるだけ、ちゃんと示してる。 >>853 削除できないようにしてるだけ。
855 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 22:59:03 ] いったいなんのスレだここはw
856 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/08(木) 05:17:48 ] こういう宗教戦争があるのがUNIX板のいいところ
857 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/08(木) 08:25:57 ] どうでもいいが、>>836 で正解もらってるのに、 >>835 = >>832 から礼の一言もなしに書き逃げしてるなw