1 :
名称未設定 :
05/01/07 14:15:33 ID:+GAIasoN ■シェルスクリプトとは? Mac OS XのTerminalでは色々な命令を文字で入力して実行できますが、 複数の命令をパイプや変数や条件分岐ループなどで組み合わせると 手作業では面倒な複雑な作業なども行わせる事ができます。 これがシェルスクリプトです。 テキストファイルに書けばいいので特別な開発環境などは必要ありません。 ■このスレは 自分の作ったシェルスクリプトを発表したり、Tipsについて話したりするスレです。 どんどん便利なスクリプトを発表してください。 初心者が質問したり、上級者がアドバイスしたりといった事もOKとします。 関連して「ここはPerlの方がいいよ」「いやここはsedで」という事もあると思うので、それらの話もしてください。
2 :
名称未設定 :05/01/07 14:31:59 ID:Uw1mlu3N
3 :
名称未設定 :05/01/07 15:12:05 ID:MWuih740
4 :
名称未設定 :05/01/07 15:21:34 ID:OHNKMLVD
>>1 乙。
>>3 >改行と文字コードの変えられるテキストエディタ
俺はJedit使ってるけど、無料じゃないし、
他にいいのある?
6 :
名称未設定 :05/01/07 15:28:48 ID:LGY7ri5t
miが定番じゃないのか?
7 :
名称未設定 :05/01/07 15:34:04 ID:MWuih740
>>4 フリーウェア(というかドネーションウェア)
のエディタ『mi』は『モード』による予約語の色分けなど、
コーディング向けの機能を備えています。
8 :
名称未設定 :05/01/07 15:48:51 ID:MWuih740
■シェルスクリプト最初の一歩 miで新規書類を開いてください。「標準」でいいです。 #!/bin/sh echo 'Hello, world' これを改行がLF(UNIX)で保存してください。 ファイル名はHello.shとかでいいでしょう。 次にターミナルを起動して、cdコマンドでさっきHello.shを保存した所に行ってください。 % chmod u+x Hello.sh で、Hello.shが実行できるようになります。 % ./Hello.sh と入力してみましょう。
9 :
名称未設定 :05/01/07 17:29:28 ID:JcEJVRnN
漏れはmiかKEditつこてる 完成度が高いのはmiだね
10 :
名称未設定 :05/01/07 18:14:40 ID:9Sa+cBAS
■シェルスクリプト最初の二歩 miで新規書類を開いてください。「標準」でいいです。 #!/bin/sh TARGET=$HOME/Documents MAKE_SLIM=/usr/rm -rf $MAKE_SLIM $TARGET これを改行がLF(UNIX)で保存してください。 ファイル名はHello.shとかでいいでしょう。 次にターミナルを起動して、cdコマンドでさっきHello.shを保存した所に行ってください。 % chmod u+x Hello.sh で、Hello.shが実行できるようになります。 % ./Hello.sh と入力してみましょう。
やめれ
12 :
名称未設定 :05/01/07 18:19:08 ID:9Sa+cBAS
大丈夫、間違っているからorz
13 :
名称未設定 :05/01/07 19:01:13 ID:uHvP5+4j
14 :
名称未設定 :05/01/07 19:02:03 ID:uHvP5+4j
東京、静岡、浜松、熊本、鹿児島、枕崎、福岡、佐賀、大分、宮崎、長崎
における、選択された年月の最低気温や最高気温の平均値を
一覧表示します。
これは便利なので貼っておきます。必要ないと思われる方はスルーで。
↓こんな感じ。
eelsPBG4:~ sheel$ ./sh/nwbachhi.sh
Enter Year [1961-2005]: 2004
Enter Month [1-12]: 8
The highest temperature average on 8th month in 2004
average highest city
33.883870 36.6 Kumamoto
31.593548 34.3 Makurazaki
33.077419 35.0 Kagoshima
31.022580 36.5 Tokyo
30.948387 34.9 Hamamatsu
30.887096 36.2 Shizuoka
33.225806 36.6 Saga
32.509677 36.6 Fukuoka
33.019354 36.2 Nagasaki
31.516129 34.6 Oita
31.203225 34.8 Miyazaki
ソース
http://sheel.mydns.jp/~sheel/nwbachlow.sh http://sheel.mydns.jp/~sheel/nwbachhi.sh
15 :
名称未設定 :05/01/07 19:02:21 ID:JzXdDoMI
ヤッパリキタ━━━ヽ(∀゚ )人(゚∀゚)人( ゚∀)人(∀゚ )人(゚∀゚)人( ゚∀)ノ━━━ !!!
16 :
名称未設定 :05/01/07 19:05:22 ID:aLu0xG7U
最近の#!/bin/shで始まるスクリプトって、潔く#!/bin/bashに しちまった方がいいんじゃねーのか。
17 :
名称未設定 :05/01/07 19:49:09 ID:JcEJVRnN
逝くないとおもいます!! 漏れtcshだし(単に好きなだけ)。 あと質問。zshなばやい、sh/tcshでは動かない様なbash依存なscriptを動かせるの? いくら廃人向けshellでも、ダメポな気がするけど。
18 :
名称未設定 :05/01/07 20:00:09 ID:LGY7ri5t
>>17 ???
ログインシェルが何だろが#!の後に書いたシェルが使われるんですが。
sh hoge.shでもいいし。
19 :
名称未設定 :05/01/07 20:04:57 ID:JcEJVRnN
あぁ、やってしまった…。 なんて厨な事を書いてしまったんだ… もうだめぽ('A`)
20 :
名称未設定 :05/01/07 20:51:58 ID:MWuih740
だいじょうぶ。 ここは初心者OKのスレ。
21 :
名称未設定 :05/01/07 20:52:51 ID:MWuih740
むしろFAQになりそうな疑問を出したという事でGood Job !!
22 :
名称未設定 :05/01/07 21:54:10 ID:j5XZQ6VG
>>14 糞みたいなソースだな。もっと精進しろよ。
23 :
名称未設定 :05/01/07 23:12:42 ID:GIOycl+N
>>14 とりあえずファイル名を .sh.txt にするか .sh を text/plain にして
24 :
名称未設定 :05/01/07 23:22:16 ID:j5XZQ6VG
25 :
名称未設定 :05/01/07 23:23:26 ID:j5XZQ6VG
26 :
名称未設定 :05/01/07 23:24:28 ID:j5XZQ6VG
あと、 今、手動でsshでアクセスして.shを.sh.txtへmvしたんですけど、 これって確かsedかなんかつかえば一括処理が可能な気がするんですが、 具体的にどんなふうにやればいいんですか?
28 :
名称未設定 :05/01/08 00:12:41 ID:rhKAWMOS
iPodにiTunesで作ったEQセッティングを反映させるために、 iPod上でEQ名として確認できるようにしたいのですが、 どういうスクリプトを書けばいいのか教えて下さい。
29 :
名称未設定 :05/01/08 00:13:43 ID:MSu7zh3d
やめろと言っただろ! これでUNIX板は当分マカーたたきで盛り上がるな。 自動化君のときもそうだったけど、 他人でもマカーが叩かれてるといきづらくなるんだよね。
やば、せめて転載にするべきだった…。いつもごめんなさい。
31 :
名称未設定 :05/01/08 01:14:56 ID:KINJa0I2
他人の書いたコードを読むのはとても疲れるとわかった。 俺短いのしか書かないし。
32 :
名称未設定 :05/01/08 03:13:33 ID:6M3O+suU
普通AppleScriptなんだろうけど、/Developer/Tools/* を使うという事で。 fileinfo=/Developer/Tools/GetFileInfo mv=/Developer/Tools/MvMac pushd ${from} >/dev/null ftype='' for i in * ; do ftype=`${fileinfo} -t ${i}` case ${ftype} in ¥"≪ファイルタイプ1≫¥") ≪処理≫ ;; ¥"≪ファイルタイプ2≫¥") ≪処理≫ ;; esac done popd >/dev/null exit 0
33 :
名称未設定 :05/01/08 06:12:37 ID:WmiQL12s
34 :
名称未設定 :05/01/08 15:03:47 ID:Hhss9+nh
>>25 内容はともかくとして醜すぎ。
まずはもっとコメントをつけれ。何やってるかさっぱり分からん。
if や while ループ内はインデントしてくれ。読みにくい。
変数名に dummy とか s とか使うな。意味不明、解読不能。
全体に長いので関数を使って分割してみれば?
if test "$citytypein" -eq 1 ...
case 使うのが普通の感覚だと思われ。
txt=`curl 〜`
ファイルに落として使うべき。変数に格納できるデータサイズには限りがある。
URL は " で囲めば ¥& は普通に & と書けて見やすさUp。
中の変数は ${month} とカッコをつけておくとよい。
if test "$year" -gt "$thisyear" その他あちこち。
-gt などは数値の比較に使うのだから " はつけない。
冒頭で PATH を設定すること。これ基本。
35 :
25 :05/01/08 20:41:15 ID:BgVyDm2f
>>34 非常に参考になります。
今ちょい時間がないのでまた時間ができたときにいろいろと吟味してみます。
こういう意見を待っていますた。
人に見せるスクリプトの場合は、コメントも重要だけど 「意味のある変数名・関数名」をつけることをお勧めしておきましょう。 それと、自分はこの場合あんまり気にしなくてもいいとは思ってるんだけど、 シェルスクリプト内での外部コマンドはフルパスで指定するのがうちでのしきたり。 もうひとつ、一時ファイルには /tmp/foo.$$ みたいなファイル名をつけるのもしきたり。
37 :
名称未設定 :05/01/09 17:30:05 ID:6TcZRWlc
> シェルスクリプト内での外部コマンドはフルパスで指定するのがうちでのしきたり。 なんで PATH 使わないのだろうか。いちいち if /bin/test とかすんの? > 一時ファイルには /tmp/foo.$$ みたいなファイル名をつけるのもしきたり 古のしきたりです。これから始める人はマネしないように。 TMPFILE=`mktemp /tmp/foo.XXXXXX` とかしてつくらないとセキュリティが甘くなります。 スクリプトの見栄えは /etc/rc.boot とか /usr/X11R6/bin 下に あるやつとか見ると参考になるかな。
38 :
名称未設定 :05/01/11 21:15:28 ID:tsqtiQEb
ほとんどなんでも出来る自由度の高いシェルスクリプトを教えてあげよう。 システムコールも使えるぞ。しかもとても簡単だ。 % cat <<EOL | gcc -xc - -o /tmp/hoge && /tmp/hoge && rm -f /tmp/hoge #include <stdio.h> int main(void) { /* ここにやりたいことを間違えずに書く。 */ /* ... */ return 0; } EOL
39 :
名称未設定 :05/01/11 21:27:16 ID:yurdvSaa
ワラタ
40 :
名称未設定 :05/01/11 23:38:42 ID:bCcg0OUI
>>38 CやXcodeのスレも荒らされるわけで…。
紙なんでぼろが出ていますが。 > なんで PATH 使わないのだろうか。いちいち if /bin/test とかすんの? …はい、フルパスに得体の知れない安心感を感じます。 そこまで悪い習慣でもないかと思っていましたが、 変な好みを押し付けることになっていたら、ごめんなさい。 > 古のしきたりです。これから始める人はマネしないように。 やめます。 シンボリックリンク攻撃のまねごとをして、合点しました。 mktemp(1) を使えば、作成しようとしたファイルと同名のファイルが (万が一) すでに存在している場合でも、エラーを返してくれますね。
42 :
名称未設定 :05/01/12 23:58:10 ID:UAHJFjiH
結局一時ファイルはどんな名前がいいんでしょう?? あと、/tmp/の中身って、勝手に消えてくれるんでしょうか? そのタイミングは?
43 :
名称未設定 :05/01/13 01:05:39 ID:In7mfj0k
なにが「ワラタ」のか教えてほしい
>>42 mktemp /tmp/foo.XXXXXX を実行して返ってくる値がおすすめなのでは。
(fooはあんたの好きな文字、典型的にはスクリプト名とかかな?)
/tmp 以下のファイルは再起動時に消えると思う。
>>43 「シェルスクリプト」と言っておきながらその実体がCプログラムである点
45 :
名称未設定 :05/01/13 02:00:12 ID:ugV7KcoW
でも自分でCとかJavaとかで単純なプログラムができれば
それをシェルスクリプトと連携させられてきっと便利ですよね。
>>44 えーとすいません。
『.XXXXXX』っていうのは、任意のアルファベット?
それともそのまんまですか?
っていうかman of mktempをGoogleで検索してきた方がいいですかね。すいません。
47 :
名称未設定 :05/01/13 03:43:40 ID:ugV7KcoW
ありがとうございます。
48 :
名称未設定 :05/01/13 04:04:14 ID:ugV7KcoW
50 :
名称未設定 :05/01/13 15:51:06 ID:ugV7KcoW
>>49 半分冗談みたいな書き込みに対して
かゆいところに手が届くレスありがとうございます。
あのページ、そんな区分になってたのですね。
検索してみましたが普通のコマンドのmktempのページはないっぽいですね?
未翻訳?
別のところで解説のページ見つけましたが。
内部的にも安心なのですね。
ちょっと心配してたのでほっとしました。
51 :
25 :05/01/15 15:05:58 ID:S4ny4jdG
52 :
名称未設定 :05/01/15 15:27:48 ID:ro77sM5J
53 :
25 :05/01/15 15:52:37 ID:S4ny4jdG
54 :
名称未設定 :05/01/15 15:57:35 ID:ro77sM5J
55 :
名称未設定 :05/01/15 16:00:14 ID:01h8G+8A
あんたそればっかりだね
56 :
名称未設定 :05/01/15 16:26:31 ID:ro77sM5J
ぎくっ。 いやこっちのスレの方が何かレスあるかなーと思って。
57 :
25 :05/01/15 16:48:41 ID:S4ny4jdG
>>54 すまんが勉強したいので
そのfind以下の意味を教えてくれんか。
58 :
25 :05/01/15 16:49:27 ID:S4ny4jdG
なんならお返しに
>>25 の意味不明なところがあったら
教えてやってもいいので。
59 :
名称未設定 :05/01/15 17:42:56 ID:bESoWFjV
>>57 find # ファイル検索する
. # カレントディレクトリ以下を
-name # ファイル名で
"*.txt" # 拡張子にtxtが付いたものを
-print0 # 出力間をヌル文字で区切って
| # 標準出力を次なるコマンドに渡す
xargs # 標準入力を次なるコマンドに引数として渡す
-0 # 入力はヌル文字で区切られているものとして扱う
grep # 引数で渡されたパスのファイルの中身をテキスト検索する
"シェルスクリプト" # 中身に"シェルスクリプト"と書かれた行が出てきたら、その行を標準出力に書き出す
# {} \;の指定無き場合は、暗黙のうちにここにxargsから渡された引数が展開される
基本ですな。
60 :
25 :05/01/15 19:34:12 ID:s9VHqUxS
>>59 ありがとう。
ものすごく勉強になります。
こんなふうにいちいち初心者向けに説明してもらえると
うれしいです。
61 :
25 :05/01/15 19:41:16 ID:s9VHqUxS
>>59 ありがとう。これはホントに便利だと気がついたので
さっそくこんなふうにshにして登録しました。
#!/bin/sh
echo -n "What do you want to find?: "
read text
find . -name "*.txt" -print0 | xargs -0 grep "$text"
一応言っておくと、 read を使って対話形式にするのは楽しいけれど 実際にそれを使っている人は少数派かと 君に対しては何度かいわれているみたいだけど、これくらいなら alias の領分 alias tfind=" find . -name *.txt -print0 | xargs -0 grep" tfind hoge まあ、そうしちゃうとスレ違いなんだけどね。 もっというと、自分はどっちかというと grep -r を多用
63 :
名称未設定 :05/01/15 20:52:42 ID:mCHrxJm6
64 :
25 :05/01/15 21:40:33 ID:s9VHqUxS
>>62 ほほう。aliasというのもあるんだね。
一応メモっとくよ。実際便利そうだし。
俺がshにハマっているのも「便利だから」ってのが理由だし、
他に同等のことで「簡単に便利にできる」ものがあったら
どんどん紹介してほしい。
aliasの欠点はせっかく登録してたのに
再インストールとかするとまた登録するのが大変そうってのが
ありそうなんだけどそのへんどうなの?
65 :
25 :05/01/15 21:48:01 ID:s9VHqUxS
>>62 grep -r hoge
とかやってみたけど使い方がよくわからん。
どうやって-rオプションを使うのか具体例で教えれ。
66 :
名称未設定 :05/01/15 22:10:26 ID:TN33CMCV
>> .bashrcとかにかけばいいんじゃねーの?
67 :
25 :05/01/15 22:17:25 ID:s9VHqUxS
>>66 ラテン語しゃべってんじゃねぇ〜よ。
意味がわかんないっつ〜の。
>>59 を見習って書き直し。
68 :
名称未設定 :05/01/15 22:23:30 ID:N5DgVqsz
言葉の通りだろ・・・ いくらなんでも酷過ぎないか?
69 :
25 :05/01/15 22:28:19 ID:s9VHqUxS
>>68 じゃ、おまえはもうしゃべらなくていいから
誰か神が
>>66 を日本語に翻訳してくれんか?
70 :
名称未設定 :05/01/15 22:40:53 ID:ccDJoVLo
>>69 > 誰か神が
>>66 を日本語に翻訳してくれんか?
オッケー!
.bashrcとかにかけばいいんじゃねーの?
71 :
25 :05/01/15 22:48:11 ID:s9VHqUxS
すみません。
誰か
>>70 を日本語に直してくれませんか?
72 :
66 :05/01/15 23:04:43 ID:TN33CMCV
あれ、.loginだったけ?忘れた まぁ、ホームディレクトリのログインごとに読み込むファイルに書いておいて、 →バックアップのときにホームディレクトリを丸ごとバックアップ →再インストールでそのファイルからその設定をもう一度する or ファイルを置き換える って意味です。
73 :
名称未設定 :05/01/15 23:06:48 ID:D14HmYoA
.bashrcなどに書けばよろしいのではないでしょうか。
74 :
25 :05/01/15 23:10:39 ID:s9VHqUxS
>>72 なるほど納得。乙。
まぁしかしなんかそれだと
自分用にカスタマイズされたTerminalって感じで
あんま好きでないかな。aliasを使う方法って。
あくまで外部プログラムみたいな感覚で使えるshの方が合ってるような気がする。俺には。
75 :
25 :05/01/15 23:12:47 ID:s9VHqUxS
ちなみにおまいらは他にどんなシェルスクリプトを 便利に使ってる? シェルスクリプトでなくてもいいから aliasを使った方法とか、単純なコマンドでもいいから 「こういうことをこんなふうに便利に使ってるよ」 って感じで紹介してくれるとそれだけで勉強になるので紹介してほしい。
76 :
名称未設定 :05/01/15 23:13:30 ID:mCHrxJm6
~/.bashrc はbash起動時に読み込まれるスクリプト。 環境変数やaliasなど自分用の設定を書いておいたり 実行したいコマンドを書いておくわけね。 こんなことも知らんでスクリプト云々を語るのは10年早い 初心者スレ行きなはれ
77 :
名称未設定 :05/01/15 23:21:08 ID:X3onkvBn
78 :
名称未設定 :05/01/15 23:39:09 ID:bESoWFjV
pbpaste, pbcopyとフィルタを使ったテキスト加工のシェルスクリプトなんかは Macっぽいんでは。 #クリップボード中のテキストの改行文字をCRLFからCRに置換 pbpaste | tr \\r\\n \\r | pbcopy あとは、osascriptですか。これもMacならでは。 sayなんかをスクリプトから使うとおもしろいかも。 こういうの25さんが好きそう。 #!/bin/sh #答えをしゃべる計算機 echo -n "Keisan Suruyo!: " read expression answer=`echo $expression | bc` echo "say \"$answer\"" | osascript
80 :
25 :05/01/15 23:47:17 ID:s9VHqUxS
>>76 なんだおまえは。
ここは俺様専用のスレなんだぞ。
俺様が外で悪さをしないように誰かに隔離されてるんだ。
部外者がごちゃごちゃ言うヒマあったら
もっと俺様に有用な情報を提供しろ。
ん??? す、すまん。正直すまんかた・・・orz
最後の行と
>>77 だけ見てつい脊髄反射でかいてしまった。
>>76 は十分有用なことをかいてるじゃないか。乙。
81 :
名称未設定 :05/01/15 23:51:18 ID:bESoWFjV
そこはいいリファレンスですよね。例文は絶対必要。 MANページ見てちっともイメージ沸かないときにはそこに行きます。 ググれば自然とたどり着くというか。 その昔、X68030にNetBSD入れた経験あり。 当時は全然使い方分からなくてすぐ抜いたけど。
82 :
25 :05/01/15 23:51:19 ID:s9VHqUxS
>>78 >#クリップボード中のテキストの改行文字をCRLFからCRに置換
>pbpaste | tr \\r\\n \\r | pbcopy
をいをいをいおいをいおいおいおい!!!!
いいよいいよ〜!@!!!!!!
こ〜ゆ〜の待ってました〜〜〜〜〜!!!
かなりおもろい〜!
>#!/bin/sh
>#答えをしゃべる計算機
うを〜〜〜〜〜〜〜!!がお!!!!!!!
か、感動した!!!!!!!!!!!!!!
すげぇ〜〜〜〜〜〜、俺!!!!
83 :
25 :05/01/15 23:56:37 ID:s9VHqUxS
>>78 ん?
3+1
とか打ち込んでも
3
としかsayしてくれんな・・・。
>>79 具体例ありがとう。
そのリンクも読んでみるよ。ちょいタバコ吸ってくるね。
84 :
25 :05/01/16 00:06:11 ID:9HTtBDN0
>>78 あ、わかった。
1+3
じゃダメで、
1 + 3
ならOKだった。
これ、ほんとおもろいわ。
85 :
名称未設定 :05/01/16 00:16:01 ID:bjnRbQOy
egrep "(.+).co.jp" ファイルパス | echo ¥1 grep で後方参照だけを表示したいのですが↑で上手く行きませんです。
86 :
25 :05/01/16 00:26:44 ID:9HTtBDN0
>>85 具体的に検索したい文字列もペーストしてみれ。
こういう行がだだ〜っとあって、
そのなかからこんな感じで出力したい、っていうふうに。
87 :
名称未設定 :05/01/16 00:43:35 ID:bjnRbQOy
>>86 テキストファイルに
tcn-catv.ne.jp
secom-sis.co.jp
oricon.jp
nec.co.jp
yahoo.co.jp
toppan.co.jp
synapse.ne.jp
rakuten.co.jp
こういう文字列がある中から
secom-sis
oricon.jp
nec
yahoo
toppan
rakuten
ていうふうに、.co.jpの前部分だけをターミナルで表示したいんでつ。。
88 :
名称未設定 :05/01/16 00:44:40 ID:sr+u6daI
>>85 grepの後方参照は、マッチさせる正規表現の中だけで使えると思うので、別の
ツールをかまさないと無理じゃないですかね。そもそもgrepは行抜き出しする
だけで、加工の機能は無いと思いますし。
この場合の後方参照は、例えば、「あああああ」「わんわん」「にゃんにゃん」
みたいな繰り返しにマッチさせることができるものです。
test.txt
--------------
klkhaksejkjejshk
kjhkjhogehoge
kjskdjaa
--------------
cat test.txt | egrep "(.+)\1"
kjhkjhogehoge (hogehogeが繰り返しなのでマッチ)
kjskdjaa (aaが繰り返しなのでマッチ)
ちなみに | を立てると、その前と後ろは別コマンドなので、うまくいかなくて
当然です。
egrep ".+\.co\.jp" ファイルパス | sed -e 's/\(..*\)\.co\.jp/\1/'
これでどうですか。
各行にはurlしか無いものとしてます。
sedには+が無いので、.+は..*です。
89 :
名称未設定 :05/01/16 01:01:24 ID:bjnRbQOy
>>88 上手くいきそうですヽ( ´ー`)ノワーイ
みなさん大変ありがとう御座いました!
sed -n '/.co.jp$/s/.co.jp$//p'
91 :
名称未設定 :05/01/16 01:14:58 ID:sr+u6daI
でもよく考えたら、特定のテキストに含まれる行からの抜き出しならegrepを使 う必要はなくて、 sed -e 's/\(..*\)\.co\.jp/\1/p;d' ファイルパス でいいような。
93 :
名称未設定 :05/01/16 01:18:04 ID:sr+u6daI
カブタ
94 :
25 :05/01/16 01:19:03 ID:9HTtBDN0
>>91 p:d
の意味で何ですか?
\1
の意味って何ですか?
96 :
25 :05/01/16 01:24:14 ID:9HTtBDN0
sedって便利だねぇ・・・。
97 :
名称未設定 :05/01/16 01:35:25 ID:sr+u6daI
>>94 >p:d
>の意味で何ですか?
正確にはp;dですが。
ワンライナーで書くと上記のようになりますが、スクリプトファイルに書くと
s/\(..*\)\.co\.jp/\1/p
d
こんな感じです。間の;は改行の代わりです。
正規表現\(..*\)\.co\.jpにマッチした行は最後のp命令でプリントされますが、
マッチしなかった行は、直後のd命令でデリートされます。
Paperさんのように、出力抑制オプション-nを立てておけば必要のないものです。
-nを立てずにdを付けないとどうなるか。暗黙のpの原則(デフォルト)が働き、
s/\(..*\)\.co\.jp/\1/p にマッチした行はそこでプリントされ、スクリプトの
最後で再度プリントされるので、結果として入力行が全部プリントされ、マッ
チした行はダブってプリントされてしまいます。
パターンアドレス使わなくてもいいじゃん自分。あほ… 勉強になりました。教授と呼ばせてください って、うちの大学の教授じゃないですよね? >> 97 (スルーしてくださいねー) ざつだんすまそ。
99 :
名称未設定 :05/01/16 01:56:51 ID:sr+u6daI
>\1
>の意味って何ですか?
これは後方参照というもので、\(と\)で囲った正規表現にマッチした文字列を
後で呼び出せるのです。正規表現の中で\(\)が登場すると、登場した順に番号
が割り振られます。最初の\(\)は\1で呼び出せ、続く\(\)は\2で呼び出せます。
grepの説明で例を出したように、マッチさせる正規表現の中でも使えます。こ
の場合は、繰り返しにマッチさせたいときに使います。
後方参照は非常に重要な機能なので、正規表現そのものと同時に是非理解した
方がいいですよ。
例)123とabcが入れ替わります。
echo '123 abc' | sed -e 's/\([0-9][0-9]*\) \([a-z][a-z]*\)/\2 \1/'
ツールによって\(\)の書き方と呼び出し方がちょっと違うので、ほかのツール
で使う場合は確認が必要です。
>>98 いや、アドレスは重要ですよ。ちなみに、アドレスに正規表現を使った場合は、
以下のようにも書けます。アドレスの正規表現を、置換命令の正規表現に流用
できるんです。最少の表記じゃないですかね。
sed -n '/.co.jp$/s///p' ファイルパス
100 :
名称未設定 :05/01/16 02:14:28 ID:b2dqR9y4
Perlで書いたら perl -wne 'm/(.*).co.jp/;print $1' で合ってますか? 前に cat "なんちゃら.txt" | を付けないとだめかな。
101 :
25 :05/01/16 08:25:28 ID:uhmU3M3t
>>97 >>99 なるほどむちゃむちゃ勉強になります。
かなりデキル方とお見受けします。
102 :
名称未設定 :05/01/17 01:47:50 ID:lUzAuGJY
CPANで色々突っ込もうと思ったけど最初の設定でつまずいた・・。 lynxとか入ってねーし。 (USのAppleにインストールパッケージあり) orz 設定のリセットって ホーム/.cpan/CPAN/MyConfig.pm を捨てればいいのかな? MyConfig.pm~ なんてのもあるんですが。
103 :
名称未設定 :05/01/17 02:52:42 ID:4Y72UR+d
>>102 CPANでなんかのコマンドが上書きされちゃうってバグ
(治ってるかどうかは知らん)があるって読んだ事がある。
geekのスレのどっかに出てる。気をつけれ
104 :
名称未設定 :05/01/17 02:56:31 ID:lUzAuGJY
>>103 うっそーん!!
早速見に行きます。
でも手遅れかも。。
orz
教えてくれてありがとうございます。
105 :
名称未設定 :05/01/17 05:05:35 ID:lUzAuGJY
あのー・・。 ある事に気付いてしまったのですが。 川崎君?25氏?の以前のシェルスクリプトで、 『mail』コマンドが使ってありましたよね? という事は、彼のMacではsendmailかPostfixとかいうものが設定されて動いていて、 つまり、メール送信のサーバとして稼働してるって事ですよね? それって、大丈夫なんでしょうか。 メールサーバとかはけっこう危険があぶない的な事を読んだりしたのですが。
106 :
名称未設定 :05/01/17 05:38:54 ID:pQyXUBxc
ルータとかfwで塞いであれば大丈夫でしょ。 内から外に行くだけなら問題ナス。
107 :
名称未設定 :05/01/17 05:51:04 ID:lUzAuGJY
あ、そうなんですか・・。 内から外の時はポートが開いてなくても大丈夫なんですか? (基本的な事がわかってなくてすいません) では一応安心ですね。 OS X標準のFWは設定がよくないからどうのっていう書き込みもどこかで読みましたが・・。 しかしスクリプトで得た情報をケータイとかにメールするだけだったら 普通にプロバイダのサーバを経由してもいいですよね? 何か適当にクライアントでっちあげるとかして。
108 :
名称未設定 :05/01/17 06:09:28 ID:QkvGstYM
109 :
名称未設定 :05/01/17 06:34:53 ID:pQyXUBxc
>>107 外から内は閉じてるけど、
内から外は開いてるから大丈夫です。
ウーンでも自信無くなってきた。
実際MTAの設定はムズくてマトモに動かしたことがない。
仮に鯖を立てたPCがノーガードでも、ルータがはさまっていれば大丈夫です。
外から見えるのはルータで、LAN側のPCに振られているのはローカルIPだから、
IPマスカレードの設定(やDMZ)がしてないと、外からのアクセスはできません。
ルータ自体にもfwの機能がありますしね。
外サバを使ってメールするんだったら、nomailとかいいんじゃないですか。
http://www.ku3g.org/negi/nomail/ その昔、Linux Zaurus上で使ってました。写メールモドキする用で。
daemonじゃないので、手動でスプールから送信しないといけないですけどね。
それも込みでスクリプトから処理するか、cronで回しちゃえばいい話で。
110 :
名称未設定 :05/01/17 07:06:21 ID:pQyXUBxc
昔書いたのが残ってたので貼っておきます。写メールモドキです。
nomailを使ってます。スプールに直突っ込みします。
http://joechin.hp.infoseek.co.jp/photomailer.sh デジカメより渡されたSDカードから、DPOFでプリント指定した画像を120*160に
縮小かつ縦位置に回転して、それをbase64エンコードして特定の相手に送ると
いうものです。本文はZaurus標準のメモ帳で作るというもんでした。
uniqidを作る手法や、jpegをパイプ通して加工するところなんかは結構おもし
ろげかも。Perlならライブラリは無尽蔵にあるし、PerlMagickもあることだし、
もっと楽にできるんでしょうけどね。
結局、完成と前後して相手が携帯以外からのメールを着信拒否しやがって、日
の目を見てません。
111 :
名称未設定 :05/01/17 07:41:47 ID:keeO7O2Q
嫌らしげな行動と性格が伝わって来る。拒否されたのもそのせいだよ。
112 :
25 :05/01/17 09:26:08 ID:tu1Mw69D
>>105 mailコマンドはsendmailとかPostfixとか関係ないよ。
OSXのTerminalは(ほかOSではどうかしらんが)
なんも設定しなたくても単に
mail
これだけでmailしてくれる。
113 :
名称未設定 :05/01/17 16:10:43 ID:lUzAuGJY
10.3で変わったのかな?
sendmailからPostfixに変わったらしい?し。
俺10.2.8だけど、
echo 'test' | mail -s 'test'
[email protected] (←自分のアドレス)
とかしても何も起きないよ?
ただ黙って次のコマンド待ちになるだけ。
114 :
名称未設定 :05/01/17 16:17:34 ID:lUzAuGJY
ターミナルのman mailを見ても、(俺が理解できる範囲では)そのへんの事、何も書いてないんだよね。 ネットで調べるとmailコマンドはsendmailに依頼するだけっぽい事が書いてあるんだけど。
115 :
名称未設定 :05/01/17 17:44:30 ID:lUzAuGJY
某スレで出ていた話がネタ元なんですが、 1.対象フォルダから特定の拡張子のファイルを検索 2.対象フォルダをルートとしたディレクトリ構造を維持したまま それらのファイルをコピー先のフォルダにコピー という働きをするシェルスクリプトを教えてください。 findでファイルを検索して変数に入れてforを使えばいいのかな? と思うんですが、わかりません・・。
116 :
名称未設定 :05/01/17 17:54:12 ID:VL7i1LRO
コマンドなんざ間違えながら覚えて行くもんだ。ちったあ試行錯誤しれ。ナァンチテ
rsync と思いつきで言ってみる。 調べてみようかな。
正解は神の光臨を待つとして、 思いつきの回答1 zshを使って tar cf hoge.tar **/*.txt みたいな。
カレントディレクトリいかに含まれる拡張子 .jpg のファイルを ディレクトリ構造を保ったまま /tmp にコピー zsh -c "tar cf - **/*.jpg | tar xvf - -C /tmp"
どうしてもfindを使いたくないのか自分 思いつきの回答2 rsync -av --include=¥*/ --include=¥*.jpg --exclude ¥* . /tmp
121 :
名称未設定 :05/01/17 19:32:23 ID:lUzAuGJY,
レスありがとうございます。
これからそれぞれ調べながら勉強させていただきます。
2点ほど質問いいでしょうか。
zshの事は全然わからないのですが、
>>118 でzshならではのポイントはどこなのでしょうか?
tarでやった場合、コピー先にすでにディレクトリ構造の一部が存在していた場合はどうなりますか?
全部上書きですか?
また、引き続き他の方の解答例もお願いします。
>>121 >
>>118 でzshならではのポイントはどこなのでしょうか?
**/* のつもりでしたが、 bash でも使えますね。
> 全部上書きですか?
さあ?
飯を食ってきますので、それまでに検証よろ
124 :
名称未設定 :05/01/17 23:41:15 ID:pQyXUBxc
>>112 さん
mail -s test
[email protected] test
.
でもって、
sudo cat /var/log/mail.log | tail -1
を見ると、やっぱpostfixに投げてるようですよ(on 10.3.7)。
でも確かに、全然設定せずに届きました!
つまり、少なくとも10.3.7ではデフォルトでpostfixが動作してるってことですね。
知らんかった!!
ルータでsmtpをIPマスカレードしなくても送れましたから、
内から外が通じてればOKのようです。
スプールは~/Mail/queueなのかな。
ちとでかけるので後でやってみます。
125 :
名称未設定 :05/01/18 00:52:51 ID:J1gI8jSI
>>124 そりゃデフォルトで起動しているんだろう。でもエラーメールが発生
したら、そのメールは何処に帰ってくるんだ?デフォルトの設定では
そこまで面倒みてくれないから、そのまんま使うのはヤメレ。
126 :
25 :05/01/18 08:48:38 ID:E+o/jc5S
>>124 ああそうなんだ。けっきょくpostfixに投げてるんだね。
mailとすればメールできるんであんま深く考えずに使ってた。
>>125 エラーメールは普通に戻ってくるよ。Terminalに
mail
のみを打ち込むと自分に届いたメールを見ることができる。
(エラーメールも含む)
この辺はUNIXの基本事項になるのできっちり覚えておこう。
127 :
名称未設定 :05/01/18 08:52:19 ID:X5HBdzre
> この辺はUNIXの基本事項になるのできっちり覚えておこう。 ワラタ バカウケ
128 :
25 :05/01/18 08:59:10 ID:E+o/jc5S
Unix端末というのは歴史的に複数のユーザーが使うものだったので、 ユーザー間のやりとり方法としてmailコマンドは標準でついている。 その辺の歴史から学ぶようにするといいかもね。
129 :
25 :05/01/18 11:36:57 ID:E+o/jc5S
130 :
名称未設定 :05/01/18 13:49:16 ID:YqdXndk7
>>126 125さんの言う通りです。
ローカルの架空ユーザに向けて打ったメールはエラーで戻ってきますけど、@入
りの外に向けて打ったメールは戻ってこないはずです。
外に向けて打ったメールのFrom欄はどうなってます?
[email protected] と
かなってません?
あなたがどこかに届け出たか、DynIP等で名前を借りるなどの手を打たない限り、
インターネッツ上に存在しないドメイン名なので、万が一To欄にあるアドレス
に届かなかった場合、「送り先の」メルサバが行き先不明で戻そうと思っても
これまた出し元不明で戻らず、戻らないと
[email protected] だとか
[email protected] 、みたいなところにも戻そうとしたりして、これまた当然届
かず、多大な負荷になるのでやっちゃダメってことなのです。
メールは送り先に届くまでに複数のサーバを経由するので、影響は等比級数的
に大きくなります。
届かなかった場合に諦めるまでの時間って、信頼性を上げるために結構長く設
定してある(恐らく数日レベル)と思うので、かなり痛いです。
メールは、届いたときより届かないときの方が負荷が大きいのです。
もちろん、ドメイン名を登録してあってもメールの到達性を確保しないと意味
がありせん。
>>109 で出したnomail等外鯖を使う方法を取ると、その辺りをあま
り考慮しなくていいのでおすすめです。
131 :
25 :05/01/18 16:17:19 ID:mbQueAwQ
>>130 いやだから実際戻ってくるんだって。
おまえも一度試してからほざけよ。
132 :
名称未設定 :05/01/18 17:10:15 ID:C0Hmy3au
>131 「ヲレが赤信号無視で渡っても無事だったので、常時赤信号で渡っても問題無し。」 と主張しても頭悪いだけだぞ。 まず、>130にちゃんと謝ってから、メールを理解してこいや。 蛇足だが、他の奴らにも理解しないままの状態でむやみに試さないように釘さしとく。 それから最近プロバイダがport25規制を始めてる理由もちゃんと理解しとくべき。
133 :
25 :05/01/18 17:17:23 ID:E+o/jc5S
いやだから実際にやってみろって。
>>130 の言ってることが全く意味不明というか杞憂であることがわかるから。
134 :
名称未設定 :05/01/18 18:40:34 ID:J1gI8jSI
135 :
25 :05/01/18 19:05:34 ID:FtKHAjIG
Last login: Tue Jan 18 18:30:55 on console Welcome to Darwin!;-) eelsPBG4:~ sheel$ postconf -n command_directory = /usr/sbin config_directory = /etc/postfix daemon_directory = /usr/libexec/postfix debug_peer_level = 2 inet_interfaces = localhost mail_owner = postfix mailq_path = /usr/bin/mailq manpage_directory = /usr/share/man mydomain_fallback = localhost mynetworks_style = host newaliases_path = /usr/bin/newaliases queue_directory = /private/var/spool/postfix readme_directory = /usr/share/doc/postfix sample_directory = /usr/share/doc/postfix/examples sendmail_path = /usr/sbin/sendmail setgid_group = postdrop unknown_local_recipient_reject_code = 450
136 :
名称未設定 :05/01/18 19:42:42 ID:J1gI8jSI
>>25 そんなどうでもいいところを晒しても仕方ない。25のいう
hogehoge.comというドメイン名も入っていないじゃねーか。
それと、hogehoge.comが自分の持ち物でないなら、サンプル
でも使うな。そういった用途にexample.**が予約されている。
それより、はげしくスレ違いという事にようやく気付いた。
正直スマンかった。続けるなら違うスレで。
137 :
名称未設定 :05/01/18 20:57:58 ID:BVBUldFA
いやココじゃないとダメ。
138 :
25 :05/01/18 21:38:29 ID:FqLA0/b0
>>136 意味不明。
俺は
>>134 で言われた通りにやってその結果を全てさらしただけであり、
それがどうでもいいところとかいうくらいなら
最初から
>>134 みたいなこと言うな、チンカスが。
あとyahoo.co.jpとかを晒しちゃいけないのなら、
自分のメールアドレスは晒すな、という意味か?
なんで自分のメールアドレスを晒しちゃいくないのかさっぱり意味がわからん。
MLとかじゃみんな普通に晒してるけど?
ちなみに俺のメアドは
[email protected] な。
文句があるヤツがいたらスパムでもどうぞ。10000倍にして返してやるから。
139 :
25 :05/01/18 22:03:19 ID:FqLA0/b0
ちなみに俺が試した限り、 mailコマンドで送信できるPOPサーバは yahoo.co.jpのみ。 他のmac.com、mx5.nisiq.netなどいろいろ試したが、 どれも 「eelsPBG4.localなんていうメールサーバはみつかりません。 なのでそちらにお返ししますね」 と起こられて、mailコマンドでエラーメッセージを見ることができる。 たぶんエラーは送信側つまり eelsPBG4.localがPOPサーバと交信中に 起こっていて、返ってくるというよりも、送れなかった、という感じ。 だからおまいらが心配しているような心配は無用ってこった。 わかったら、ちゃっちゃか自分でmailを試して見れ。
140 :
名称未設定 :05/01/18 22:16:57 ID:7BLJydXx
何も25に味方する訳じゃないが、勝手杉。もっと反省汁! >>ID:J1gI8jSI
141 :
名称未設定 :05/01/18 22:22:11 ID:BVBUldFA
142 :
25 :05/01/18 22:30:32 ID:FqLA0/b0
eelsPBG4:~ sheel$ echo test | mail
[email protected] eelsPBG4:~ sheel$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/mail/sheel": 1 message 1 new
>N 1 MAILER-DAEMON@eelsPB Tue Jan 18 22:29 66/2193 "Undelivered Mail Returned to Sender"
& 1
Message 1:
From MAILER-DAEMON Tue Jan 18 22:29:18 2005
X-Original-To:
[email protected] Delivered-To:
[email protected] Date: Tue, 18 Jan 2005 22:29:18 +0900 (JST)
From:
[email protected] (Mail Delivery System)
Subject: Undelivered Mail Returned to Sender
To:
[email protected] MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
boundary="51700119A25.1106054958/eelsPBG4.local"
This is a MIME-encapsulated message.
--51700119A25.1106054958/eelsPBG4.local
Content-Description: Notification
Content-Type: text/plain
This is the Postfix program at host eelsPBG4.local.
I'm sorry to have to inform you that the message returned
below could not be delivered to one or more destinations.
For further assistance, please send mail to <postmaster>
If you do so, please include this problem report. You can
delete your own text from the message returned below.
The Postfix program
<
[email protected] >: host smtp-mx.mac.com[17.250.248.49] said: 553 5.1.8
<
[email protected] >... Domain of sender address
[email protected] does not exist (in reply to MAIL FROM command)
--51700119A25.1106054958/eelsPBG4.local
Content-Description: Delivery error report
Content-Type: message/delivery-status
Reporting-MTA: dns; eelsPBG4.local
Arrival-Date: Tue, 18 Jan 2005 22:29:15 +0900 (JST)
Final-Recipient: rfc822;
[email protected] Action: failed
Status: 5.0.0
Diagnostic-Code: X-Postfix; host smtp-mx.mac.com[17.250.248.49] said: 553 5.1.8
<
[email protected] >... Domain of sender address
[email protected] does not exist (in reply to MAIL FROM command)
--51700119A25.1106054958/eelsPBG4.local
Content-Description: Undelivered Message
Content-Type: message/rfc822
Received: by eelsPBG4.local (Postfix, from userid 502)
id 51700119A25; Tue, 18 Jan 2005 22:29:15 +0900 (JST)
To:
[email protected] Message-Id: <
[email protected] >
Date: Tue, 18 Jan 2005 22:29:15 +0900 (JST)
From:
[email protected] (sheel)
test
--51700119A25.1106054958/eelsPBG4.local--
144 :
名称未設定 :05/01/19 02:10:32 ID:5AjmMelb
>>129 空行を削除するのは grep -v '^$' でどないだ?
テキストの加工がメインならperlあたりのほうがやりやすいよ
記号や空白の処理とかシェルは苦手
145 :
名称未設定 :05/01/19 05:27:01 ID:k+5xqEWI
アホさ満開〜 ヽ(´ー`)ノ
146 :
25 :05/01/19 08:56:16 ID:T8F6icXV
>>144 ふむ。
テキスト処理ならsedかperlと思ってたんだが、
どっちみちシェルから呼びだせるので
結局「どのコマンドを使うか」の問題であって、
「テキスト処理はシェルは苦手」とかいう話とは違うと思うが。
147 :
名称未設定 :05/01/19 11:58:01 ID:Jztkb/0D
シェルは苦手 ワラタ perl以外のコマンドは全てシェルの内部コマンドですかそうですかw
148 :
名称未設定 :05/01/19 13:04:20 ID:RQu2U8ax
まず疑問に答えてくれた事に礼を言えよ。
149 :
名称未設定 :05/01/19 13:35:19 ID:RQu2U8ax
perl -wpe 's/^[\s ]+$//' これでタブ、半角・全角スペース、改行のみの行を除去できる。 sedでも同じじゃないの?
150 :
名称未設定 :05/01/19 13:37:41 ID:KKvdaPXV
幸せな人w
151 :
名称未設定 :05/01/19 13:47:32 ID:RQu2U8ax
言っておくが144と俺は別人ですから。
152 :
名称未設定 :05/01/19 13:54:18 ID:fd9islFX
sed -e '/^[ \t]*$/d' メンバは半角s、全角s、タブ 0個以上なので空行にもマッチ
153 :
名称未設定 :05/01/19 14:10:12 ID:RQu2U8ax
ところで、パターンマッチ?が出てきたので思い出したんですけど、
先日テキストファイルをHTML化する簡単なスクリプトを書いてて思ったんですが、
2chの
>>1-10 みたいなアンカーの処理って難しそうですね。
2chブラウザはどうやって実現してるんだろ。
154 :
25 :05/01/19 14:19:30 ID:WwWL7Dsq
>>152 を含め、今まで出てきたやつは全部できなかったが
>>149 は神! これで空行を削除することができた。
しかし全角のみの行はこれでは削除できなかったが、
どうしてだろうか・・・orz
155 :
名称未設定 :05/01/19 18:59:15 ID:RQu2U8ax
>>154 > 全角のみの行はこれでは削除できなかった
文字コードが違うとか?
意外とSMTPクライアントって少ないのですかね。なんで見つからないんだろう…
面白がってくれそうなのをみつくろっておきました
>>129 (=25)
#!/bin/bash
# 1. 問題ないですけど、最初に一時ファイルを作るのがおすすめされてますね。一応。
html=`mktemp /tmp/test.XXXXXX`
curl -s
http://w3.org/ -o $html
# 2. mailbody1=... の行の sed -e "s/ //g" .... は長い上複数回使われているようなので、
# 関数にするか、w3mあたりを使って
# Shift_JISでHTMLを読んでJIS形式のテキストを吐く
w3m -Is -Oj -T text/html -dump $html | head
# 3. 気象庁の時にも思ったけど、情報源がXMLを採用している場合、情報の扱いが
# とっても楽になります。XHTMLとXMLを布教しておきます。
# xmlstarletを使って整形式のXMLから最初のtitleタグの中身を抜き出す
xml sel --net -T -t -v "//*[local-name()='title']" $html
157 :
名称未設定 :05/01/19 20:43:02 ID:RQu2U8ax
はい。ライブラリは結構見つかりますね。 Javaでならでっちあげたことがあります。個人的にはRubyでやってみたいんですけど。 SMTPサーバーののきっちりした設定も覚えておかにゃあならんな。
159 :
25 :05/01/19 22:42:27 ID:dYb4c++D
160 :
25 :05/01/19 22:46:04 ID:dYb4c++D
だ、だめだわ。gcのインスコまではうまくいったが w3cのmakeでどうも失敗してるっぽい。 まぁええわ。もうやめた。めんどくさい。
161 :
25 :05/01/20 00:14:53 ID:H/CLmUGK
162 :
名称未設定 :05/01/20 01:20:49 ID:otQ6Xs5j
なんか基本をスッ飛ばし過ぎな希ガス
163 :
25 :05/01/20 01:36:49 ID:H/CLmUGK
完ぺきになった。
これをcronで一日一回実行すれば
http://sheel.mydns.jp/~sheel/closeup.sh.txt これを整形して
http://www.nhk.or.jp/gendai/yotei.html こんなメールを送ってくれる↓
<1月19日(水)放送予定>
被災した子供たちを救え
〜インド洋大津波〜
500万人超と言われるインド洋大津波の被災者。いま、被災地では、救援や
(途中略)
活動などに密着し、被災地の子どもたちが置かれている現状と、救援活動の課題を伝える。
(NO.2021)
スタジオゲスト
クローディア・ハドスペスさん
(ユニセフ・バンダアチェ代表)
バースティアンさん
(ユニセフ・バンコク 緊急支援プロジェクト)
スタジオ出演
花澤 雄一郎(NHK国際部・記者)
<1月20日(木)放送予定>
性犯罪 再犯を防げ
幼児・児童を狙った性犯罪が後を絶たないなか、いま再犯が大きな問題にな(略
164 :
名称未設定 :05/01/20 02:14:50 ID:CErtLa24
ネットのソースをコピペして改造して ターミナルから 1番目の引き数:宛て先 2番目の引き数:題名 3番目の引き数:本文が書かれたテキストファイルのパス で外部のSMTPサーバを使ってメールの送信をするというクライアントを Perlででっちあげてみました。送信成功。 SMTPコマンドの意味もわかっとりゃしませんが。 これがあればsendmailとかPostfixとか動かさなくてもいいなっという事で、私も何か25氏のようなスクリプトを作ってみようかな。 ・・しかしどこに何のメールを送ろうかw
165 :
名称未設定 :05/01/20 02:51:23 ID:moO+zpA5
下のはパイプで全部つながってるけど、 こんな風に書いちゃってもOKだよ。 シェルスクリプトなんてWrite Onlyでいいんだけど……。 #!/bin/sh # comment 1 echo "hogeabc" | # comment 2 sed -e '{ s/hoge/hage/g y/abc/ABC/ }' | # comment 3 perl -e ' while(<>){ chomp; printf("%s\n", $_); }' >hoge.txt
166 :
25 :05/01/20 03:16:18 ID:H/CLmUGK
167 :
名称未設定 :05/01/20 04:01:57 ID:moO+zpA5
uuencode photo2021-1.jpg -m -o-
もしくは
curl -s "
http://www.nhk.or.jp/gendai/photo/photo2021-1.jpg " | uuencode -m -
でも、ちゃんとMIMEのヘッダ作ってやんないと添付として認識しないよ。
また、ヘッダ込みで作ったものを/usr/bin/mailで送っても、ヘッダが本文扱い
になってしまうかも。ヘッダと本文の間は1行以上空行を置くことになっていて、
空行の後にヘッダがあっても、ヘッダとして機能しないからです。
168 :
名称未設定 :05/01/20 04:02:58 ID:otQ6Xs5j
アホさ満開〜 ヽ(´ー`)ノ
169 :
名称未設定 :05/01/20 04:35:18 ID:CErtLa24
>>168 アドバイス書いてくれてもいいじゃないですか。
お願いしますよ。
170 :
25 :05/01/20 05:16:49 ID:+Kteqz+N
>>167 ありがとうございます!!!神!
できました。
ですかお察しの通り、文字化けしてファイルとして
認識してくれませんでした。
一体全体、どうしたらまともにmailコマンドを使って
添付ファイルが遅れるようになるのでしょうか・・・・・。
やっぱmailコマンドじゃ無理ってことでしょうかねぇ。
>ヘッダ込みで作ったものを/usr/bin/mailで送っても、ヘッダが本文扱い
>になってしまうかも。ヘッダと本文の間は1行以上空行を置くことになっていて、
>空行の後にヘッダがあっても、ヘッダとして機能しないからです。
矛盾してるような気がするのですが・・・
要するにmailコマンドであっても、
ヘッダ
空行
本文
というように書いてやればOKってこと??
ところでヘッダはこの場合どういうのを書けばよいのでしょうか?
(どの辺を見ればわかるのか、でもいいです)
またはMaiil.appで普通にヘッダを見る方法を教えていただければ
自分で解析してみますけど・・・。
「すべてのヘッダを表示する」ボタンでは肝心のところまでは
表示されないようなのです。
(jpgファイルを自分に送信して受信し、そのヘッダを解析する)
171 :
25 :05/01/20 05:22:40 ID:+Kteqz+N
>>164 激しくコメントつきのやつを(
>>165 みたいな感じで)
どっかにアップしてくれんかなぁ。Perlの勉強したいので。
>>165 それはナイスな情報だね。
パイプがそんなふうに分割して機能するなんて初めて知った。
今までやたら長い行でダラダラと書いてたけど、
今度からそうやって分割してやってみるよ。
ありがと。
172 :
名称未設定 :05/01/20 07:05:28 ID:CErtLa24
>>171 164だけど、たぶん俺のでっちあげソースを見ても勉強にならんよ。
俺が試したサーバーでうまくいかなかった所をテキトーにいじって、
動いたからいいやって感じで、よくわからないでそのままにしてあるから一般性に欠けるし。
そもそも内容が特殊だし。SMTPのコマンドの勉強とかになる。
Perlの基本がわからないままモジュール使いまくりのやつを見てもわからんでしょ。
動作させるためにはCPANで色々インストールしないといけないし。
俺の使った元ネタはGoogleで検索したらすぐ見つかると思う。
最初は一般的に使いやすそうなものができたらアップしようと思ってたんだけどね。
後半部分
165のような記述ができるのは俺も知らなかったけど、
パイプが分割できるというよりも、コメント行や改行や空白の扱いの問題のような気がする。
>>172 (=164)
ここにスクリプトを上げるのは歓迎されるのではないかな。
一般性に欠けるスクリプトを堂々と晒している先人もいることだし
にしても、悪用とかセキュリティに関する問題が出てくると思うけど、
今の自分にはそれに言及するだけの知識がないところが…
>>159 (=25) fink をインストールして sudo apt-get install w3m-ssl
>>161 (=25) 関数ってどれのことですか?
25に「まずはtelnetでメールを送ってみれ」とそそのかしてみたい。
ttp://www.atmarkit.co.jp/fnetwork/rensai/tcp03/01.html 自分はこういうのを面白いと思ったんだけど。誰でもわかるように書いてあるし。
@ITには面白い読み物がたくさんあるんで、もしよければどうぞ。
…というか、歓迎させてください、ですね。礼儀がなってなくてごめんなさい。
格言「誰かが書いたコードは自分で書くな」と「誰も書いたことのないコードは
ほとんどない」にのっとって、Ruby を中心に探してみました。
添付ファイル付きメールをコマンドラインから送信
ttp://sonic64.hp.infoseek.co.jp/2003-12-12.html 添付ファイル付メールを送信する Ruby スクリプト
ttp://sonic64.hp.infoseek.co.jp/2004-10-09.html SMTPサーバーのポートが25番固定、文字コードはJIS固定みたい? ですが、
このままでも一般的な動作には問題がないように感じました。
自分の Mac に入っている Ruby は 1.6.8 でしたが、一応動作するようでした。
# $mail_content << の行がいっぱいあるけど、こういうときに
# ヒアドキュメントって使えないのかしらん。
>>170 (=25) 一応。
> ところでヘッダはこの場合どういうのを書けばよいのでしょうか?
「表示 > メッセージ > ソース」を見てみればいいかも
175 :
25 :05/01/20 12:26:36 ID:G1EjltYG
>>172 #でコマントつけまくってくれたらだいたいわかるよ。
>>173 finkは以前に試して、でもインストールに失敗しました。
関数は・・・ああもう削除しちゃったな・・・。まぁええわ。
>25にtelnet
非常に面白いね、これ!!!!!
smtpサーバと会話しちゃった!!w
eelsPBG4:~ sheel$ telnet mx5.nisiq.net 25
Trying 202.233.3.237...
Connected to fmail3.u-netsurf.ne.jp.
Escape character is '^]'.
220 fmail3.u-netsurf.ne.jp ESMTP Postfix
HELO oresama.ha.kami
250 fmail3.u-netsurf.ne.jp
MAIL FROM:<
[email protected] >
250 Ok
RCPT TO:<
[email protected] >
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
this is a test.
.
250 Ok: queued as 8272B19868E
QUIT
221 Bye
Connection closed by foreign host.
eelsPBG4:~ sheel$
176 :
25 :05/01/20 12:31:43 ID:G1EjltYG
177 :
25 :05/01/20 15:46:35 ID:H/CLmUGK
178 :
25 :05/01/20 15:54:26 ID:H/CLmUGK
ところで紹介してもらったmiだけど、 これ、かなり便利だねぇ〜。 モードで色が変わるのがとても(・∀・)イイ!! sh書くにはいまんところperlモードで書いてるけど、 なんかいまいちな面もあるんだよねぇ。 shで書くのに適したモードファイルってみんな何使ってるの?
179 :
名称未設定 :05/01/20 17:08:31 ID:+XdmG8ro
180 :
25 :05/01/20 17:33:09 ID:H/CLmUGK
>>179 !!!!
こ、これはいいね!!
miだとbash用のモードファイルが別途必要だが(それがあるかどうか知らんけど)
これだと元々bash用のモードが入ってるね。
デフォの色使いはちょっとセンスなさすぎだけど、
これは自分でカスタマイズできるので無問題。
これはscriptの記述ミスが減りそうだなぁ。
``の付け忘れとか。
さんすこ。
181 :
名称未設定 :05/01/20 19:09:09 ID:CErtLa24
182 :
25 :05/01/20 19:13:29 ID:WYkN70oF
>>181 ナイスな情報、乙。
また時間があるとき(来週の水曜日の夜)に見て見るわ。
>>175 (=25)
>finkは以前に試して、でもインストールに失敗しました。
もったいない。
っていうか、finkで失敗したら、w3mをソースからインストールなんてできるわけ
ないじゃんか。今まで普通のパッケージをインストールしたことはないの?
悪いことは言わんから、とりあえず入れとけ。エラーが出たら晒してくれれば見るし
185 :
名称未設定 :05/01/20 19:43:36 ID:dA+6jW+A
> っていうか、finkで失敗したら、w3mをソースからインストールなんてできるわけ > ないじゃんか。 妙な論理を展開すんなや、バカっ垂れ。
あちゃ。そうかな。まあ飛んでるか。ごめん。 にしても、pkg形式だと、インストールだけならパスワードを入力するだけで 良かった気がするんだけど…。何がいけなかったのかな。
187 :
名称未設定 :05/01/20 21:06:33 ID:zhByCgQO
188 :
名称未設定 :05/01/20 21:40:06 ID:CErtLa24
iconvについて質問です。 % echo "Yahoo! Japan" | iconv -t UTF8 iconv: conversion from char unsupported という具合にエラーになるんですが、使い方間違ってますでしょうか? nkf -wに置き換えると問題ないんですけど。
>>188 echo "Yahoo! Japan" | iconv -t UTF-8
iconv -l して。
190 :
名称未設定 :05/01/21 00:10:49 ID:8We7X2U6
>>188 10.3付属のiconvならエラーにならなかったけど、自分で入れたやつか?
ま、いずれにせよ、OSとかiconvとかのバージョンも書けよ!
191 :
名称未設定 :05/01/21 04:35:27 ID:ASsM4AEP
>>189 ,190
レスありがとうございます。
>>190 すいません。自分で入れたのか最初から入ってたのかイマイチはっきりしません。
10.2.8です。iconvは/usr/bin に入ってます。
うちのiconvは -f も指定してやらないとダメみたいです。
>>188 の後「UNIXの部屋」で検索したらiconvは -f の指定も必要って書いてあったんで、それが普通かと思ってました。
iconvのバージョンはどうやったら調べられますか?
iconvのファイルの作成日、変更日はともに03/11/08になってます。
いずれにせよお二方のおかげで10.3のiconvなら便利に使えそうだとわかりました。
192 :
190 :05/01/21 04:59:50 ID:QuEZJYjs
> iconvのバージョンはどうやったら調べられますか? コマンドが何であれ、とりあえず--versionとか--helpは試せw 10.3のはこうなってる。 $ iconv --version iconv (GNU libiconv 1.9) Copyright (C) 2000-2002 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Written by Bruno Haible. $ iconv --help Usage: iconv [-c] [-s] [-f fromcode] [-t tocode] [file ...] or: iconv -l
193 :
名称未設定 :05/01/21 05:39:41 ID:ASsM4AEP
ありゃ。-vとか-hとかしてました。orz % iconv --version iconv (GNU libiconv 1.9) Copyright (C) 2000-2002 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Written by Bruno Haible. おやー??どちらも1.9??
194 :
名称未設定 :05/01/21 05:44:41 ID:ASsM4AEP
>>123 すいません。
これ、untilの条件は何なのでしょうか?
curlが何か吐いたらOKという事ですか?
sleepの間はcurlのDL待ち?
>これ、untilの条件は何なのでしょうか?
条件は「curlが終了コード0で(=正常に)終了する」。
実際にはおっしゃる通りの条件「何か吐いたら」になりますが。
Google先生なら「終了コード」「if文」「シェルスクリプト」あたりで
割と基本なので、生身の人間か実物の本に頼ったほうが効率よく学べるかも
この場合curl のオプションが重要なので、manで確認してください。
-f 404(Not Found), 503(Service Temporary Unavailable) などの場合は
サーバー独自のエラーメッセージを出力する代わりにエラーコードを出して
標準出力に何も出力しないで終了する
-L サーバーが Location: ヘッダーを返したときに、リダイレクト先を追いかける
>>123 を無理矢理和訳すると
# 次のコマンドが成功するまで:
until
#
http://poorserver.example.com/ の内容を標準出力に書き出す
curl -fL
http://poorserver.example.com/ # 次のことを繰り返す:
do
# 20秒間待つ
sleep 20
# 以上。この間に標準出力に書き出された内容は次のコマンドへ送る:
done |
# 標準出力から得た内容を Shift_JIS の text/html とみなして表示する
w3m -T text/html -Is
やってみればわかりますが、curl -fL は20秒ごとに実行されることになります。
>>194 >sleepの間はcurlのDL待ち?
寝ぼけていて「DL待ち」というのが今ひとつわからなかったのですが
curl によるダウンロードと、sleepが同時に実行されることはありません。
ダウンロードが異常終了した後にsleepが実行されます。
ダウンロードが正常終了した場合は、untilの条件が満たされるのでsleepは実行されません。
…という回答でいいのかな。
197 :
名称未設定 :05/01/21 07:03:01 ID:ASsM4AEP
>>195 レスありがとうございます。
untilがcurlが取ってくるHTMLじゃなくて終了コードを判定するというのが何だか不思議です。
さっき色々ぐぐったのですがキーワードがわかってなかったのでイマイチの成果だったので、もう一度「終了コード」について調べてみます。
これ、curlが何か取ってくるまで次には進まないはずなんですよね?
シェルスクリプトに組み込んだら、(正確にはAppleScriptのdo shell script)パイプで次のコマンドに渡されてるのが空っぽみたいなんですけど、
curlがタイムアウトか何かで終わったって事なんだろうか・・。
198 :
名称未設定 :05/01/21 07:12:38 ID:ASsM4AEP
>>197 正確には、普通のページは大丈夫なんですが、
Amazonみたいにリダイレクトがかかる所だと、
まるで-Lオプションが付いてないかのように?何もとってこないんですよね。
ASで呼び出されるシェルがおかしいって事なのかな。
>>197 >終了コードを判定するというのが何だか不思議です。
終了コードってのはそういうものなんです。一般的には正常終了が0、
異常がそれ以外で、その値を if とか while とか $? で評価できるんです。
自分もなにかWeb上のわかりやすそうなドキュメントを探そうとしたのですが、
すぐにはみつかりませんでした。
例えば、次のコマンドを試してみてください (たぶんコピペできます) :
# date コマンドで、好きな形式の現在時刻を表示できます。
# 詳しくは、man 3 strftime を参照してください
date +%Y-%m-%d
# 終了コードを調べてみます
echo $?
# 間違った書式で date コマンドを使ってみます
date %Y-%m-%d
echo $?
# true, false コマンドは、if について実験するときに役立つかも
# ; (セミコロン) は、改行と同じ働きです。一応。
true; echo $?
false; echo $?
if true; then echo succeeded; else echo failed; fi
if false; then echo succeeded; else echo failed; fi
201 :
名称未設定 :05/01/21 11:12:20 ID:ASsM4AEP
2chのHTMLをdatに変換するPerlを作ったのでアップしてみました。
ttp://mac.oheya.jp/up/src/macroom0391.txt これを例えばhtml2dat.plというファイル名で保存して
(改行はLF)
% perl -w ./html2dat.pl 1105074933.html
という感じで実行すると、1105074933.dat というファイルを吐きます。
HTMLファイルの拡張子は.htmlにするように気をつけてください。
それ以外だった場合の事は考えてません。
変数名とか変ですがイマイチどういうのがいいのかわからない。
そのへんはどなたか指南していただけると幸いです。
202 :
名称未設定 :05/01/21 11:41:52 ID:ASsM4AEP
>>199 レスありがとうございます。
if とか until は特殊変数 $? を 見るようになっていると思っていればいいでしょうか?
ifやuntilの後に数字が等しいかどうかというような式を入れた時も
その等式の結果は$?に入ってるんでしょうか?
(ちょっと実験してみようとしましたがうまくいかず)
>>200 レスありがとうございます。
-Lを外すとOKというのは驚きました。
こちらの方で作っていたものは-Lを外してもダメでした。
2つの問題は同根かもしれませんが別のもののようです。
203 :
名称未設定 :05/01/21 12:49:26 ID:ASsM4AEP
>>201 バグあった。メール欄空欄の場合考えてなかった。
面倒くさいので修正した奴は(作ったけど)アップしませんw
204 :
名称未設定 :05/01/21 15:40:47 ID:uF7zVsti
> そのへんはどなたか指南していただけると幸いです。 > 面倒くさいので修正した奴は(作ったけど)アップしませんw ( ゚Д゚)ハァ?
205 :
名称未設定 :05/01/21 18:06:22 ID:ASsM4AEP
『そのへん=変数名等の記述の作法に関して』 って事だったんですが・・。 25氏がPerlの勉強をしたいと書いていたので、 ちょうど基本的な事項ばかりでできているので叩き台によいかなと思ってうpしました。 (易しすぎかもしれませんが) わざわざ修正版をアップする程のものでもないと思ったのですが、 お気に障ったならすいません。
206 :
名称未設定 :05/01/22 01:00:36 ID:HHPHuaFO
207 :
名称未設定 :05/01/22 02:09:28 ID:Sh9vVPTp
208 :
名称未設定 :05/01/22 06:50:27 ID:SrUbFo7X
ID:ASsM4AEPは、何から何まで人に聞いて知識を得ようとしているように見える。 2chに入り浸ってるとそうなるのか?
>>206 Sy[Esc] で SystemStarter が補完されるのにちょっと感動した。
期待してなかったけど、もしかしてすごくいいかもわからんね
>>202 >if とか until は特殊変数 $? を 見るようになっていると思っていればいいでしょうか?
思うだけなら、いいと思う。
$? は終了コードを参照する変数、と逆にして覚えたほうが本来的っぽいけど。
>ifやuntilの後に数字が等しいかどうかというような式を入れた時も
>その等式の結果は$?に入ってるんでしょうか?
if で判定したり $? で参照したりできるのはあくまで「終了コード」で、
単に「等式の結果が入る」というにはやや語弊があります。
勘違いしやすそうですが、if は条件式を受け付けません。あくまでコマンドの終了コードが
ゼロか否かを判定します。で、上の date の例を注意深く見てみればわかると思いますが、
コマンドの「出力 (標準出力)」 と「終了コード」ってのは全く別物なんです。
# 変数 i が 102 と数値として等しかったら、true と表示する
# -eq などの演算子については、man [ を参照
i=102
if [ $i -eq 102 ]; then
echo "true"
fi
このスクリプトは、一見 if が条件式を引数として受け付けているように見えますが、実際
には「 [ 」がちゃんとしたコマンドで、このコマンドが条件式を評価してそれに応じた終了
コードを返しているんです。嘘だと思うなら ls /bin/[ を実行してみなされ。
終了コードにどんなものがあるかは (一般的な了解はあるものの) それぞれのコマンドの
作者が決めるものなので、そのコマンドのマニュアルかソースを見る必要があります。
210 :
名称未設定 :05/01/22 07:42:17 ID:OXbpwZuh
>>208 お前のその
悪意と低脳さによる他人に対する無理解に基づいた悪口だけで中身がない
そのくせ大上段に構えて気取った書き込みが
どっぷりクサい2ちゃんねらーそのものだから。
利用時間は関係なかったね。
211 :
名称未設定 :05/01/22 07:51:08 ID:OXbpwZuh
ぐお。釣られてきったねー書き込みした後にリロードしたら
親切なPaperさんの書き込みがあった。自己嫌悪。
>>209 丁寧なレスありがとうございます。勉強になります。
[の実体はtestらしいですね。
とりあえずcurl -Lがなぜ(untilで素通りするという事はおそらく正常な終了コードを出しつつ)HTMLを取ってこないのかわからないし、環境依存の特殊な事かもしれないので、curlの部分もPerlで書こうかと思って調べ物中です。
212 :
名称未設定 :05/01/22 08:31:52 ID:pt6Gps81
じゃ、今日のあぼーんIDはOXbpwZuhってことで、了解! このスレだけじゃないが、お前のその書き方の態度の差が少しでも縮まればもちっと 見られたものになるんだがなw 質問する時だけ嫌らしいほど低姿勢。
皆さん豊富な語彙をお持ちのようで。 >とりあえずcurl -Lがなぜ(untilで素通りするという事はおそらく >正常な終了コードを出しつつ)HTMLを取ってこないのかわからない その部分のスクリプトとURLを晒しなされ。
214 :
25 :05/01/22 15:20:58 ID:F77Mj/Qy
215 :
名称未設定 :05/01/22 19:31:18 ID:ocjMr23o
>>205 >『そのへん=変数名等の記述の作法に関して』
まずは、use strict汁。
ツッコミ所満載だが、最低でも対象ファイル以外では
処理を開始させない様にすべき。
216 :
名称未設定 :05/01/23 01:27:08 ID:sP6IBaOd
>>213 レスありがとうございます。
すいません。今整理して書き込もうとしていて気付きました。
まだ確認してませんが、単なるパターンマッチングの問題だったようです・・。
orz
でも気付かなかったおかげで?今日一日色々調べて勉強になりました。
っていうかこの件でつまずいてからもう2週間以上・・。
>>215 レスありがとうございます。
今日いろいろ調べてたらあちこちで、
#!/usr/bin/perl -w
use strict;
て書けや( ゚Д゚)ゴルァ!
て書いてありました。
グローバル変数を使わないようにチェックするって事なんですかね?
別のスクリプトで同じ変数名が使われてたら困るから??
すいません。よくわかってません。
217 :
名称未設定 :05/01/23 02:47:53 ID:sP6IBaOd
大騒ぎ?したので何がどうだったのか補足しておきますと、 探しているパターンの間に改行が挟まっている場合というのを考慮してなかったんです。 HTMLは改行とか空白は自由なので色々な場合を考えないといけませんね。 Perlは一行ずつ処理するようになっているのでこういう時は不便ですね。 もっとも、HTML処理用のモジュールとか使えばきっとスマートに処理できたのでしょう。 無い知恵をしぼって パターンの先頭と一致する部分とマッチしたら目印用の変数に1を入れる ↓ 目印の変数が1の間は読み込んだ行をchopで改行削って処理用の変数のおしりに入れる ↓ パターンの終わりと一致する部分とマッチしたらlastでwhile(<>)のループを抜ける ↓ 処理用の変数に対して改めてm// という方法でどうにか切り抜けました。
218 :
名称未設定 :05/01/24 03:07:11 ID:5R+fZ1VG
ひょっとして、ファイル名に全角の罫線『─』が含まれるファイルって、 シェルで開けないですか? 例えばcatしても無視されるようです。
220 :
名称未設定 :05/01/24 09:07:20 ID:5R+fZ1VG
221 :
25 :05/01/24 10:33:42 ID:JaraWg9u
test
222 :
25 :05/01/24 11:00:10 ID:JaraWg9u
「Macでシェルスクリプト総合 Part1」スレが更新された場合のみ、その旨をメールしてくれるsh
#!/bin/sh
txt=`curl -s
http://pc7.2ch.net/test/read.cgi/mac/1105074933/l20` lastreply=`echo "$txt" | grep dt | tail -1 | cut -f1 -dF | sed "s/[^0-9]//g"`
echo "$lastreply" > sh/2chemacout.txt
#confirm $lastreply is an integer lower than or equal to 1001.
if test "$lastreply" -le 1001
then
#confirm there is a file called sh/2chemacoutprevious.txt
if test -e sh/2chemacoutprevious.txt
then
diff=`diff sh/2chemacout.txt sh/2chemacoutprevious.txt`
if test -z "$diff"
then
exit 1
else
mailtitle=`echo "Mac de shellscript thread has been updated"`
echo "Mac de shellscript thread has been updated." |
mail -s "$mailtitle"
[email protected] rm sh/2chemacoutprevious.txt
mv sh/2chemacout.txt sh/2chemacoutprevious.txt
fi
else
mv sh/2chemacout.txt sh/2chemacoutprevious.txt
fi
else
echo echo "an error occured while processing mac de shell script thread." |
mail -s "error"
[email protected] fi
223 :
25 :05/01/24 11:05:22 ID:JaraWg9u
一部訂正。
#!/bin/sh
txt=`curl -s
http://pc7.2ch.net/test/read.cgi/mac/1105074933/l1` lastreply=`echo "$txt" | grep dt | tail -1 | cut -f1 -dF | sed "s/[^0-9]//g"`
echo "$lastreply" > sh/2chemacout.txt
#confirm $lastreply is an integer lower than or equal to 1001.
if test "$lastreply" -le 1001
then
#confirm there is a file called sh/2chemacoutprevious.txt
if test -e sh/2chemacoutprevious.txt
then
diff=`diff sh/2chemacout.txt sh/2chemacoutprevious.txt`
if test -z "$diff"
then
exit 1
else
mailtitle=`echo "Mac de shellscript thread has been updated"`
echo "Mac de shellscript thread has been updated." |
mail -s "$mailtitle"
[email protected] rm sh/2chemacoutprevious.txt
mv sh/2chemacout.txt sh/2chemacoutprevious.txt
fi
else
mv sh/2chemacout.txt sh/2chemacoutprevious.txt
fi
else
echo "an error occured while processing mac de shell script thread." |
mail -s "error"
[email protected] fi
224 :
名称未設定 :05/01/24 11:39:56 ID:20LDHrWd
perlやawkやsedも使わず grep一本槍
225 :
25 :05/01/24 11:49:23 ID:JaraWg9u
>>224 grepは使いやすい(理解しやすい)ので行の抽出にはgrepを
好んで使っているのですが、
perlやawkやsedを使うと
>>223 がどのようにシンプルなshに変わるのでしょうか?
テストしますね。
229 :
25 :05/01/24 13:19:35 ID:JaraWg9u
なるほど。確かに curl: (22) The requested file was not found と22番が出てくるね。これは使えそうなふいんき。
230 :
名称未設定 :05/01/24 21:00:41 ID:+skTWnrt
>>216 > グローバル変数を使わないようにチェックするって事なんですかね?
> 別のスクリプトで同じ変数名が使われてたら困るから??
変数のスコープをはっきりさせる為。あとは間違いの指摘をして貰う為。
use strict; すれば、最初の $honbun=""; は、不毛であることに気づくかも。
>>217 > Perlは一行ずつ処理するようになっているのでこういう時は不便ですね。
s オプションを付ければ 、 .(任意の一文字)が改行にも一致する。
容量にもよるが、ファイル一気読みも出来る。
{
open (FH,$file);
local $/;
local $_ = <FH>;
close(FH);
s{ /正規表現/ }
{ 処理 }xegs;
}
unless ($suretai eq "") は、if( $suretai )でいいでね?
あと、ちゃんとファイルロック汁とか、
正規表現を複雑にするなら、s///eg;とかで処理ってのはどう?とか、
quotemetaか\Q〜\Eを利用するとか、
xオプションと (?#正規表現中のコメント) を使って見やすくすれば?とか、
そもそもhtml→dat変換って、どんな処理が必要かは知りませんが、
あれでいいの?
231 :
名称未設定 :05/01/24 22:56:51 ID:5R+fZ1VG
>>230 たくさん指摘ありがとうございます。
うぉー。基礎的な知識がないので調べないと書いてある事がわからないっぽいです。
課題ができました。
> そもそも〜あれでいいの?
datはマカエレ。のものを参考にしましたが書き込みのメール、本文などの要素が<>で区切られて一行が一書き込みのShift-JISのテキストファイルみたいです。
HTMLもShift-JISのようなので、各要素を取り出して順番変えて区切りを入れてやってできあがりです。
おかしい所が見つかったら指摘お願いします。
実用を考えて作ったものではなかったので実際に2chブラウザで読み込ませて検証する事まではしていません。
というかアップしてあるやつは既に書いたようにMail欄が空欄だった場合を考慮してないのでMail欄が空欄の書き込みが抜けてしまいます。
あとはファイルタイプとクリエーターの設定までできればなおいいのですが、
旧Mac OSのMacJPerlでやった事はあるのですが、Mac OS XのPerlで使えるMacのファイルタイプやクリエータが扱えるモジュールはあるんでしょうかね?面倒なので探してないんですが。(設定用のアプリもあることだし)
実用を考えるなら他にidxファイルの生成の機能もあれば便利ですね。
専用のソフトもあるようですが。
>>229 それ 404 とか 503 とかで見るメッセージですね。URLは合っていますか?
上のスクリプトだと、途中からのダウンロード再開に失敗したときには、うちでは
curl: (22) The requested URL returned error: 416
となりますが…? (416は「Range指定付きダウンロード(=再開)に失敗」)
そもそも二回目以降はHTTPリクエストヘッダ「If-Modified-Since:」を使うべきでした。
ってことで curl には次のように -z をつけたほうがいいみたいです。
終了コード 22 がエラー、 33 が更新なし、ということで、わかりやすくなりそうです。
ただ、33の時に出るエラーメッセージは、なんか怪しいです
# 1087915053.dat の修正日を If-Modified-Sinceヘッダとして送る
curl -fLO -C - -z 1087915053.dat
http://pc7.2ch.net/mac/dat/1087915053.dat # datファイルから名前と本文だけを抜き出す
awk -F"<>" '{print $1":"$4}' 1087915053.dat | nkf -w
233 :
25 :05/01/27 00:21:58 ID:Mui5XYQT
nkfをインスコするために、ここみたわけだが、
http://yudoufu.velvet.jp/tools.html PowerBookG4では普通にインスコできるのに、
サーバにしているiBookではダメだった。
「cvsが見つからない」と言われた。
数週間悩んでいたわけだが、今やっと答えがわかった。
そう、cvsコマンドはDeveloper Toolsをインスコしてないと
使えないのだ。
参考までに。
234 :
名称未設定 :05/01/27 00:28:45 ID:XlCB6GJ9
235 :
25 :05/01/27 00:36:27 ID:Mui5XYQT
だ、ダメですた・・・。 makeはちゃんとnkf-2/nkf-utf8 に移動して行い、そのまま sudo cp nkf /usr/local/bin としたのですが、 nkfと打つとcommand not foundとなります??? いったいどういうことでしょうか?
236 :
25 :05/01/27 00:41:32 ID:Mui5XYQT
237 :
25 :05/01/27 00:42:17 ID:Mui5XYQT
>>236 あ、自己解決しました。
Terminalを一度再起動したらOKですた。
不親切だなぁ。ひとことTerminalを再起動と書いてくれればいいのに。
238 :
名称未設定 :05/01/27 00:44:47 ID:o559M+42
君が馬鹿なだけ。
239 :
名称未設定 :05/01/27 00:45:03 ID:RC7XfsGo
そのページのせいにすな。お前の理解不足だ。入門書の一冊も読んでねーのかよ。
240 :
25 :05/01/27 00:47:37 ID:Mui5XYQT
>>235 の件に関しても、
別におまいらの力を借りなくても事故解決しました。
方法は、
>>236 のリンクからnkfのパッケージをインスコしただけでした。
まったく・・・おまいらってほんっと、役立たずだね。
241 :
名称未設定 :05/01/27 00:57:07 ID:LCUhRQxb
>>238-239 そいつは1から10まで手取り足取り、子供に教えるときみたいに噛んで含めて
説明しないと理解出来ないからほっとけ。
242 :
25 :05/01/27 01:06:20 ID:Mui5XYQT
>>236 のリンクからnkfをインスコしたのですが、その後ちゃんと
echo 'set path = ($path /usr/local/bin)' >> ~/.tcshrc
echo 'export PATH=${PATH}:/usr/local/bin' >> ~/.bash_profile
を実行したのですが、
nkf
とやると入力待ち状態となって先に進みません。
shellscriptの中に
hogehoge | nkf -j
とやっても、ログをみるとnkfというコマンドが見つからない
となっています。
これはいったいどういうことなのでしょうか??
243 :
名称未設定 :05/01/27 01:12:03 ID:o559M+42
>>242 >>240 >別におまいらの力を借りなくても事故解決しました。
今度も自分で解決しろよ。
244 :
名称未設定 :05/01/27 01:15:45 ID:XlCB6GJ9
皮先くん本領発揮中w
245 :
25 :05/01/27 01:29:44 ID:Mui5XYQT
>>243 別におまえには聞いてないよ。洋梨はどっか池。
246 :
名称未設定 :05/01/27 01:33:22 ID:MuI2Ou/f
俺さぁ、AppleScriptとかshell scriptとか「使いたい...」って思う人を増やしたいと思って、
時々新・Mac板に貼ったりするんだけどさ、こういう皮先みたいなヤツが居ると、
知ってても教える気がなくなる人が増えるんじゃないかと思う。
もう、邪魔だから氏んで。
>>25
247 :
25 :05/01/27 01:51:12 ID:Mui5XYQT
だから俺がいやなら他でやってくれよ。
ここは俺様専用隔離スレとして機能してるんだからさ。
Macでシェルスクリプト総合(皮先以外) Part1
でも立ててそっちでやれ。
ちなみに俺様はすごいので
>>242 も
結局おまいらの力を借りずに自分で解決できました。
なぜだからわからんけど、
「非ASCII文字をエスケープする」のチェックを外したからかな??
それとも単にTermiinalを再起動したからかもしれん。ようわからん。
248 :
名称未設定 :05/01/27 01:57:35 ID:MuI2Ou/f
249 :
25 :05/01/27 02:03:12 ID:Mui5XYQT
おまえがな。
250 :
名称未設定 :05/01/27 03:27:51 ID:Z9q0k8R+
凄まじいインターネッティングだな
このままだと誰か悪い人がこんなことを教えそうだ。
>>25 こうしておけばTerminalの再起動は不要
echo "PATH=AUTORELOAD;exit" >> .bash_profile
再起動という解決策も知ったし、しばらくは困らないだろうから簡単に言っとくと
1. ~/.profile または ~/.bash_profile はシェルの起動時に読まれる。
2. コマンドは、環境変数 PATH に指定してあるディレクトリから順に探されて実行される。
本当はもっと長く書いたけど、自分で読んでうざったかったから省略
>>175 「Fink のインストールに失敗した」ってのもパス関係じゃなかんべか
253 :
名称未設定 :05/01/27 07:13:21 ID:aPm7gDSr
おいらは面倒くせーから~/.tcshrc(10.2なので)をJeditで開くaliasを書いておいて 編集はJeditでやってるです。 こうするとちゃんと書けたかどうか目で確認できて安心。 書いたら今開いてるTerminalのウインドウを閉じて(閉じなくてもいいが) 新しいTerminalのウインドウを開く。 そうすると新たに起動されたtcshが~/.tcshrcを読み込んで設定が反映される。
254 :
名称未設定 :05/01/27 09:55:41 ID:FG8j7436
sourceとか知らんのか?
.
256 :
25 :05/01/27 10:17:06 ID:Mui5XYQT
神キタ━━━━━━(゚∀゚)━━━━━━ !!!!! なるほどねぇ〜。すごくわかった(つもり)。
257 :
名称未設定 :05/01/27 10:34:27 ID:+zMLC6+p
何を?
258 :
253 :05/01/27 10:52:50 ID:aPm7gDSr
>>254 それも含めてGUIでできる事はGUIでやっちゃおっていう事です。
邪道だとは思いますが初心者のやってる事なんで許してくんなまし。
259 :
66 :05/01/27 11:01:52 ID:MNAdpSbf
変更した.tcshrcを反映させるにはわざわざTerminalを開かないで source ~/.tcshrc ってすれば?って事じゃないの?
260 :
名称未設定 :05/01/27 11:02:42 ID:MNAdpSbf
おや?変な番号が残ってた、すまん。
261 :
25 :05/01/27 11:37:22 ID:Mui5XYQT
>>258 その気持ち良くわかるよ。
俺もshを編集するときには
いちいちpicoとかemacsとか起動せずに
Jeditでやってた。
今はSubEthaEditつかってるけどね。
httpconfとかいじるときにはpico使ってるね。
262 :
名称未設定 :05/01/27 13:53:46 ID:nxdCYRwe
>>255 で書いてあるけど、
. .bashrc
でもOKだよ。「.」がコマンド。これでシェルのrcファイルの読み直し。
そういえば、rehashってどうやるの? パスの再検索。
263 :
25 :05/01/27 13:56:46 ID:Mui5XYQT
264 :
名称未設定 :05/01/27 16:49:16 ID:aYpBUbSP
>>258 cp .tcshrc tcshrc.txt
echo "source tcshrc.txt" >.tcshrc
open tcshrc.txt
>>262 rehash と打ち込むだけ。bash使いには関係ないはず
>>264 ln -s ~/.tcshrc tcshrc.txt
266 :
名称未設定 :05/01/27 19:47:12 ID:aPm7gDSr
>>264 ??複雑ですね。
.tcshrcに、tcshrc.txtを読み込むように書いておいて
tcshrc.txtを編集するようにするという事ですか?
ターミナルを開く前にGUIでtcshrc.txtを編集して
それからターミナルを開くというやり方でしょうか?
267 :
名称未設定 :05/01/27 19:54:58 ID:aPm7gDSr
253で書きましたが漏れの~/.tcshrcには alias settei 'open -a Jedit4 ~/.tcshrc' と書いてあります。 『settei』というのはダサいと思いますが 他のコマンド名と絶対カブらないだろうというのと、 ローマ字入力のリズムに慣れているので打ちやすいんです。
268 :
名称未設定 :05/01/27 21:59:50 ID:JZTNsg5u
>>267 bash_profileとかtcshrcのエイリアス(macの方。≒シンボリックリンク)を
作ればいいんでね?エイリアス名の先頭の'.'を取れば可視になるよ。
269 :
名称未設定 :05/01/28 04:14:50 ID:p1w7CzEl
>>268 頻繁に編集する場合はそのエイリアスをDockに入れておくと便利そうですね。
270 :
25 :05/01/28 10:41:42 ID:2EkwYb46
nkfもw3mも便利すぎる。 ところで普通にTerminalからnkfやw3mコマンドを含んだshを 実行すると当たり前の実行結果が返ってくるんだけど、 CroniOSXで同じコマンドを実行させるとnkfとw3mのところで エラーが起こります。 これはいったいどういうことなのでしょうか?? 何度も再起動しました。 CroniOSXを再起動してもダメですた。
>>270 (=25)
PATHが通っていない可能性大。コマンドをフルパスで指定することをまず試す。
わからなかったらまた来るから、それまでおとなしく待つ。
272 :
25 :05/01/28 13:53:59 ID:2EkwYb46
Paper様、ありがとうございますぅ。 これをやったのですが、 echo 'set path = ($path /usr/local/bin)' >> ~/.tcshrc echo 'export PATH=${PATH}:/usr/local/bin' >> ~/.bash_profile このどの部分をどう変えて実行すればよいのですか??
たとえば スクリプト内の w3m という文字列を /usr/local/bin/w3m に書き換える。 もしくは PATH=/bin:/usr/bin:/usr/local/bin あたりをスクリプトの先頭に書き加える。 詳しくは後で。 あと、紙ごときに対して低姿勢になるな。
274 :
25 :05/01/28 16:57:19 ID:2EkwYb46
ありがとうございます。 >スクリプト内の w3m という文字列を /usr/local/bin/w3m に書き換える。 これではダメでした。 >PATH=/bin:/usr/bin:/usr/local/bin >あたりをスクリプトの先頭に書き加える。 これで可能になりました。 重ね重ねありがとうございました。 Terminalから直接打ち込むには動作するのに、 cronでやると動作しないのってどういうことなんでしょうね・・・。 PATHの解釈が異なるってことですか?
275 :
名称未設定 :05/01/28 17:02:26 ID:JDiPrmmr
少し放置しれよ、糞の紙。
276 :
名称未設定 :05/01/28 18:02:39 ID:HE6vLuf3
↓帽皮先くん、暴言を吐く
277 :
名称未設定 :05/01/29 02:51:00 ID:vR/U3dr8
tcsh,elvis,gawkの組み合わせをつかうと最悪だ。 同じように見えて少しずつ違って間違いがどこにあるかわからない。
278 :
名称未設定 :05/01/29 18:28:59 ID:B/hdoyvH
使わなきゃいい。
279 :
名称未設定 :05/01/29 20:20:52 ID:TT1OcxhO
>>277 bash,emacs,gawkにしろ。
280 :
名称未設定 :05/01/30 00:47:02 ID:MnMw2n6c
廃人はEmacsでLispしてる、というイメージがあるのですが、これはど
281 :
名称未設定 :05/01/30 05:03:35 ID:WibeZZJF
Emacs立ち上げっぱなしで何でもそれで済んじゃうのかな? しかしあれこれ言語覚えるのって大変だし無駄っぽいですよね。 なるべく少なく済ませたい。
282 :
名称未設定 :05/01/30 06:29:43 ID:WibeZZJF
Perlの話でスマンですが、Mac::AppleEventsとかOSXのPerlでも使えるのかなと思ってただいまCPANでインストロール中。 使えたらかなり便利なんだけど。 昔MacPerlでお世話になったサイト行ったら残っててうれしいけど全然更新されてなくてさみしい・・。
283 :
名称未設定 :05/01/30 06:42:26 ID:xAFHad+Y
思いついたことを何でも書きゃ良いってもんじゃない。
284 :
名称未設定 :05/01/30 06:50:39 ID:PmWVzEJ+
チラシの裏にどぞ
285 :
名称未設定 :05/01/30 07:18:30 ID:WibeZZJF
>>283 ,284
そうですかあなた(たち?)はMac OS XのPerlでMac固有の情報の操作をしたりAppleEventsを使う事に関する情報を持ってないのですね。
レス乙です。
286 :
名称未設定 :05/01/30 07:28:47 ID:7F1Rv1UV
バカは氏ね。
287 :
名称未設定 :05/01/30 13:20:56 ID:GoTVqdic
ワラタ 「ここには解る人はいないようですね」のパターンだなw
288 :
名称未設定 :05/01/30 13:35:52 ID:WibeZZJF
とりあえずinstall Mac::AppleEventsでインストールできた。 podを見てみたところMac OS Xがどうのという記述があるから OS Xでも使えるのだろう。 一緒にインストールされたMac::Filesにファイルタイプ、クリエータの操作ができそうな記述があるので 使い方の情報をWebで探したが見つからない。 余裕のある時に試行錯誤してみようと思います。 以前に旧OSで書いたMac::AppleEventsを使ってファイルのコメントを記入するスクリプトは動かなかった。理由はよくわからない。
289 :
名称未設定 :05/01/30 13:58:00 ID:4UgBsiSI
もう来んなや。
290 :
名称未設定 :05/01/30 14:53:52 ID:0NRmx02s
来るなって言ってる香具師はこのスレをどうしたいんだか…
こういうのを隔離するためにあるんじゃないのか?
>>288 ちょっと見るに、Mac::Applescriptなら多少は実績があるようだ
Perlは使わんからどんなものかわからないけど。
291 :
名称未設定 :05/01/30 15:02:37 ID:1FfRSwtX
いや、彼の場合隔離しようとしてもいろんなスレに出てきますからw
292 :
名称未設定 :05/01/30 15:42:26 ID:aYAzjSH5
> 来るなって言ってる香具師はこのスレをどうしたいんだか… ID:WibeZZJFは独り言が多いから、チラシの裏で十分。
293 :
25 :05/01/30 16:06:55 ID:RB0ZVR1U
>>288 とりあえずPaperの出現を待て。
その他のやつらはまじでウザすぎるくらい低能だし。無視無視。
294 :
名称未設定 :05/01/30 16:37:00 ID:6wA/I5bQ
類友ワラタ
295 :
名称未設定 :05/01/30 16:46:29 ID:GoTVqdic
確かに、どうでもいい報告をしに来るあたりが皮先くんと似てるな
296 :
名称未設定 :05/01/30 17:28:41 ID:Fxc8YnD3
皮先くんが関わったスレはどれもギスギスしたものになるねぇ。
297 :
名称未設定 :05/01/30 19:16:58 ID:WibeZZJF
久しぶりにアスキー出版局のMac Perl入門引っ張り出して来たらMac::Filesあたりの事も少しずつ書いてあったわ。
で、すでに作ったファイルのクリエータ、タイプを変更するのはMac::Filesではできないようなのだが、
任意のクリエータ、タイプのファイルの作成は以下のようにしたらあっさりできた。
以下の例はホームに「MacFileCreateTest」という名前のmiに関連づけられたテキストファイルを作る。
####ここから
#!/usr/bin/perl -w
use strict;
use Mac::Files;
my $newfile;
$newfile = "/Users/(あなたのユーザー名)/MacFileCreateTest";
FSpCreate ($newfile,"MMKE","TEXT");
#####ここまで
>>296 いやたぶん俺にもアンチが付いてるから
298 :
名称未設定 :05/01/30 19:48:05 ID:suP6sDIA
>>297 「ファイルを開くダイアログ」を表示させる方法をキボンヌ。
299 :
名称未設定 :05/01/30 20:21:48 ID:WibeZZJF
後からクリエータの変更もできた。
何かToolBoxを知ってる人にはおなじみっぽいものが出てきているようだ。
FSpSetFInfoって単語で検索したらC?でのプログラムのページが出てきた。
>>298 ちょっと待って。さすがにそれは(漏れには)ややこしいかな。
単純にテキストの置換処理の対象とするファイルを選ばせたいなら
AppleScriptとの組み合わせがよい手段と思われ。
モジュールの追加も必要ないし。
例えばダイアログでファイルタイプ「TEXT」のものだけ選ばせて
それを引数にsample.plを実行したいなら下記のようなAppleScriptを書く。
この手段は知ってたらスマソ。
--変数onefileを使ってます。
set onefile to choose file with prompt "ファイルを選んで下さい" of type {"TEXT"}
set onefile to POSIX path of onefile
do shell script "perl -w ~/sample.pl" & " " & quoted form of onefile
300 :
300 :05/01/30 20:58:39 ID:H+Y/7VUY
300
301 :
名称未設定 :05/01/30 20:59:57 ID:lGeA4/76
>>299 アップルスクリプト部分をperlに埋め込むなら
#!/usr/bin/perl
use strict;
#アップルスクリプトに渡す文字コードはshift_jis
my $script = <<'EOT';
tell application "System Events"
activate
set onefile to choose file with prompt "ファイルを選んで下さい" of type {"TEXT"}
return POSIX path of onefile
end
EOT
my $selectFile = `osascript -e '$script'`;
print "File=$selectFile\n";
ご存知かもしれませんがデベロッパツール入れると
SetFile、GetFileInfoってタイプ、クリエータを設定、取得できるコマンドがインストールされます
302 :
名称未設定 :05/01/30 21:07:55 ID:WibeZZJF
>>301 ありがとうございます。
Perlから他のコマンドを呼び出す方法がわからなかったのでまずPerlだけでできるか試してみました。
お書きになっているPerlからAppleScriptを実行させる方法が
ちょうどそういうもののようなのでデベロッパツールのコマンドの方も挑戦してみます。
303 :
名称未設定 :05/01/31 00:30:19 ID:9joB18O3
>>274 cron はあなたの .bashrc とかは読み込みません。
CroniOSX とやらもきっと読んでくれないでしょう。
冒頭でいつも PATH=〜 を書くのは定石って前にあったでしょ?
リダイレクト先を指定しておくとデバッグの役に立つ。
↓contab はこんな感じ(ちなみに cron のシェルは sh だからね)
0 * * * * あんたのコマンド > /tmp/err.txt 2>&1
304 :
25 :05/01/31 02:23:05 ID:7E8Ynnrp
274です。
>>303 ありがとうございます。
理由がわかってホッとしました。
これからはPATHをちゃんと入れるようにしたいと思います。
305 :
名称未設定 :05/01/31 05:16:37 ID:CzDe0jv/
crontabのSHELLをbashにしてしまえばいいんじゃねえの。
306 :
25 :05/01/31 05:31:11 ID:7E8Ynnrp
>>305 意味がわかりません。
もっと詳しく、かつ、具体的に指示してください。
307 :
25 :05/01/31 07:14:44 ID:7E8Ynnrp
308 :
名称未設定 :05/01/31 07:21:49 ID:yclvNwPT
>>307 10.2は入ってるね。>printenv
CGI運用に関するツールみたいだけど
単なるサンプルのCGIでもあるみたいだし、(中身はPerlで書かれたスクリプト)
無くてもどうにかなるんじゃないの?
>>307 (=25)
printenvはうちでも見かけません。
まあ、手っ取り早くやってみたいならどぞ。
cat > /Library/WebServer/CGI-Executables/hello.sh <<EOF
#!/bin/sh
echo "Content-Type: text/plain;charset=UTF-8"
echo
date
EOF
chmod 755 /Library/WebServer/CGI-Executables/hello.sh
w3m
http://127.0.0.1/cgi-bin/hello.sh このスレができた当初からいつこのセリフが出るかそわそわしてました
310 :
名称未設定 :05/01/31 08:08:33 ID:aYozP/u8
hello.shはhello.cgiにしないと駄目なんじゃない?
311 :
名称未設定 :05/01/31 08:27:54 ID:BRuxWiTD
ダメじゃないよ
>>310 べつにレスを期待しているとは思わないけど
把握しているところではCGIを有効にする方法は2通りあって
1. ScriptAlias /cgi-bin/ "/Library/WebServer/CGI-Executables/"
2. AddHandler cgi-script .cgi
1. の場合は CGI-Executables というフォルダにあるものならなんでも実行できたような。
詳しく知りたい人は割とわかりやすいので Apache のマニュアルをどぞ
313 :
25 :05/01/31 08:56:26 ID:Y2Qa7w6l
>>308 いやcgiって書いたことないからサンプルがないと
動作確認すらできないんよ。
>>309 神!
言われた通りにやりました。
CGI-Exceu・・・のディレクトリでやってもなんもおこらんだったんで
users/sheel/hello.sh
に移動してhttpでアクセスするとダウンロードされちまいます。
hello.cgiにしてみても、以下のようになります。
chmodはちゃんとやってます。
ちなみに
http://www.kiwi-us.com/~mizusawa/penguin/html_hint/osXDarwinTips.shtml#cgi この通りに設定しました。なにがいくないのでしょうか???
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Apache/1.3.33 Server at eelspbg4.local Port 80
314 :
25 :05/01/31 08:57:08 ID:Y2Qa7w6l
>>313 users/sheel/hello.sh
は
users/sheel/sites/hello.sh
の間違い。
315 :
310 :05/01/31 09:03:45 ID:aYozP/u8
316 :
310 :05/01/31 09:36:22 ID:aYozP/u8
317 :
310 :05/01/31 10:34:18 ID:aYozP/u8
お。嘘を教えてしまったのかな。
>>313 >CGI-Exceu・・・のディレクトリでやってもなんもおこらんだったんで
ちょっと意味が取れなかった。「なんにも」ってのはサーバーにグローバルIPで
アクセスしようとした時とかに遭遇したりするけど…
404 でも 500 でもなく「なんにも」? 下のほうにある 500 ではないの?
エラーログに何か記録されているなら教えてください。
CGI が有効になっているかを確かめるために、設定ファイルを適当に抜き出して
くれれば、力になれるかもしれないです。このまま実行すると長すぎるかなあ。
cat -n /etc/httpd/httpd.conf | grep -A2 -B2 ScriptAlias
cat -n /etc/httpd/httpd.conf | grep -A2 -B2 -i cgi
>>315 >ダウンロード…
.sh っていう拡張子が人騒がせでしたね。潔く拡張子を消してしまうのが良いかと
319 :
25 :05/01/31 14:20:40 ID:YJAMuNJu
>>318 >CGI-Execu・・・
500でした。
eelsPBG4:~/sites sheel$ cat -n /etc/httpd/httpd.conf | grep -A2 -B2 ScriptAlias
658
659 #
660 # ScriptAlias: This controls which directories contain server scripts.
661 # ScriptAliases are essentially the same as Aliases, except that
662 # documents in the realname directory are treated as applications and
663 # run by the server when requested rather than as documents sent to the client.
664 # The same rules about trailing "/" apply to ScriptAlias directives as to
665 # Alias.
666 #
667 ScriptAlias /cgi-bin/ "/Library/WebServer/CGI-Executables/"
668
669 #
670 # "/Library/WebServer/CGI-Executables" should be changed to whatever your ScriptAliased
671 # CGI directory exists, if you have that configured.
672 #
--
872 #
873 # If you want to use server side includes, or CGI outside
874 # ScriptAliased directories, uncomment the following lines.
875 #
876 # To use CGI scripts:
320 :
25 :05/01/31 14:23:02 ID:YJAMuNJu
eelsPBG4:~/sites sheel$ cat -n /etc/httpd/httpd.conf | grep -A2 -B2 -i cgi | grep -v # 214 LoadModule autoindex_module libexec/httpd/mod_autoindex.so 215 LoadModule dir_module libexec/httpd/mod_dir.so 216 LoadModule cgi_module libexec/httpd/mod_cgi.so 217 LoadModule asis_module libexec/httpd/mod_asis.so 218 LoadModule imap_module libexec/httpd/mod_imap.so -- 256 AddModule mod_autoindex.c 257 AddModule mod_dir.c 258 AddModule mod_cgi.c 259 AddModule mod_asis.c 260 AddModule mod_imap.c -- -- 498 UseCanonicalName On -- -- 667 ScriptAlias /cgi-bin/ "/Library/WebServer/CGI-Executables/" 668 673 <Directory "/Library/WebServer/CGI-Executables"> 674 AllowOverride None 675 Options None -- 878 AddHandler cgi-script .cgi
321 :
25 :05/01/31 14:24:42 ID:YJAMuNJu
eelsPBG4:~/sites sheel$ cat -n /etc/httpd/httpd.conf | grep -A2 -B2 -i cgi | grep #
597 # Set to one of: On | Off | EMail
665 # Alias.
909 # Format: Action media/type /cgi-script/location
910 # Format: Action handler-name /cgi-script/location
911 #
935 #ErrorDocument 404 /missing.html
936 # to redirect to local URL /missing.html
937 #ErrorDocument 404 /cgi-bin/missing_handler.pl
938 # N.B.: You can redirect to a script or a document using server-side-includes.
939 #
997 #
998 # There have been reports of people trying to abuse an old bug from pre-1.1
999 # days. This bug involved a CGI script distributed as a part of Apache.
1000 # By uncommenting these lines you can redirect these attacks to a logging
1001 # script on phf.apache.org. Or, you can record them yourself, using the script
1002 # support/phf_abuse_log.cgi.
1003 #
1004 #<Location /cgi-bin/phf*>
1005 # Deny from all
1006 # ErrorDocument 403
http://phf.apache.org/phf_abuse_log.cgi 1007 #</Location>
手数をおかけしましたね。 httpd.confは問題なさそうです。(いや、セキュリティとかは置いておいて 500のエラーであれば、ApacheのCGIは使えるようになっているはずです。 ってことで今度は該当しそうなエラーのログを見つけてくだされ こちらの場合は結局スクリプトが変、ってことだと思うんだけど… ってか今頃気がついて申し訳ないんだけど >httpでアクセスするとダウンロードされちまいます。 これって「CGIスクリプト」がダウンロードされるんじゃなくって 「CGIの実行結果」がダウンロードされているのかな? だとしたら >.sh っていう拡張子が人騒がせでしたね。潔く拡張子を消してしまうのが良いかと
323 :
25 :05/02/02 22:56:31 ID:ucPQifXh
sedやperlなどで ' とか " とかを削除するにはどうすれば?? sed "s/\"//g" とかではエラーになってしまうのですが・・・。 sedやperl以外を使用する必要があるのでしょうか。
324 :
25 :05/02/02 23:47:51 ID:ucPQifXh
といいますのも、この↓shで
#!/bin/sh
txt1=`curl -s
http://www.data.kishou.go.jp/maiji/index.html` preflist=`echo "$txt1" | nkf -s | perl -pe 's/HREF=/\n/g' | grep pref |
cut -f1 -d] | cut -f2 -d/ | cut -f1 -d.`
prefnumber=`echo "$preflist" | wc -l`
n=1
while test $n -le $prefnumber
do
pref=`echo "$preflist" | head -$n | tail -1`
txt2=`curl -s "
http://www.data.kishou.go.jp/maiji/pref/$pref.html "`
echo "$txt2" | grep COORDS | cut -f4 -f5 -d= | cut -f1 -f3 -d: |
sed "s/Open_URL/ /g" | sed "s/[()>:]//g"
n=`expr $n + 1`
done
このように↓全国の市町村番号を取得するのには成功したのですが、
" とか ' とかがどうしても削除できないで困っているのです・・。
"宗谷岬(ソウヤミサキ) '11001'"
"礼文(レブン) '11046'"
"浜鬼志別(ハマオニシベツ) '11076'"
"沼川(ヌマカワ) '11121'"
"沓形(クツガタ) '11151'"
"豊富(トヨトミ) '11176'"
"浜頓別(ハマトンベツ) '11206'"
"中頓別(ナカトンベツ) '11276'"
"歌登(ウタノボリ) '11316'"
"天塩(テシオ) '13061'"
325 :
名称未設定 :05/02/02 23:53:45 ID:zs1GMVKT
>>323 perl -e "s/[\x22\x27]//g"
326 :
25 :05/02/02 23:57:56 ID:ucPQifXh
>>325 神!!!!
で、できますた!!!
#!/bin/sh
txt1=`curl -s
http://www.data.kishou.go.jp/maiji/index.html` preflist=`echo "$txt1" | nkf -s | perl -pe 's/HREF=/\n/g' | grep pref |
cut -f1 -d] | cut -f2 -d/ | cut -f1 -d.`
prefnumber=`echo "$preflist" | wc -l`
n=1
while test $n -le $prefnumber
do
pref=`echo "$preflist" | head -$n | tail -1`
txt2=`curl -s "
http://www.data.kishou.go.jp/maiji/pref/$pref.html "`
echo "$txt2" | grep COORDS | cut -f4 -f5 -d= | cut -f1 -f3 -d: |
sed "s/Open_URL/ /g" | sed "s/[()>:]//g" | perl -pe "s/[\x22\x27]//g"
n=`expr $n + 1`
done
327 :
25 :05/02/03 00:08:46 ID:vPFrplbs
http://sheel.mydns.jp/~sheel/temperature.zip 【nwlisttemphi.sh】 最高気温を調べる
【nwlisttemplow.sh】 最低気温を調べる
<これってなにするの?>
気象庁の「電子閲覧室」
http://www.data.kishou.go.jp/ からデータを取得して好きな観測点の好きな年の好きな月の
最低気温あるいは最高気温を
取得するshellscriptです。あらかじめ
東京、静岡、浜松、熊本、鹿児島、枕崎、福岡、佐賀、大分、宮崎、長崎
が登録されています。
その他の観測点番号も「観測点番号リスト」として添付されていますので
自分の環境に合わせて自由に書き換えて使用されるとよいでしょう。
<使用例>
自分の生年月日などがどういう気温だったのか確認できます。
今月の最低気温の移り変わりが一目瞭然です。
ソースをちょちょっと書き換えるだけで自由に自分の好きな都市を登録できます。
ソースがそのままですのでソースを見ることで(ある意味)shellscriptの勉強になります。
つまり、下手糞が書くとどれほどきたないshellscriptになるのか確認できて笑えますw
<動作環境>
Mac OSX 10.3.7で動作確認しています。他には何も必要ありません。
328 :
名称未設定 :05/02/03 01:15:26 ID:A1o+MR6F
gzipかbzip2にしとこうぜ
329 :
25 :05/02/03 01:52:08 ID:vPFrplbs
330 :
名称未設定 :05/02/03 02:25:14 ID:A1o+MR6F
まあ、わざわざ変えるほどのことでもないけど。 zipって標準入力から受け取ったりしにくいじゃん? というか、zipでパーミッションが保持できるとは知らなかった
331 :
名称未設定 :05/02/03 04:04:56 ID:Z8DgRvpJ
>>326 複数のsedとperlをパイプでつないでるあたりは
;でつないでperlにまとめられるんじゃないの?
どっちが速いか知らないけど。
>>330 zipをStuffIt Expanderで解凍すると
何でもかんでも実行権限が付くか
何もかも実行権限が無くなるかだった気がします。
(環境設定で選択)
332 :
25 :05/02/03 04:24:32 ID:vPFrplbs
>>331 perlの言語は見ただけでは意味不明なので
どうしてもperlを使わないとダメな場合のみ、
最低限の文法しかしりません。
それに比べてsedとかわかりやすいし。
333 :
名称未設定 :05/02/03 04:44:47 ID:Z8DgRvpJ
そんなにややこしい事を言っているわけではなくて sed "s/Open_URL/ /g" | sed "s/[()>:]//g" | perl -pe "s/[\x22\x27]//g" ↓ perl -pe "s/Open_URL/ /g; s/[()>:]//g; s/[\x22\x27]//g" で動かないかなーとか。
334 :
25 :05/02/03 04:54:40 ID:vPFrplbs
>>333 なるほどね。やっと ; の意味がわかったよ。
まぁしかしパイプでつないだほうが見やすい(意味がわかりやすい)んで
これでええわ。
でもためになった。ありがとう。
335 :
名称未設定 :05/02/03 05:01:19 ID:Z8DgRvpJ
;は1行の終わりの印です。 普通テキストファイルに書く時は見やすいように;の後で改行するけど、 その改行はプログラムとしては意味が無い。
336 :
25 :05/02/03 05:06:10 ID:vPFrplbs
ふむふむ。 パイプもひたすら改行無しでだらだらと長い行を書いてた頃がなつかしいね。
337 :
名称未設定 :05/02/03 05:19:16 ID:gUQGl42M
338 :
↑ :05/02/03 05:21:38 ID:gUQGl42M
339 :
25 :05/02/03 05:48:37 ID:vPFrplbs
困っています。 $ ls -1 file001.txt file002.txt file003.txt という感じのディレクトリがあったときに、shを使って その中身をファイル作成日の順番に、057から始まるように ファイル名を変更するにはどうすればいいのでしょうか?? file057.txt file058.txt file059.txt という感じで。 ちょっと考えてみます。
340 :
25 :05/02/03 05:57:12 ID:vPFrplbs
とりあえずcpで(あとでmvに変える) #!/bin/sh filenamebefore=`ls -1 file | head -1` filenameafter=`echo "$filenamebefore" | sed "s/001/057/g"` echo "$filenamebefore" echo "$filenameafter" cp file/$filenamebefore file/$filenameafter ほほぉ。
341 :
25 :05/02/03 05:59:40 ID:vPFrplbs
eelsPBG4:~ sheel$ ls -T1 file file001.txt file002.txt file003.txt file057.txt ほほぉ。
342 :
25 :05/02/03 06:16:07 ID:vPFrplbs
eelsPBG4:~ sheel$ ls -l file | awk '{print($6,$7,$8,$9)}' | sort -M 17 Jan 19:21 file001.txt 17 Jan 19:21 file002.txt 17 Jan 19:21 file003.txt 3 Feb 05:56 file057.txt 3 Feb 06:11 file058.txt eelsPBG4:~ sheel$ ls -l file | awk '{print($6,$7,$8,$9)}' | sort -M | awk '{print($4)}' file001.txt file002.txt file003.txt file057.txt file058.txt ほほぉ。
343 :
25 :05/02/03 06:27:54 ID:vPFrplbs
ほほぉ。つかめてきたよ。とりあえずもう寝る。 eelsPBG4:~ sheel$ cat sh/filebach.sh #!/bin/sh filenamebefore=`ls -l file | grep -v total | awk '{print($6,$7,$8,$9)}' | sort -M | awk '{print($4)}' | head -1 | tail -1` filenameafter=`echo "$filenamebefore" | sed "s/[0-9][0-9][0-9]/060/g"` cp file/$filenamebefore file/$filenameafter eelsPBG4:~ sheel$ ls file file057.txt file058.txt file059.txt eelsPBG4:~ sheel$ ./sh/filebach.sh eelsPBG4:~ sheel$ ls file file057.txt file058.txt file059.txt file060.txt
344 :
25 :05/02/03 06:31:41 ID:vPFrplbs
>>343 あとは、060の部分をテキストファイルに格納しておくか。
最後の番号を覚えておいて、次に実行するときには
その続き番号から置換開始されるようにしたいのだが、
テキストファイルに番号を格納しておく以外に
なにか方法ありますか?
345 :
名称未設定 :05/02/03 06:35:37 ID:0kuLDbVl
#!/bin/sh for i in `ls *.txt` ; do mae=`echo $i | sed 's/\(.[^0-9][^0-9]*\)[0-9][0-9]*..*/\1/'` ushiro=`echo $i | sed 's/[^0-9][^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*/\1/'` ushiro=`expr $ushiro + 56` ext=`echo $i | sed 's/[^\.][^\.]*\(\..*$\)/\1/'` mv $i ${mae}`printf "%03d" $ushiro`${ext} done ファイル名順=作成日順ということなら。
346 :
名称未設定 :05/02/03 08:12:49 ID:jkPSQxfl
>>333 > perl -pe "s/Open_URL|[()>:\x22\x27]//g" で良さげ。
347 :
333 :05/02/03 08:15:24 ID:Z8DgRvpJ
348 :
名称未設定 :05/02/03 09:54:35 ID:debnVQD3
>>331 それはzipじゃなくてsitでしょ
パーミッションが保存されてるzipならそんなことは起こらん
349 :
25 :05/02/03 14:28:14 ID:vPFrplbs
>>345 ありがとうございます。
さっぱり意味がわかりませんでしたので勉強してました。
で、やっと理解しました。
ただ、
>>345 のshはこちらの環境に合わせて適宜変更しましたが
そもそもなぜかうまく動作しません・・・。
それにこれでは日付順に連番することはできないように感じます。
わたしがやりたいのは
>>345 のような一般化できるものではなく、
接頭辞はfile、拡張子は.txtと決まっていますので
mae=file
ext=.txt
で十分かと思います。
それとデジカメ画像の管理に使用しますので
連番は +56とかではなく、最後に使用した番号 +1 +2 ・・・・
という感じでやりたいと思います。
しかしながら、こういう表現
${mae}`printf "%03d" $ushiro`${ext}
とか、
sedでの\(\)と\1の使い方は非常に参考になります。
これでまたレベルアップすることができました。
350 :
名称未設定 :05/02/03 14:30:36 ID:0kuLDbVl
>>344 test文での存在確認(-e)を条件にwhile文で連番をインクリメントする。ループ
を抜けた時点の連番から処理を始めるって手があるね。それだと徐々に処理が
遅くなってくけど。
351 :
25 :05/02/03 14:32:20 ID:vPFrplbs
>>349 あ、デジカメ画像と言っておきながら拡張子は.txt・・・と
話がかい離してますが、わかりやすくしたかっただけで、
本当は
MAV_0001.3G2
MAV_0002.3G2
という動画の整理を行いたいのです。
このカメラ(A5504T)はバカなので連番を忘れてしまうようで、
いままでいちいち手動で連番をつけてきたのですが、
さすがにもう疲れてきましたので自動化してくれるものを
つくりたいなぁと。
もちろんGUIのフリーユーティリティがあるのは知ってるのですが、
(それかAppleScriptでも可能ですよね)
unix(てかsh)の勉強も兼ねて自分で作ってみようと思ったのです。
もうちょいがんがってみます。
352 :
25 :05/02/03 14:34:40 ID:vPFrplbs
>>350 ちょっとおっしゃってる意味がわかりづらいのですが、
しかしそのヒントでいいことを思いつきました。
最後に処理したあとには当然最後の番号を持つファイルが
存在するはずですので、それから番号を取得するようにすれば
いちいち別途テキストファイルを用意せずとも解決しますね。
もうちょいがんがってみまつ。
353 :
25 :05/02/03 17:11:03 ID:vPFrplbs
完成しました。
>>351 shって楽しいですね!
#!/bin/sh
cd file
lastnumber=`ls -1 /Users/sheel/Desktop/Data\ MyBabies/Data_Handyphone |
tail -1 | cut -f1 -d. | sed "s/[^0-9]//g"`
newnumberpre=`expr $lastnumber + 1`
filenumber=`ls -l *.3G2 | wc -l`
n=1
while test $n -le $filenumber
do
newnumber=`printf "%04d" $newnumberpre`
filenamebefore=`ls -l *.3G2 | grep -v total |
awk '{print($6,$7,$8,$9)}' |
sort -M | awk '{print($4)}' | head -$n | tail -1`
filenameafter=`echo "$filenamebefore" |
sed "s/[0-9][0-9][0-9][0-9]/$newnumber/g"`
cp $filenamebefore /Users/sheel/Desktop/Data\ MyBabies/Data_Handyphone/$filenameafter
n=`expr $n + 1`
newnumberpre=`expr $newnumberpre + 1`
done
354 :
名称未設定 :05/02/03 18:30:45 ID:DxkOlTJn
そろそろ自己流に「sh」って略すのをやめて欲しいと思ったり思わなかったり 俺的には ×シェル ○スクリプト ○シェルスクリプト △.sh 「sh」はここで初めて聞いたんで、今もレスを見るたびにちょっとそわそわする。 心底どうでもいいのであげ
355 :
25 :05/02/03 20:50:09 ID:iEh9BL1l
>>354 へぇ、そうなんだ。
俺は確か2chでシェルスクリプトのことをshって書いてる人がいて、
その真似をしてただけなんだが、
一般的でないのならやめるよ。
356 :
名称未設定 :05/02/03 21:29:35 ID:6wvpKvF2
個人的には違和感はなかったな。 shっていったらBourne shellを指すことが多いかなぁ。 unixの代表的なシェルとしてsh、csh、bash、tcsh、ksh、zshなどがあります、 bashはshを元にしていてtcshはcshを元にしています、みたいな。
357 :
名称未設定 :05/02/04 00:35:09 ID:KYxO3ql7
そういえば似たようなプログラム書いたな。rmが怖いので、ゴミ箱に移動する プログラムなんだけど。 というわけで、名前が重複したときに、上書きしたりする代わりに番号を振って いくmvを書いてみた。ちゃんと動くかどうかあれですが。 zshな拡張ばりばりなコードだけど大体はbashでもサポートされてると思われる。 使用例 % ls -lh total 8 -rw-r--r-- 1 hoge hoge 0B 4 2 00:00 MAV_0001.3G2 -rw-r--r-- 1 hoge hoge 0B 4 2 00:00 MAV_0002.3G2 -rw-r--r-- 1 hoge hoge 0B 4 2 00:08 MAV_0004.3G2 -rwxr-xr-x 1 hoge hoge 762B 4 2 00:14 mymv.sh* % % ./mymv.sh ../MAV_0057.3G2 ../MAV_0058.3G2 MAV_0001.3G2 % ls -lh total 8 -rw-r--r-- 1 hoge hoge 0B 4 2 00:00 MAV_0001.3G2 -rw-r--r-- 1 hoge hoge 0B 4 2 00:00 MAV_0002.3G2 -rw-r--r-- 1 hoge hoge 0B 4 2 00:15 MAV_0003.3G2 -rw-r--r-- 1 hoge hoge 0B 4 2 00:08 MAV_0004.3G2 -rw-r--r-- 1 hoge hoge 0B 4 2 00:15 MAV_0005.3G2 -rwxr-xr-x 1 hoge hoge 762B 4 2 00:14 mymv.sh* %
358 :
名称未設定 :05/02/04 00:37:38 ID:KYxO3ql7
ソースはこんな感じ。長いレスになってしまった。ちょっと後悔。 #!/bin/zsh setopt extended_glob err() { echo $@[2,-1] 1>&2; exit $@[1] } # 引数チェック (( $# >= 2 )) || err 64 "usage: $0 source ... target" target=$@[-1] [[ -d $target ]] && err 1 "$0: moving to directory is not supported." # $target=$targetroot$targetid$targetext となるように分解 targetroot=${${target:r}%%[0-9]#} targetid=${(M)${target:r}%%[0-9]#} targetext=.${target:e} [[ $targetext = '.' ]] && targetext='' # 番号割当のフォーマット # 基本的には 「""、"1"、"2"、…」の順に番号がつけられる # hoge0012.txtみたいな物だと「"0012"、"0013"、"0014"、…」の順になる targetidform="%0${#${(M)targetid##0*}}d" # mvの実行 for source in $@[1,-2] do if [[ ! -e $source ]]; then echo "$0: file ¥`$source' not found" else while [[ -e $targetroot$targetid$targetext ]]; do targetid=$(printf $targetidform $((++targetid))) done command mv $source $targetroot$targetid$targetext targetid=$(printf $targetidform $((++targetid))) fi done
359 :
名称未設定 :05/02/04 01:27:43 ID:sWELKBPp
スクリプトの内容が自分には高度で理解できない事もあって
>>339 以降で何をしようとしてるのかわからなかったのですが、
つまり、
フォルダAの内容をフォルダBに移したい時、
ファイル名が既に在るファイルと重複してる場合に
自動的に連番を振りながらフォルダBに移してくれるような
スクリプト
って事ですか?
360 :
名称未設定 :05/02/04 02:18:18 ID:KYxO3ql7
>>359 少なくとも>358ではそういうことをやってる。
同じく>339で何をしたいのかよくわからなかったんだけど、>351辺りを見て
大体>358みたいなことをしたいのだろうと思った。まあどっちかというと単に
shを使いたかっただけなのかもしれないけど。
基本的な処理なら相当少ない手間で実行できるから覚えるといろいろ楽だよね。
覚えるなりmanを見るなりしないといけないのが面倒だけど。
361 :
25 :05/02/04 03:38:13 ID:tW4Bmpui
>>359 #!/bin/sh
cd /Volumes/NO\ NAME/PRIVATE/AU/DF/D_MA
lastnumber=`ls -1 /Users/sheel/Desktop/Data\ MyBabies/Data_Handyphone |
tail -1 | cut -f1 -d. | sed "s/[^0-9]//g"`
#echo "lastnumber=$lastnumber"
newnumberpre=`expr $lastnumber + 1`
filenumber=`ls -l *.3G2 | wc -l`
#echo "filenumber=$filenumber"
n=1
while test $n -le $filenumber
do
newnumber=`printf "%04d" $newnumberpre`
#echo "newnumbeprer=$newnumberpre"
#echo "newnumber=$newnumber"
filenamebefore=`ls -l *.3G2 | grep -v total |
awk '{print($6,$7,$8,$9)}' |
sort -M | awk '{print($4)}' | head -$n | tail -1`
filenameafter=`echo "$filenamebefore" |
sed "s/[0-9][0-9][0-9][0-9]/$newnumber/g"`
#echo "$filenamebefore"
#echo "$filenameafter"
cp $filenamebefore /Users/sheel/Desktop/Data\ MyBabies/Data_Handyphone/$filenameafter
rm $filenamebefore
n=`expr $n + 1`
newnumberpre=`expr $newnumberpre + 1`
done
362 :
25 :05/02/04 03:46:08 ID:tW4Bmpui
>>359 /Volumes/NO\ NAME/PRIVATE/AU/DF/D_MA
というディレクトリにある(SDカード「NO NAME」上の)
MAV_0001.3G2
MAV_0002.3G2
というファイルを
/Users/sheel/Desktop/Data\ MyBabies/Data_Handyphone
というディレクトリに移動したいのです。
その際、Data_Handyphoneフォルダ内には
MAV_0001.3G2 MAV_0002.3G2・・・MAV_0076.3G2
という76個のファイルがすでに存在してますので
今、SDカード上にある
MAV_0001.3G2
MAV_0002.3G2
は、作成日(か修正日)の順に
MAV_0077.3G2
MAV_0078.3G2
と名称変更してからData_Handyphoneフォルダへ移動したいのです。
作成日の順番で、というのは、
この携帯はバカなのでMAV_0001.3G2とMAV_0002.3G2というファイル
が存在したときに、MAV_0001.3G2を削除すると、
次にファイルを作成したときにMAV_0001.3G2というファイルができるのです。
そこで数字で連番つけるのではなく、作成日の順で連番をつける
必要が出てきます。それを実現したのが
>>361 です。
sort -M を使って作成日(というか修正日?)で並べ替えてます。
363 :
25 :05/02/04 04:11:05 ID:tW4Bmpui
>>361 ではsort -Mを使って修正日でsortしてありますが、
man lsを読んでいたらls に -t オプションをつけると修正日(時間)で
sortしてくれることに気がつきました・・・orz
で
>>362 を自動でやってくれるやつを再掲します。ちょっとだけシンプルになりました。
#!/bin/sh
cd /Volumes/NO\ NAME/PRIVATE/AU/DF/D_MA
lastnumber=`ls -1 /Users/sheel/Desktop/Data\ MyBabies/Data_Handyphone |
tail -1 | cut -f1 -d. | sed "s/[^0-9]//g"`
newnumberpre=`expr $lastnumber + 1`
filenumber=`ls -1 *.3G2 | wc -l`
n=1
while test $n -le $filenumber
do
newnumber=`printf "%04d" $newnumberpre`
filenamebefore=`ls -1t *.3G2 | head -$n | tail -1`
filenameafter=`echo "$filenamebefore" |
sed "s/[0-9][0-9][0-9][0-9]/$newnumber/g"`
cp $filenamebefore /Users/sheel/Desktop/Data\ MyBabies/Data_Handyphone/$filenameafter
rm $filenamebefore
n=`expr $n + 1`
newnumberpre=`expr $newnumberpre + 1`
done
364 :
25 :05/02/04 04:14:38 ID:tW4Bmpui
>>358 こ、これ、眺めていてもさっぱりなにをやってるのか
意味がわかりません。zshとshとでは言語が異なるのでしょうか??
365 :
名称未設定 :05/02/04 04:18:20 ID:KYxO3ql7
現実逃避中にいくつかツッコんでみる。
>>362 ls自体にソートするオプションがいくつかあって、ls -tあたりで修正日の新しい
順にソートされて出力されと思う。古い順ならls -trね。それと、lsの出力を
パイプで渡す時は-1はいらないよ。ちゃんと1行1ファイルで出てくる。
あと、bashならexprもいらないんじゃないかな。
for((n = 1, newnumberpre=lastnumber + 1; n < filenumber; ++n, ++newnumberpre))
do
hogehoge......
done
みたいな感じで。
366 :
25 :05/02/04 04:21:39 ID:tW4Bmpui
>>362 を自動でやってくれるshが完成したのはいいのですが、
ひとつ問題点が浮かび上がりました。それは、
・移動したあとのファイルの修正日および時刻が
移動した時刻になってしまう
ということです。
手動でちまちまとやっていた頃はそんなことはありませんでした。
ファイルの修正時刻を強制的に作成時刻に変更することは可能でしょうか?
といいますのも、この3G2動画は日記のような感じで毎日録っているもので、
ファイル修正日(=作成日)を見れば何月何日何時になにをしたってのが
一目瞭然だったのです。
ちょっと自分で探してみますね。
367 :
名称未設定 :05/02/04 04:30:58 ID:fIOeJwOL
cpだから。mvにしる。
368 :
名称未設定 :05/02/04 04:34:31 ID:KYxO3ql7
ちんたら書いてるうちに他の人が同じことを言ってしまうな…。
コメントを入れてできるだけ何をしているのかわかりやすくしようとしたんだけど
行数の制限のためにけっこうきちきちにしてるのがちょっとわかりにくいかも。
zshなコードをばりばり使ってるし。意外とbashもいろいろと拡張があるみたい
だけど…。
>>366 >・移動したあとのファイルの修正日および時刻が
> 移動した時刻になってしまう
mvとcpの違いと予想。mvは移動するだけなので日付は変更しない。cpは
コピーを作るので、作成日と修正日は変更される。一般論としては、ファイルの
更新時刻で写真を撮った時間を予測すること自体に無理があるかもと思ったりは
する。
まあ、manを見る限りではcpに関しては何とかなるみたいだ。
…寝る。
369 :
25 :05/02/04 04:36:03 ID:tW4Bmpui
>>367 !!!!!!
な、なるほど!!!
そうします。
>>365 >ls -tあたりで
ありがとうございます。
>lsの出力をパイプで渡す時は-1はいらないよ
な、なるほど!!!
それは気がつきませんでした。
>for
forでも考えてみたいと思います。
とりあえず今改正したものを。
#!/bin/sh
cd /Volumes/NO\ NAME/PRIVATE/AU/DF/D_MA
lastnumber=`ls /Users/sheel/Desktop/Data\ MyBabies/Data_Handyphone |
tail -1 | cut -f1 -d. | sed "s/[^0-9]//g"`
newnumberpre=`expr $lastnumber + 1`
filenumber=`ls *.3G2 | wc -l`
n=1
while test $n -le $filenumber
do
newnumber=`printf "%04d" $newnumberpre`
filenamebefore=`ls -t *.3G2 | head -$n | tail -1`
filenameafter=`echo "$filenamebefore" |
sed "s/[0-9][0-9][0-9][0-9]/$newnumber/g"`
mv $filenamebefore /Users/sheel/Desktop/Data\ MyBabies/Data_Handyphone/$filenameafter
n=`expr $n + 1`
newnumberpre=`expr $newnumberpre + 1`
done
370 :
名称未設定 :05/02/04 04:41:01 ID:fIOeJwOL
371 :
25 :05/02/04 04:43:21 ID:tW4Bmpui
cpとmvの違いを身をもって身にしみています。 ところでわざわざcpを使用していたのは理由があります。 それは、cpしたあとにrmすることで ゴミ箱を空にする手間を省こうとしたのです。 mvだと・・・・え? あ、ゴミ箱は空にする必要がないのか・・orz すまん、ひとりで解決した。 shで「ゴミ箱を空にする」コマンドってありますか? ってのを聞きたかったですけど、この際だからもしあったら 後学のために教えてください。
372 :
25 :05/02/04 04:47:38 ID:tW4Bmpui
>>370 はい、それ、よく使ってますよ。
ls -t の件もそこで知りました。
なぜ、lsを調べていたかというと、
ファイルの作成日を表示する方法はないかと調べていたのです。
つまり、lsコマンド(+パイプ)でファイルの作成日を抽出し、
ファイルの修正日を作成日とイコールにする方法を
思い巡らしていたわけです。しかしそんなのはありませんですた・・orz
素人ってのはおまいらが思ってるよりほんとは「調べたい」のです。
だけど、調べる方法が間違っていたり、調べる方法がわからなかったり
ということなのです。
そんなに鼻息荒く意気がらずにやさしく教えてください。
373 :
名称未設定 :05/02/04 05:36:34 ID:sWELKBPp
だいぶ俺でもわかるスクリプトになった。awkはわからんですたい。 最初の方のsed "s/[^0-9]//g"は『MAV_』を数字でない1文字にマッチするもの全てって事で消してるのかな。俺にはない発想だ。 そもそもその手のファイル作成日、修正日ってあんま信用できるかどうかわからないから、 画像だったらExifみたいなの読んでそこに書いてある作成時刻を元にして 日時番号でファイル名付けるのが1番なんだろうけどね。 動画じゃそんなの無いだろうな。 ほんとにどーでもいい書き込みでスマソ。 カレントディレクトリの該当拡張子のファイルのリストを読み取る →1ファイルずつループ →/Developer/Tools/GetFileInfo -d で作成日時分秒を得る →作成日時分秒を加工して新しいファイル名作る →新しいファイル名で目的地へmv でどうかなとか思った(書けないけど) 秒数まで入れたらダブらないよね?
374 :
名称未設定 :05/02/04 05:58:35 ID:SFNOVQV0
iPhotoはそんなにダメなソフトなんだろうか…。
375 :
25 :05/02/04 06:03:38 ID:tW4Bmpui
>>373 >sed "s/[^0-9]//g"は『MAV_』を
>数字でない1文字にマッチするもの全てって事で消してるのかな
そうですね。普通は同じsedでも\(\)と\1とかで抽出するんでしょうけどね。
どうも\(\)は苦手で、「きたない」スクリプトなのは承知でやってます。
eelsPBG4:~ sheel$ /Developer/Tools/GetFileInfo -d file/MAV_0002.3G2
01/29/2005 09:23:57
ほほぉ!!!
こういうのが入ってるんですねぇ。感動すら覚えました。いやマジ。
まぁcpをmvにすることでその件は解決しましたので。
376 :
25 :05/02/04 06:08:02 ID:tW4Bmpui
377 :
名称未設定 :05/02/04 06:14:33 ID:sWELKBPp
へー。Webにアップするくらいなら充分な画質ですね。
378 :
25 :05/02/04 06:21:24 ID:tW4Bmpui
ん??
ちょ、ちょっと待てよ・・・。
>>369 のように、cpをmvに変えてしまったら、
while loopの一回一回でファイルがmvされていくのだから、
filenamebefore=`ls -t *.3G2 | head -$n | tail -1`
ではダメっぽい気がしてきた。
filenamebefore=`ls -t *.3G2 | head -1`
これでいいな。で、変数nも不要と。
となるとforでloopさせた方がよさそうだな。
どれ、改変してみる。
379 :
25 :05/02/04 06:30:10 ID:tW4Bmpui
できた。shってホントにおもしろいね! #!/bin/sh cd /Volumes/NO\ NAME/PRIVATE/AU/DF/D_MA lastnumber=`ls /Users/sheel/Desktop/Data\ MyBabies/Data_Handyphone | tail -1 | cut -f1 -d. | sed "s/[^0-9]//g"` newnumberpre=`expr $lastnumber + 1` filenamelist=`ls -t *.3G2` for filenamebefore in $filenamelist do newnumber=`printf "%04d" $newnumberpre` filenameafter=`echo "$filenamebefore" | sed "s/[0-9][0-9][0-9][0-9]/$newnumber/g"` mv $filenamebefore /Users/sheel/Desktop/Data\ MyBabies/Data_Handyphone/$filenameafter newnumberpre=`expr $newnumberpre + 1` done
380 :
25 :05/02/04 06:37:32 ID:tW4Bmpui
あ、古い順に連番していくので、
filenamelist=`ls -t *.3G2`
じゃなくて、
filenamelist=`ls -tr *.3G2`
が正解だった・・・orz
>>379
381 :
25 :05/02/04 06:50:30 ID:tW4Bmpui
for文って初めて使ってみましたけど、 while文と比べてexprで必死にいろいろ考える必要もないので便利ですね。 たぶん、今まで使ってきたwhile文は全部for文でやった方が 簡単だったろうな・・・と。 ところで俺様はこの3G2(MPEG4)動画をWebサーバー上に アップロードしているのだが、現在は手動で行っている。 で、今回せっかく「SDカード→ローカルHDD」への移動を 自動化するshに成功したので、この際 「SDカード→サーバHDD」への転送も自動化したいと 思えてきた。 ftpとか使えばいいのかな? ちと調べて考えてみます。
382 :
名称未設定 :05/02/04 07:23:04 ID:sWELKBPp
383 :
25 :05/02/04 07:33:28 ID:tW4Bmpui
>>382 !!!!
な、なんと衝撃的な事実だすな・・・orz
ま、俺はMacしか使わないから必要があれば
GetFileInifo -d
でいいや。
384 :
25 :05/02/04 07:50:23 ID:tW4Bmpui
385 :
名称未設定 :05/02/04 07:54:05 ID:EzANkcNa
cpだと、リソースはコピーされない。 コピー先がHFS/HFS+なら、/Developer/Tppls/CpMac で、どぞー。
386 :
25 :05/02/04 07:56:38 ID:tW4Bmpui
>>385 ナイスな情報乙。
MAV_0001.3G2ってリソースはあるのか???
というかscpで -p オプションつければ最低限最終修正時刻情報は
保たれるように思えるのでそれで十分とも感じるが・・・。
ま、scpでダメならCpMacという逃げ道もつくってくれてありがとん。
こういう逆方向もできちゃうんだ・・・。使えそうだ。
scp /Users/sheel/file/bc.sh
[email protected] :/Users/sheel/sites/bc.sh
387 :
25 :05/02/04 08:21:50 ID:tW4Bmpui
たった一行追加するだけでできた。
しかしfor loopの度にパスワードの入力を迫られるのが鬱だな・・。
自動でパスワードまで入力しる方法はないのかな?
#!/bin/sh
cd /Volumes/NO\ NAME/PRIVATE/AU/DF/D_MA
lastnumber=`ls /Users/sheel/hoge |
tail -1 | cut -f1 -d. | sed "s/[^0-9]//g"`
newnumberpre=`expr $lastnumber + 1`
filenamelist=`ls -tr *.3G2`
for filenamebefore in $filenamelist
do
newnumber=`printf "%04d" $newnumberpre`
filenameafter=`echo "$filenamebefore" |
sed "s/[0-9][0-9][0-9][0-9]/$newnumber/g"`
cp -p $filenamebefore /Users/sheel/hoge/$filenameafter
scp -p $filenamebefore
[email protected] :/Users/sheel/hoge/$filenameafter
rm $filenamebefore
newnumberpre=`expr $newnumberpre + 1`
done
388 :
名称未設定 :05/02/04 10:56:09 ID:sWELKBPp
>>387 ループの中で一々送信するんじゃなくて
ループの中ではコピー先のHDDでのファイル名(フルパス)を
リストに入れていって、
ループを抜けた後でファイル名のリストを送信するようなコマンド
(あるかどうか知らないw)に渡せばいいんじゃないの?
そうすればパスワードの入力は1度で済む。
389 :
名称未設定 :05/02/04 15:44:32 ID:Ls8fSc28
390 :
名称未設定 :05/02/04 21:58:35 ID:KYxO3ql7
現実逃避にzshの布教をしてみる。
>>364 基本的にはzshはshの拡張で普通のshのプログラムはzshで動くんだけど、拡張が
沢山あって変数やファイル名の展開のバリエーションが変態的に多かったりする。
例えば、ファイル名から拡張子とか番号を取り出したいときに、
lastnumber=`ls /Users/sheel/hoge | tail -1 | cut -f1 -d. | sed "s/[^0-9]//g"`
みたいなことをやったと思うんだけど、zshの機能を使うと
lastnumber=${${${(f)"$(ls /Users/sheel/hoge)"}[-1]:r}##[^0-9]#}
みたいに書ける。
>>372 zshなら*(oc)とすればファイルの作成日順で展開してくれるんだけどね。
ついでに名前順で最後のファイル名とかは*([-1])でできるんだけどね。
だから、>362みたいなのは>357-358を使って
% ./mymv.sh /Volumes/NO¥ NAME/PRIVATE/AU/DF/D_MA/*.3G2(oc) /Users/sheel/Desktop/Data¥ MyBabies/Data_Handyphone/MAV_<->.3G2([-1])
でほぼOKだと思う。
そうそう、<->は任意の数字が入るという意味ね。
>>387 ssh-agentでパスワード不要にする方法とか何らかの方法でパスワードを受け取る
方法とかがあるけど、どちらにしてもファイルごとに認証するのは時間がかかる
と思うので、個人的には一度ローカルな一時ディレクトリにファイルをコピー
しちゃうかな。それからscp -rpなり何なりでコピー。
でもscpだと既にアップしてあるファイルまでアップしちゃうのでrsyncで。
% rsync -e ssh -a (アップしたいディレクトリ)/
[email protected] :/Users/sheel/hoge/
みたいな。
391 :
名称未設定 :05/02/04 23:36:28 ID:T9VMneYw
>>371 > shで「ゴミ箱を空にする」コマンドってありますか?
ゴミ箱の実体は ~/.Trash なので
rm -rf $HOME/.Trash/*
392 :
名称未設定 :05/02/04 23:36:49 ID:sWELKBPp
scpって引き数に複数ファイル名を渡せないみたいなのに
*を使う事はできるみたいですね。
scp *.3G2
[email protected] :/Users/sheel/hoge/
みたいな?
(仮にこれ使うとしたら、やっぱりアップするファイルだけ一時的にどこかのディレクトリに突っ込んでおく事になりますかね。)
393 :
名称未設定 :05/02/05 00:06:58 ID:10rxDw18
>>391 実際には~/.Trash以外にもボリュームごとに.Trashesというファイルがあるので
そこらへんも探さないといけないんじゃないかな。AppleScriptを使ったほうが
余計なことを考えないですむかもしれない。
% osascript -e 'tell application "Finder" to empty trash'
>>392 複数ファイル名は渡せると思うけど…。
scpとかでできるのは、
・一つのファイルを名前を指定しつつコピー
・複数のファイルをディレクトリを指定しつつコピー
のどちらかじゃないかな。
一時的にどこかのディレクトリに入れたくないのなら、sftpという手もあるかな。
そんなにけちけちする必要はないと思うけど、まあこれが理想的?
394 :
名称未設定 :05/02/05 00:13:12 ID:kx0RM5px
>>392 ???
複数ファイル渡せるし、そもそも*はscpじゃなくてシェルが展開してるんだから
複数ファイルを渡してるのと同等なんだが。
395 :
名称未設定 :05/02/05 00:59:54 ID:ggpLIJO3
>>393 sftpを使う場合はsftpでログインした後の内部的なコマンド?もシェルスクリプトに書く事になるんでしょうか。
>>394 やっぱり複数ファイル渡せたんですか。(汗
1番目の引き数がコピー元で2番目の引き数がコピー先みたいだから
複数いっぺんは無理なのかと思ってました。
それで25さんのスクリプトでもいちいちループの中で1個ずつコピー(1回ずつ認証)してるのかなーと。
けっこー検索したんですけどこれといったものが見つからなくて。
書式の説明等いただけるとありがたいです。
396 :
名称未設定 :05/02/05 01:45:25 ID:XC11uBnb
397 :
25 :05/02/05 18:39:33 ID:A4QgGjFV
>>393 >osascript -e 'tell application "Finder" to empty trash'
ばっちり動作しますた!!!
すごいね〜。TerminalからAppleScirptが呼びだせるなんて!!!
感動してます。
逆もできちゃうし、MacOSX、マジで最強だなw(pgr
398 :
25 :05/02/05 22:36:53 ID:l4rxFR7p
みんなありがとう。
>>390 すまんが今はshのことで頭が一杯で
とてもzshとかを考える余裕はない。
>>389 よくわからん。
>>388 >>392 そういうことでなんとか解決できた。
#!/bin/sh
cd /Volumes/NO\ NAME/PRIVATE/AU/DF/D_MA
lastnumber=`ls /Users/sheel/Desktop/Data\ MyBabies/Data_Handyphone |
tail -1 | cut -f1 -d. | sed "s/[^0-9]//g"`
newnumberpre=`expr $lastnumber + 1`
filenamelist=`ls -tr *.3G2`
for filenamebefore in $filenamelist
do
newnumber=`printf "%04d" $newnumberpre`
filenameafter=`echo "$filenamebefore" |
sed "s/[0-9][0-9][0-9][0-9]/$newnumber/g"`
mv $filenamebefore /Users/sheel/sh/filebachtemp/$filenameafter
newnumberpre=`expr $newnumberpre + 1`
done
cp -p /Users/sheel/sh/filebachtemp/*.3G2 /Users/sheel/Desktop/Data\ MyBabies/Data_Handyphone/
scp -p /Users/sheel/sh/filebachtemp/*.3G2
[email protected] :/Users/sheel/Sites/hogehoge/
rm /Users/sheel/sh/filebachtemp/*.3G2
399 :
名称未設定 :05/02/05 22:54:52 ID:ggpLIJO3
解決しましたか。よっしゃあ。(と自分がやりとげたわけでもないのに言う私だった scp使えるホストにファイル転送する事があったら真似させていただきます。 どっかにホストないかな。キョロ (・_・≡・_・) キョロ
400 :
名称未設定 :05/02/05 23:59:21 ID:mrUwESge
ssh-agent ssh-add
401 :
25 :05/02/06 00:42:30 ID:2vVTYR/X
402 :
名称未設定 :05/02/06 01:10:20 ID:LjdMttf4
bsh、cshみたいなのをUnixから直輸入っていうのも芸がないな〜。というか、Appleらしくない。 もっと高機能且つ使いやすいものを作れよ。
403 :
25 :05/02/06 01:16:27 ID:2vVTYR/X
bin/shって十分高機能かつ他のunixとの互換性あると思うが。 さらにOSXならAppleScriptも呼びだせちゃうのってかなりいいよ。
404 :
名称未設定 :05/02/06 01:24:08 ID:+BeKYxey
今のシェルのどんなところに不満が? Automatorは、UNIXのツールチェーンをモチーフにしたそうで(とADCに書いてあ る)、そういう意味ではまさにApple的アプローチのシェル(スクリプト)だと思 うよ。
405 :
25 :05/02/06 02:45:13 ID:2vVTYR/X
「NO NAME」という名前のSDカードをEjectしたいのですが、 shもしくはosascriptで可能でしょうか?
406 :
25 :05/02/06 02:49:45 ID:2vVTYR/X
>>405 自己解決しました。
osascript -e 'tell application "Finder" to eject disk "NO NAME"'
Finder上の操作はScriptEditorで「記録」させれば答えが
みつかるので便利ですね。
407 :
名称未設定 :05/02/06 08:52:29 ID:Jz7NgqXA
その程度の長さのAppleScriptだとコンパイル済みのファイルを呼び出すのも -e で直に書くのも実行速度に大差無いか。
408 :
名称未設定 :05/02/06 09:13:46 ID:d2lY+x2b
409 :
名称未設定 :05/02/06 09:44:01 ID:Jz7NgqXA
ぐっとレベルの下がった質問でアレなんですけど、 入れ子になった大量のフォルダとファイルがあって、 いずれもファイル名・フォルダ名の先頭に3桁の番号が付いている。 この番号が邪魔なので取ってしまいたい。 という時、shのスクリプトではどんな具合にしたらいいもんでしょうか? mvを使えば1個ずつはできるんですが。 例えば『001test』という名前のフォルダとその中身に対して1度に処理をしたい時は? mvでは正規表現は使えないですよね・・。うーん。
410 :
25 :05/02/06 10:35:54 ID:Px7bot/C
digを使ってアクセスログのIPアドレスを一括resolve後に表示、
というshをつくってみました。ほぼ動作するのですが、
ANSWER SECTIONが見つからなかったときに表示される
./sh/dig.sh: line 9: test: -ge: unary operator expected
こういうエラーがうざいので表示させないようにする方法はありますか?
あと、これだとたまに「PTR」とだけ表示されるバグがあるようですが、
直す方法がわかりません。なにかうまい方法ありますか?
ちなみに元スクリプトはこれです。
#!/bin/sh
iplist=`ssh
[email protected] tail -30 /var/log/httpd/access_log |
grep -v SEARCH | grep -v Microsoft-WebDAV-MiniRedir | cut -f1 -d\ `
for ip in $iplist
do
txt=`dig -x $ip ptr`
line=`echo "$txt" | grep -n ANSWER\ SECTION | cut -f1 -d:`
if test $line -ge 1
then
line=`expr $line + 1`
ipout=`echo "$txt" | sed -n "$line p"`
else
ipout=`echo ""`
fi
if test -z "$ipout"
then
echo "$ip"
else
echo "$ipout" | cut -f3 | sed 's/\.$//g'
fi
done
411 :
名称未設定 :05/02/06 11:32:30 ID:u+DQrlWf
そろそろ丁寧に答えるのは疲れてきた。
>>409 findを使ってこんな感じとか。
find . -name '[0-9]*' -execdir sh -c 'echo mv {} `echo {} | sed s/^[0-9]*//`' ¥;
[0-9]*にマッチするファイルに対して、mv (そのファイル名) (新しいファイル名)
>>410 hostを使った方がいいんじゃないかな。
412 :
名称未設定 :05/02/06 11:45:37 ID:Jz7NgqXA
>>411 うおー。感激です。
findで[0-9]という表現が使えるとは知りませんでした。
そしてそんな風にしてsedを経由できるとは!!
しかしこれは、、難しい・・。がんばって調べます。
413 :
25 :05/02/06 12:33:39 ID:TlPR2W2E
>>411 うを。感激。
#!/bin/sh
iplist=`ssh
[email protected] tail -3 /var/log/httpd/access_log |
grep -v SEARCH | grep -v Microsoft-WebDAV-MiniRedir | cut -f1 -d\ `
for ip in $iplist
do
ipout=`host "$ip" | awk '{print($5)}'`
if test "$ipout" = "3(NXDOMAIN)"
then
echo "$ip"
else
echo "$ipout"
fi
done
414 :
名称未設定 :05/02/06 13:52:40 ID:Jz7NgqXA
改めてログを読み返したら俺質問しずぎ・・。 orz
415 :
名称未設定 :05/02/06 13:54:52 ID:F+p5muIz
>>409 この条件ならワイルドカードでもよさげ。
416 :
名称未設定 :05/02/06 15:30:41 ID:Jz7NgqXA
>>411 ほんとは質問したい事は-execと-execdirの違いとか山ほどあるんですが、、
とりあえず
find . -name '[0-9]*' -execdir sh -c 'mv {} `echo {} | sed s/^[0-9]*.//`' ;
で実験してみたところ、結果はだめみたいです。
1番上位のディレクトリの名前は変わったんですが、そうすると下位のファイルのパスが変わってしまうからじゃないかなと思うのですが、下の方は変わりませんでした。
find . -name '[0-9]*' -execdir sh -c 'mv {} `echo {} | sed s/[0-9][0-9][0-9].//g`' ;
こんなんもやってみたけど同じ結果でした。
>>415 と言いますと?
417 :
名称未設定 :05/02/06 21:29:49 ID:u+DQrlWf
>>416 お。echoだけしかやってないのがバレバレだ。
find -d . -name ....とやるとディレクトリの前にそのファイルが捜索される。
-execdirとかの説明は
>>370 の所でfindを調べるといいよ。実はfindそんなに
好きじゃないので使ってないし。
どうも-execdirで'{}'とか書くのはあんまりよろしくないみたいだ。ちゃんと
動くかはやってみないとわからない、と。
>>370 の所では「適切でない」と書いてあるけど、原文は「not qualified」
とあるっぽい。「不定」ということじゃないかと思ったけど…。
418 :
名称未設定 :05/02/06 22:01:34 ID:Jz7NgqXA
>>417 疑問に思ったのはまさにその最後2行の部分の事です。>370のトコのjmanも見たんですけど、文章短くてよくわからなくて『適切でない』とはなんじゃ??と思いまして。
-execdirで検索してみると、うにふ板のくだ質スレとかぼちぼちひっかかる(=使ってる人が居る)わりに
解説してるページって無いんですよね。
UNIXの部屋の解説には出て来ないし、Manpege of findで検索して出てくるLinux用?らしきjmanにも載ってないし、環境依存なオプションって事なんですかね?
漏れの持ってるSOFTBANKの『FreeBSDコマンドスーパーリファレンス』(題名に反して内容が浅い・・。半分がX Window Systemに割かれてるし。)にも技術評論社の『Mac OS Xターミナルコマンド ポケットリファレンス』にも載ってないし。
どうも自分の場合Perlで制御文?考えてちんたら書いていった方がいいような気がしてきました。
その前に教わった-dを試してみます。その結果はうざいかもしれませんがまた報告します。
419 :
名称未設定 :05/02/06 23:04:24 ID:Jz7NgqXA
-dを使うと深い方から名前を変える事ができるようになったようです。 しかしファイル名やフォルダ名に半角スペースのようなエスケープすべき文字が入ってる時にうまく行きません。 {}を'で囲んだりなんて事ではうまく行かないようだし??
420 :
名称未設定 :05/02/07 00:09:05 ID:LjSM3HBa
>>419 いろいろぼろが出てくるな。
確認するのは時間がかかるので、そういうことはかなり手を抜いてます。
なんか変な所はなるべく自力で直す & どうやって直したかを指摘して
くれるとうれしいかも。
'{}'じゃダメでしょう。外側でもうくくってあるから。やるなら"{}"じゃないかな。
さらにecho {}の部分と`mv...`の間の両方でくくる必要がありそうだ。単純に
くくってもだめだから、"`mv...`"のかわりに"$(mv....)"の方がいいかな。
まあ、perlでできるんだったらperlの方がいいかもね。ファイル数が多いと
相当遅くなるはず。findをパイプでつないでwhile(<>)でループすれば、
再帰とかをしないでできると思うし。
ちなみにzshだと、設定によるけど
for i in obj2/**/<->*(On); mv -f $i ${i:h}/${${i:t}##<->}
とか言っておく。やっぱり暗号っぽいかな。
421 :
名称未設定 :05/02/07 02:04:58 ID:InOvKOYR
>>420 すいません。クォートの説明していただいてる事がわからないです。
“スクリプト”らしくdo doneとか使って複数行のシェルスクリプトも書いてみたんですがさっぱりでした・・。
んでPerlで書いてみたんですが、
アドバイスをいただいたようにfind -d . -nameの結果を使ったおかげで
案ずるより生むが易しと言いましょうか、
思ったよりも簡単にできました。
最初自分で考えていたのはファイルテスト演算子でディレクトリだったらもぐって、、とかいうものだったので、それだときっと書き上げるのに1日がかりだったと思います。
※スクリプト中にバックスラッシュを書いてますが環境によっては見えないかもしれません。
#!/usr/bin/perl -w
use strict;
use utf8;#不必要ですがなんとなく
my($names,@namelist,$oldname,$newname);
$names = `find -d . -name '[0-9]*' -print`;
@namelist = split(/n/,$names);
while ($_ = shift @namelist) {
$oldname = $_;
$_ =~ s#(.*)[0-9]{3}.([^/]+)$#$1$2#;
$newname = $_;
#print $oldname." ---> ".$newname."n";#確認用
rename ($oldname,$newname);
}
#考えられる問題点。ファイル名に半角スラッシュが含まれていたら?
422 :
名称未設定 :05/02/07 03:10:49 ID:InOvKOYR
何故かファイル名・フォルダ名に半角スラッシュが含まれてても
>>421 のスクリプトで大丈夫でした。
なぜ????[^/]で否定してるはずなのに。
そしてマッチングは左側のものからなるべく長くマッチしようとする法則なんだからスラッシュを否定する必要がないのでした。
s#(.*)[0-9]{3}.(.+)$#$1$2#;
で1番最後のファイル名・フォルダ名の部分だけにマッチしますよね。
s#(.*)[0-9]{3}.(.+)#$1$2#;
でもいいのかな。
それにしても何故421のスクリプトでいいのかわからない。
残る問題はファイル名の中や末尾に3桁の番号+ドットが含まれていた場合。
で、最終的にこうなりました。
s#(.*/)[0-9]{3}.(.+)#$1$2#;
423 :
名称未設定 :05/02/07 23:37:52 ID:LjSM3HBa
>420でなんか「相当遅くなる」の主語がないけど、「mvを使うと相当遅くなる」ということです。
>>421 ん。クオートのことはまあ気にしないで。
取りあえずやたらとツッコんでおくと、
・たぶんperlだと$namesはいらない。@namelist = `find -d . -name '[0-9]*' -print`;でいいと思う。
・while ($_ = shift @namelist)もfor (@namelist)でいいはず。
・やってみると、for (`find -d . -name '[0-9]*' -print`)でいいみたいだ。@namelistもいらない。
・あえてやってないのかもしれないけど、($newname = $oldname) =~ s/...//g;とかいけるんじゃないだろうか。
perlは短く書くのの鬼だから、他にもあるかもね。
>>422 ファイル名にスラッシュがある場合ってあるのかな。OS側でできないようになってると思うんだけど。
それともディレクトリ含めてスラッシュがある場合?
424 :
名称未設定 :05/02/08 00:36:00 ID:iCIMTnfA
perlだけにしてみた。引数に処理デレクトリを指定。 #!/usr/bin/perl use strict; for( @ARGV ){ next unless( -e $_ ); next if( -l $_ ); if( -d $_ ){ opendir( DIR, $_ ) or die"can't open dir$_n"; my$path =$_; push( @ARGV, map( "$path/$_", grep( /A[^.]/, readdir(DIR) ) ) ); close( DIR ); } my$old =$_; s"/d{3}(?=[^d./][^/]*$)""; rename ($old,$_) unless( -e $_ ); }
425 :
名称未設定 :05/02/08 01:04:39 ID:yfLNGpsG
>>423 ご察しの通り置換と代入同時のとこは3割くらい「あえて」で、他のは9割9分くらい「知らなかったから」って感じです。
あまり省略すると後で自分で見た時わからないだろうというのもあるんですが、
教えていただいて勉強になりました。
>>423 後半
Macは本来パス区切りが:なので、:は使えないけど/はファイル名・フォルダ名に使えてしまうんですよ。
上では実際にファイル名・フォルダ名に/が入ったものを作って実験してみました。
内部的にうまくやってあるのかなあ??
と思って今ファイル名に/を使ったファイルをターミナルにドロップしたら、
/の部分が:と表示されました!おお!
>>424 おおかっちょええ!
知らないのがいっぱい。勉強させていただきます。
426 :
25 :05/02/08 01:27:48 ID:b/S5rYmV
>>424 さっぱり意味がわからん。一行ずつ解説頼む。
427 :
424 :05/02/08 01:50:42 ID:iCIMTnfA
>>426 無責任にも試してないので、動くか知らんが。
・引数が存在しなければ無視
・リンクファイル(エイリアスも)を無視
・デレクトリなら中のファイルでドットで始まるファイル以外を引数に追加
・数字三文字を消去したファイル名が存在無ければ改名
あっ、
× s"/d{3}(?=[^d./][^/]*$)"";
↓
○ s"(A|/)d{3}(?=[^d./][^/]*z)"$1";
と、まぁ、バグバグかもね〜。
428 :
名称未設定 :05/02/08 02:15:26 ID:yfLNGpsG
>>424 ,427
mapって便利ですねー。
Perl5の新しい関数なんですね。
赤ラクダに載ってない。orz
Perl5対応のはずの独習Perlにも載ってない。orz
うぅ・・。新しいラクダさん買おうかな・・。高いよー。
(で買った頃にまた次バージョン対応のが出たりして)
mapの中で使われてる$_はgrepで作られたリストの一つずつの要素を表してるんですよね?
一つ疑問なんですが、スラッシュってエスケープ必要ですか?
429 :
名称未設定 :05/02/08 02:23:27 ID:iCIMTnfA
>>428 > 一つ疑問なんですが、スラッシュってエスケープ必要ですか?
要らない。漏れのクセ。//で囲い直すとき、苦労しないように。
430 :
名称未設定 :05/02/08 04:22:22 ID:yfLNGpsG
>>426 他人様のに解説を加えるのもアレなので自分のを。一応テスト済み。
#!/usr/bin/perl -w #perlのスクリプトですよ。
use strict;#厳しく構文チェックしてね。
use utf8;#このスクリプトはUTF8で書かれています。
if (-d $ARGV[0]) {#もし渡された引き数の1番目がフォルダなら
&rename_file_and_folder($ARGV[0]);#それを引き数にサブルーチン呼び出し
} else {#そうでなかったなら
die "bad argument.n";#引き数がよくないですとエラー出して終了。
}
print "complete.n";#全部終わったら、終わりましたと表示。
sub rename_file_and_folder {#サブルーチン
my($foldersname,@items,$oldname,$newname);#これだけ変数使います
$foldersname = $_[0];#$foldersnameに渡された引き数を入れます。
$foldersname =~ s#/$##;#$foldersnameが/で終わってたら削ります。
opendir(DIR,$foldersname) or die "cannot open directory.n";
#↑$foldersnameのフォルダを開きます。失敗したらエラー出して終了。
@items = grep(!/^./,readdir(DIR));#↑フォルダの中身のリストを@itemsに入れます。
#ただし.で始まる名前のものは省く。赤ラクダ230ページ
closedir(DIR);#フォルダを閉じます。(操作をやめます)
foreach(@items) {#リスト@itemsの各々の要素を$_に入れて繰り返し。
$oldname = $foldersname."/".$_;#フォルダのパスと名前を足す
$_ =~ s/^[0-9]{3}.(.+)/$1/;$名前部分の置換処理
$newname = $foldersname."/".$_;#フォルダのパスと置換後の値を足す
#print $oldname." ---> ".$newname."n";#確認用。
rename($oldname,$newname);#古い名前から新しい名前に
if (-d $newname) {&rename_file_and_folder($newname)}#フォルダなら再帰呼び出し
#そのフォルダの中身の処理が終わったら戻ってきて次の要素の処理をする
}
}
431 :
名称未設定 :05/02/08 09:46:28 ID:yfLNGpsG
めたくそ遅レスですが、
>>115-122 で回答頂いたパターンのうちrsyncについて確認しました。
rsync -rv --include "*/" --include "*.jpg" --exclude "*" . ../rsynctest2
または
rsync -av --include "*/" --include "*.jpg" --exclude "*" . ../rsynctest3
で
カレントディレクトリ以下の拡張子jpgのファイルだけが
ディレクトリ構造を保持しつつrsynctest2,rsync3以下にコピーされるのを確認しました。
しかしローカル→ローカルでやってるせいか
-aオプションと-rオプションの違いがよくわかりませんでした。
それぞれls -lしても同じ結果。
で、2回目同じコマンドを実行したところ、
-rオプションの方は再びコピーが起きたようで
rsynctest2の中のファイルのファイル変更時刻が変わりました。
-aオプションの方はコピーが起きなかったようで
rsynctest3の中のファイルのファイル変更時刻は1回目実行後と変わりませんでした。
ttp://www.infoscience.co.jp/technical/rsync/rsync.html によると『-aは-rlptgoDと同じ』らしいので列記すると、
-r:再帰的にディレクトリをコピー
-l:ソフトリンクを維持
-p:パーミッションを維持
-t:タイムスタンプを維持
-g:グループを維持
-o:オーナーを維持(rootのみ)
-D:デバイスを維持(rootのみ)
『デバイスを維持』とは何ぞや・・。
『通常、rsync は同じファイル長、同じタイムスタンプのファイルをスキップします。』
という説明があるから-rだけでも2回目のコピーは無しになるはずなのでは???
432 :
名称未設定 :05/02/08 10:02:01 ID:c4D8dcXG
ID:yfLNGpsGは毎日朝から晩までいるけど真性のヒキコモリ?
433 :
25 :05/02/08 13:42:22 ID:Mzjf185Q
434 :
25 :05/02/08 23:08:02 ID:b/S5rYmV
#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
txt=`curl -s -fL
http://www.rkk.co.jp/cgi-bin/soundsteady/bbs.cgi` linenumber=`echo "$txt" | wc -l`
firstline=`echo "$txt" | grep -n \ \<B\> | grep SOUND\ STEADY | cut -f1 -d:`
txt2=`echo "$txt" | sed -n "$firstline,$linenumber p"`
lastlinepre=`echo "$txt2" | grep -n \ \<B\> | sed -n "2 p" | cut -f1 -d:`
lastline=`expr $lastlinepre - 1`
mailbody=`echo "$txt2" | sed -n "1,$lastline p" | grep BR |
perl -pe 's/<BR>/n/g'`
echo "$mailbody"
echo "$mailbody" | nkf -j |
mail -s "mailtitle"
[email protected] これで
n
放送時間は26時10分(深夜2時10分)から45分間です。nnSMAP「友だ(略)
というのがTerminal上にechoされて、さらに
放送時間は26時10分(深夜2時10分)から45分間です。SMAP「友だ(略)
というメールが届くのですが、さっぱり改行されていません。
nでもrでも同じでした。これはいったいどういうことでしょうか?
435 :
名称未設定 :05/02/09 00:09:36 ID:lDUG3GJK
>>434 >これはいったいどういうことでしょうか?
記号コードには、気をつけろって事です。
436 :
名称未設定 :05/02/09 02:20:29 ID:Qgsn8LD2
>>434 それ1ページ目に書き込みなかった時どうすんの?
firstlineが空かどうかで条件分岐した方がよくないかい?
疑問点についてですが、同じスクリプトの中で円記号とバックスラッシュを両方書いてて何かおかしいと思わないですか。
437 :
25 :05/02/09 07:20:03 ID:XCWqvHCJ
>>435 >>436 !!!!!
な、なるほど・・・。たしかにyenとbackslashが同時混在するのって
なにか変ですね・・・。
文字コードとか改行コードとか記号コードとか、
いまいち意味がわかっていないのですが、
俺様はすごいのでちょっち勉強して調べてみますよ。
438 :
25 :05/02/09 07:20:52 ID:XCWqvHCJ
>>436 >1ページ目に書き込みなかった時どうすんの?
お、おっしゃる通りですね!!!
if文かましてみます。
439 :
25 :05/02/09 09:01:57 ID:z6Mjba61
#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
txt=`curl -s -fL
http://www.rkk.co.jp/cgi-bin/soundsteady/bbs.cgi` linenumber=`echo "$txt" | wc -l`
firstline=`echo "$txt" | grep -n \ \<B\> | grep SOUND\ STEADY | cut -f1 -d:`
txt2=`echo "$txt" | sed -n "$firstline,$linenumber p"`
lastlinepre=`echo "$txt2" | grep -n \ \<B\> | sed -n "2 p" | cut -f1 -d:`
lastline=`expr $lastlinepre - 1`
echo "$txt2" | sed -n "1,$lastline p" | grep BR | perl -pe 's/<BR>/\r/g' > sh/soudsteadyout.txt
cat sh/soudsteadyout.txt
このshによって以下の
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
放送時間は26時10分(深夜2時10分)から45分間です。
SMAP「友だちへ〜Say What You Will〜」
山下達郎「FOREVER MINE」
Sowelu「Do You Remember That?」
CHEMISTRY「My Gift to You 〜CHEMISTRY in SUNTORY HALLより」
SAYAKA「上弦の月」
Destiny's Child「Soldier」
THC!!「雪」
Rie fu「2cm」(コメント有り)
以上です。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
というtextが無事に出力されるのですが、
440 :
25 :05/02/09 09:04:02 ID:z6Mjba61
それをcatすると変になります。つまり、 eelsPBG4:~ sheel$ cat sh/soudsteadyout.txt 以上です。u「2cm」(コメント有り)dier」 〜CHEMISTRY in SUNTORY HALLより」 こういう意味不明な文字がTerminal上に表示されるのです。 (echoで済むところをわざわざtext出力してcatしてみたのはデバッグのためです) これでは当然mailしても上記の変なのしか届きません・・・。 いったいどうしたらいいのでしょうか?
441 :
名称未設定 :05/02/09 09:37:22 ID:Qgsn8LD2
UNIX(=ターミナル)の改行はLF Macの一般的な改行はCR(だけどエディタでLFでもCRLFでも開ける)
442 :
名称未設定 :05/02/09 09:47:09 ID:/SQO8TSS
>>440 >いったいどうしたらいいのでしょうか?
¥r →¥n
443 :
25 :05/02/09 10:09:26 ID:z6Mjba61
>>441 >>442 でキタ━━━━━━(゚∀゚)━━━━━━ !!!!!
放送時間は26時10分(深夜2時10分)から45分間です。
SMAP「友だちへ〜Say What You Will〜」
山下達郎「FOREVER MINE」
Sowelu「Do You Remember That?」
CHEMISTRY「My Gift to You 〜CHEMISTRY in SUNTORY HALLより」
SAYAKA「上弦の月」
Destiny's Child「Soldier」
THC!!「雪」
Rie fu「2cm」(コメント有り)
以上です。
444 :
25 :05/02/10 02:27:27 ID:EqyNj7bd
>>398 これもパワーアップしました。
アップルスクリプトアプリケーションとして登録して使えるようになりました。
#!/bin/sh
#
http://www.geocities.jp/turtle_wide/tools/sshpass.html PATH=/bin:/usr/bin:/usr/local/bin
if test -e /Volumes/NO\ NAME/PRIVATE/AU/DF/D_MA
then
cd /Volumes/NO\ NAME/PRIVATE/AU/DF/D_MA
lastnumber=`ls /Users/sheel/hogehoge |
tail -1 | cut -f1 -d. | sed "s/[^0-9]//g"`
newnumberpre=`expr $lastnumber + 1`
filenamelist=`ls -tr *.3G2`
i=0
for filenamebefore in $filenamelist
do
newnumber=`printf "%04d" $newnumberpre`
filenameafter=`echo "$filenamebefore" |
sed "s/[0-9][0-9][0-9][0-9]/$newnumber/g"`
mv $filenamebefore /Users/sheel/sh/filebachtemp/$filenameafter
newnumberpre=`expr $newnumberpre + 1`
i=`expr $i + 1`
done
cp -p /Users/sheel/sh/filebachtemp/*.3G2 /Users/sheel/hogehoge/
scp -p /Users/sheel/sh/filebachtemp/*.3G2
[email protected] :/Users/sheel/hogehoge/
rm /Users/sheel/sh/filebachtemp/*.3G2
osascript -e 'tell application "Finder" to eject disk "NO NAME"'
echo "SDカード内の$i個の3G2ファイルは無事にサーバとローカルに移動されたみたいだよ。SDカードは空にしてイジェクトしといたからね。" | nkf -s | iconv -f SHIFT-JIS -t UTF-8-MAC
else
echo "SDカードを入れてからもう一度やり直し!" | nkf -s | iconv -f SHIFT-JIS -t UTF-8-MAC
fi
445 :
25 :05/02/10 02:32:33 ID:EqyNj7bd
>>444 これをこのアップルスクリプトで動かします。
tell application "Finder"
do shell script "./Users/sheel/sh/filebach.sh"
set kekka to result
display dialog kekka buttons {"へぇ"} default button "へぇ" with icon note
end tell
>>444 で
最後付近のechoコマンドをパイプで
| nkf -s | iconv -f SHIFT-JIS -t UTF-8-MAC
とするところで苦労しました。
shellscriptの出力結果をapplescriptに渡すときには
日本語はUTF8しか使えないそうです。(今のところ)
そこでiconvを使ってUTF8に変換してやります。
nkfが入ってる環境だとiconvの欠点である
「入力されたtextの文字コードをわざわざ指定してあげないといけない」
ということを回避することができますね。つまり、
前のコードがなんであれ、
| nkf -s | iconv -f SHIFT-JIS -t hogehoge
とすることでhogehogeという文字コードで出力することが可能。
ちなみにnkfの2.0.4ではUTF8に対応した、とあるんだけど、
実際にUTF8に変換するオプションが見つかりません。
どんなオプションをつければいいのですか?
446 :
25 :05/02/10 12:51:37 ID:EqyNj7bd
>>434 こちらもアドバイスをいただいたので改変しました。
RKKのSOUNDSTEADYの放送内容を取得するshです。
一時間おきとか毎日一回実行するようにcronしておくと
新しい番組表が更新されたときだけメールをくれます。
↓ ↓
447 :
25 :05/02/10 12:54:10 ID:EqyNj7bd
#!/bin/sh
if test -e sh/soundsteadyoutpre.txt ; then
dummy=1
else echo "hogehoge" > sh/soundsteadyoutpre.txt
fi
txt=`curl -s -fL
http://www.rkk.co.jp/cgi-bin/soundsteady/bbs.cgi` linenumber=`echo "$txt" | wc -l`
firstline=`echo "$txt" | grep -n \ \<B\> | grep SOUND\ STEADY |
head -1 | cut -f1 -d:`
firstlineminus60=`expr $firstline - 60`
if test -n $firstline ; then
txt2=`echo "$txt" | sed -n "$firstline,$linenumber p"`
txt3=`echo "$txt" | sed -n "$firstlineminus60,$firstline p" |
grep \<B\>\<FONT\ SIZE=\"4\"\> | tail -1 |
perl -pe 's/<B><FONT SIZE="4">//' | perl -pe 's/<\/FONT><\/B>//' |
perl -pe 's///g'`
lastlinepre=`echo "$txt2" | grep -n \ \<B\> | sed -n "2 p" | cut -f1 -d:`
lastline=`expr $lastlinepre - 1`
mailbody=`echo "$txt2" | sed -n "1,$lastline p" |
grep BR | perl -pe 's/<BR>/\n/g' | perl -pe 's///g'`
mailtitle=`echo "SOUND STEADY $txt3" | nkf -j`
echo "$mailbody" > sh/soundsteadyout.txt
diff=`diff sh/soundsteadyoutpre.txt sh/soundsteadyout.txt`
if test -n "$diff" ; then
echo "$mailbody" | nkf -j | mail -s "$mailtitle"
[email protected] mv sh/soundsteadyout.txt sh/soundsteadyoutpre.txt
else
exit 1
fi
else exit1
fi
448 :
25 :05/02/10 12:58:14 ID:EqyNj7bd
>>447 if test -e hoge/hogehoge.txtというのは
hoge/hogehoge.txtが存在すればなにもしない
hoge/hogehoge.txtが存在しなければhoge/hogehoge.txtをつくる
ということがしたいだけなのですが、
どうしてもdummy=1とか無意味なコードを書かないと先に勧めません。
簡単に -e の逆みたいな意味のあるやつはないんでしょうか?
改行制限の関係でふだんは
else
command
と書いてるところを
else command
としてあります。これで動作するのかどうか知りません。
449 :
名称未設定 :05/02/10 13:28:23 ID:E7o87DXr
if [! -e hoge/hogehoge.txt] ; then (if test ! -e hoge/hogehoge.txt ; then でも同じ) でいいんぢゃないの? !が否定の演算子みたいだから。
450 :
名称未設定 :05/02/10 14:14:54 ID:R1OaKii3
touch hoge/hogehoge.txt ではどう? 無ければ作るし、あれば何もしない。 (ファイルの最終アクセス時間を更新するだけ)
451 :
名称未設定 :05/02/10 16:02:26 ID:E7o87DXr
>449で阿呆な間違いをしている事に気付いたが 気付くだろうから放置しておく事にする。
452 :
25 :05/02/10 18:24:12 ID:rMkjkcs5
おう。乙。 ヒマなときにまたやってみるよ。
453 :
25 :05/02/11 14:58:10 ID:xkWA5CJk
if文でエラーが起こったときにいちいちエラーを 返さないようにするにはどうしたら(・∀・)イイ!!ですか? 例えば if test $hoge -le 1000 としたときに$hogeがintegerじゃないときに いちいちエラーが返答されて困っているのです。
454 :
名称未設定 :05/02/11 17:05:45 ID:GgwsXRwO
せっかく25以外でも質問する人が出てきたのに、また逆戻りかね。
取りあえず、誰も答えてないっぽいのに答えてみよう。
>>445 man nkfやった?すぐ見つかると思うんだけど。
>>453 その例だとそんなものをhogeに入れるなと言いたくなるけど、まあ
しょうがない場合も多いかな。
if [[ $hoge -le 1000 ]]とかif (( hoge <= 1000 ))とかでうまくいくと思う。
test ...とか[ ... ]よりも、[[ ... ]]の方が高機能で変なことも起こりにくいので
互換性とかを考える場合を除いてはこっちの方がいいと思うよ。
455 :
名称未設定 :05/02/11 17:30:58 ID:T3bKTCXk
nkfとiconv連なってるのおもしろい iconvはUTF-8-Macて指定があるのか。 何かMacの場合は平仮名の濁点と本体が別の文字の仕様を採用してるんでしたっけ。
456 :
25 :05/02/11 18:32:12 ID:sSPbz1Rj
>>454 ありがとうございます。
eelsPBG4:~ sheel$ man nkf
No manual entry for nkf
となってしまいます・・・。
ちゃんとインスコしてnkfコマンド自体は実際使えてるのに・・。
例の日本語manサイトでもひっかかりませんで・・・。
testより[]の方がいいんですね・・。
いや[]とか記号が入ると意味がわかりづらくなるので
testとかを好んで使っていました。
言われた方法でやってみます。
457 :
名称未設定 :05/02/11 18:35:23 ID:T3bKTCXk
[]じゃなくて[[]]って書いてあるやん。 testと[]は全く同じじゃなかったっけ? (て事は[[]]はtest testと同じって事だと思うが、それよりも[[]]の方が見やすいしわかりやすいよね) nkfの方は nkf --helpってやってみそ。
458 :
25 :05/02/11 18:44:33 ID:sSPbz1Rj
>>457 nkf -help
では入力待ちになってどうもできませんでした。
今もう一回googleってみたらわかりました。
nkf -w
でUTF8に変換してくれるみたいですね。
459 :
名称未設定 :05/02/11 18:45:59 ID:ygSPENyG
460 :
名称未設定 :05/02/11 18:52:38 ID:T3bKTCXk
>>458 -helpじゃなくて--helpね。よく見てね。
461 :
名称未設定 :05/02/11 18:57:49 ID:T3bKTCXk
あと俺もよくわかってないが、 どうやら contrl + d が入力待ち状態の終了(全部入力したという合図)みたい。 あとcontrol + c が今実行中のものを強制ストップさせるみたい。 だから入力待ちになってどうもならんという時は上の二つのどっちかやると また作業が続けられると思われ。
462 :
名称未設定 :05/02/11 19:15:43 ID:GgwsXRwO
>>456 あ〜。なるほどなるほど。MANPATHが通ってなくない?
どうやってnkf使っているかによるけど、/usr/local以下に入れたなら
export MANPATH=/usr/local/man:/usr/share/man
とかやって環境変数を書き換えた方がいいと思う。
日本語のサイトはたぶん標準で入っているコマンドしか載ってないだろうから
しかたないですね。
>457にもあるけど、'['はコマンドでやることはtestとほぼ同じ。でも [[ ... ]]とか
はコマンドじゃなくて``とかif ... then ... fiのようなシェルの構文。だから例えば
if [[ $hoge != fuga ]]と書いたときに、$hogeが空白だとしてもエラーはない。
if echo $hoge | grep -q fuga `
とかやらないでも
if [[ $hoge == *fuga* ]]なんてこともできる。
もちろん、そもそもこういうシェル組み込みの機能とコマンドの組み合わせの
どちらを採るかというのは個人で使っている限りは趣味の話だろうから
>454は「[[]]がお勧め」という程度の意味なんだけどさ。
>>457 ということで「[[」と「test test」は違うということでお願いします。
二つの[の間にスペースが入れば正しいけど。
463 :
名称未設定 :05/02/11 20:05:53 ID:T3bKTCXk
( ・∀・)つ〃∩ ヘェー ヘェー ひとつ賢くなりますた。ありがとう。
464 :
名称未設定 :05/02/11 20:25:09 ID:/+dfXq+2
[]はtestとほぼ同じじゃなくて完全に同じ iBook:~ nanashi$ ls -l /bin/[ /bin/test -r-xr-xr-x 2 root wheel 18288 20 Aug 12:35 /bin/[ -r-xr-xr-x 2 root wheel 18288 20 Aug 12:35 /bin/test linkが2でhard linkされていてファイルサイズや日付が同じで あることから推測されるように2つはまったく同じもの。 ついでに]の方はtestの引数になり無視されている。
465 :
名称未設定 :05/02/11 20:42:37 ID:YoSvzcHN
bashなんかだとビルトインだけどな。
466 :
名称未設定 :05/02/11 20:54:46 ID:T3bKTCXk
ビルトインで何故か冷蔵庫が連想されたです・・。 そんなCMがあったような。
467 :
名称未設定 :05/02/11 21:30:29 ID:GgwsXRwO
>>464 超細かいことだけど、ファイル自体は全く同一だけど「]」の挙動だけ
違うので、一応「やることはtestとほぼ同じ」と書いたんだよね。
プログラムは全く同じだけど、最初の引数が「[」「test」と違うので
やることが全く同じとは言えない、と。
同じように全く同じファイルを指しているものに例えばgzipとgunzipが
あるけど、この二つのやることが全く同じとは言わないでしょう。
まあgzipと違って「]」が必要かどうかなんて本質的にはどうでもいいので
事実上全く同じといっても良いだろうけどさ。
468 :
25 :05/02/11 21:33:52 ID:4lLJbb7o
>>460 !!!
あ!わかりました。今やったらちゃんとhelpが出てきました。
これですね。
j,s,e,w Outout code is JIS 7 bit (DEFAULT), Shift JIS, AT&T JIS (EUC), UTF-8
>>461 あ、どうもありがとです。その点については
「たのしいUNIX」を読んで理解してますので。
>>462 いろいろ解説ありがとう。
[[]]でやってみたけどどうもうまくいきません。
俺の本来目的は、
「$hogeがintegerだった場合には・・・」という条件がほしかったのです。
その目的でif $hoge -le 10000とかいう感じでだましていたのです。
ただ、これだとinteger以外の文字が来たときに、そのifはスキップして
elseの方に飛ぶのはいいのですがその際にいちいち
「integerじゃねぇよ!!」
とエラーを報告しやがるのでウザかったのです。俺みたいに。
でも解決しました。
if test "$firstline" = "[0-9][0-9]*"
こうすればよかったみたいです。
469 :
名称未設定 :05/02/11 21:40:55 ID:bnEgZLli
どうでもいいが、Terminalからファイルを.gzで圧縮するとむちゃくちゃ早いなぁ。 もうStuffitなんか使えねえ。
470 :
名称未設定 :05/02/11 21:47:55 ID:T3bKTCXk
つかStuffItでgz作れるの?知らなかーたよ。
471 :
名称未設定 :05/02/11 21:50:03 ID:GgwsXRwO
現実逃避に余談…と。
>>458 一般的には-hと--helpを用意しているソフトが多いと思う。場合によっては
-helpが-h -e -l -pとか解釈されることがあるから、2文字以上するオプションは
デフォルトで「--」をつけるのがお勧め。
オプションには流派があって、GNUなソフトとかは「-w」みたいな1文字
オプションと「--wara」みたいな2文字以上の長いオプションを両方用意して
いて、それに従っている人も多いと思う。
それ以外だとBSDの標準のソフトは「--」はない(単に古いからかな)とか
いくつかのAppleのソフトは「-」+長いオプションだったりする。
…と思うけどね。GNUはけっこういろいろ決めてるみたいだけど、他は特に
決まった標準があるかどうかはわからない。
472 :
25 :05/02/11 22:01:53 ID:4lLJbb7o
>>471 ありがとう。
w3m --help
grep --help
で使えました。勉強になります。
473 :
名称未設定 :05/02/11 22:01:57 ID:GgwsXRwO
>>468 そうだったのか…。
やっぱり本質的に何がしたいのかを言ってくれた方が良いなあ。
しかし
>if test "$firstline" = "[0-9][0-9]*"
>こうすればよかったみたいです。
これで整数かどうかを判断できたっけ…。
if [[ "$firstline" = [0-9][0-9]* ]]じゃなくて?
まあこれでも3文字目以降で数字じゃないのが出たら、とかあるけど、
それはいいとして。
ちなみに、最近知ったんだけどbashでshopt -s extglobとかすれば
例えばif [[ "$firstline" == +([0-9]) ]];
でいけるんだね。へぇ。
ls MAV_+([0-9]).3G2
とかもできる、と。
474 :
名称未設定 :05/02/11 22:04:37 ID:tZvmzti8
[[ は bash 依存? Mac使ってれば果てしなくどうでもいいが、 そういうときはスクリプトの行頭は #!/bin/bash のほうがいいのかね。
475 :
名称未設定 :05/02/11 22:10:54 ID:+j/56GPt
476 :
名称未設定 :05/02/11 22:11:36 ID:GgwsXRwO
>>474 bashと、あとzshも使えるけど、FreeBSDのshとashはだめだった。
ksh由来の機能なのかな。
互換性が重要なら#!/bin/bashとかの方がいいかもしれないけど、そこまで来ると
bashの場所も/usr/binとか/usr/local/bin以下の可能性が出てくると思うね。
477 :
25 :05/02/11 22:32:46 ID:4lLJbb7o
>>449 なるほど。こういう感じで使えました。
if test ! -e sh/soundsteadyoutpre.txt
then
echo "you have soundsteadyoutpre.txt"
else
echo "you do not have soundsteadyoutpre.txt"
fi
勉強になります。
>>450 touchって便利そうですね。頭に入れておきます。
478 :
名称未設定 :05/02/11 22:57:39 ID:1VbvUL/z
なんかここはえらく間違った知識が蔓延しているなあ 環境変数MANPATHは今は基本的には使われない 代わりにmanpath(1)を使っている Macのshはbashなので[は/bin/[ではないしtestは/bin/testじゃない $ sh -c "type [" [ is a shell builtin $ sh -c "type test" test is a shell builtin
479 :
名称未設定 :05/02/11 23:50:52 ID:GgwsXRwO
>>478 へぇ。manpathの存在は知ってたけど、PATHもみるのね。
全然知らなかったよ。
まあ、MANPATHはFinkが使っているし、個人的には現状維持しちゃい
そうだけど。
どうでも良いけど、SolarisはMANPATHを使ってるかもな。昔使ってたんで。
MANPATHはそのとき覚えた。
ただ、>465でtestはビルトインだというツッコミは出たよ。
この場合本質的には同じだと思うし、他の人が言ったことをわざわざもう一回
言うのもなんだから>467では言ってないだけ。
他にもいろいろありそうなので、指摘してください。
480 :
478 :05/02/12 01:24:35 ID:EVe5jP+Y
>>479 >どうでも良いけど、SolarisはMANPATHを使ってるかもな。昔使ってたんで。
>MANPATHはそのとき覚えた。
つーかmanpath(1)はLinuxやFreeBSD系統限定のお話
SolarisはもちろんNetBSDにもないよ
ただPATHから引いてくれるからたとえば
#cd /usr/local
#ln -s share/man
とかやってればMANPATHを管理する必要がなくなるので楽だよ
481 :
478 :05/02/12 01:25:32 ID:EVe5jP+Y
つづき
>>479 >ただ、>465でtestはビルトインだというツッコミは出たよ。
ホントだ、すまん
[やtestがビルトインなのはbashに限らず
今どきのshではだいたいビルトインってのは知っておいたほうがいいかも
$ uname -a
SunOS xxxx 5.9 Generic_112233-12 sun4u sparc SUNW,UltraAX-i2
$ sh -c "type ["
[ is a shell builtin
$ sh -c "type test"
test is a shell builtin
$ uname -a
FreeBSD xxxx 5.2-RELEASE FreeBSD 5.2-RELEASE #0: Sun Jan 11 04:21:45 GMT 2004
[email protected] :/usr/obj/usr/src/sys/GENERIC i386
$ sh -c "type ["
[ is a shell builtin
$ sh -c "type test"
test is a shell builtin
$ uname -a
NetBSD xxxx 2.0 NetBSD 2.0 (GENERIC) #0: Wed Dec 1 10:58:25 UTC 2004 builds@build:/big/builds/ab/netbsd-2-0-RELEASE/i386/200411300000Z-obj/big/builds/ab/netbsd-2-0-RELEASE/src/sys/arch/i386/compile/GENERIC i386
$ sh -c "type ["
[ is a shell builtin
$ sh -c "type test"
test is a shell builtin
482 :
名称未設定 :05/02/12 03:40:29 ID:WvYut9kK
>>477 if test ! -e 〜;then
は「〜が存在していないなら」なのに
"you have"ってechoしてますよ。
if test ! -e '/Users/nanjamonja';then echo 'ne-yo.';else echo 'aru.';fi
(てっきりif ! test -eが正解なのかと思ったらif test ! -eでよかったんですね。
man testにもちゃんと書いてあった。)
483 :
25 :05/02/13 09:59:55 ID:y6F/uzDO
>>482 ああ、そうだね。
>>477 は ! をつけたりつけなかったりして ! の適正な場所と意味を
検証するのに使ったので。
484 :
25 :05/02/13 15:35:53 ID:y6F/uzDO
#!/bin/sh
url=
http://hobby7.2ch.net/av/subject.txt boardtitle=`echo "$url" | cut -f4 -d\/`
threadtitlebase=で、初心者はDVD
txt=`curl -s $url | grep $threadtitlebase`
threadnumber=`echo "$txt" | wc -l`
if test ! -e sh/2ch${boardtitle}outpre.txt ; then
echo "hogehoge" > sh/2ch${boardtitle}outpre.txt
fi
if test $threadnumber -eq 1 ; then
#echo "新規スレはありません"
exit 1
elif test $threadnumber -ge 2 ; then
newtheadnumber=`expr $threadnumber - 1`
newtheadcount=`echo "$txt" | cut -f1 -d\( | cut -f2 -d\> |
sed "s/[^0-9]//g" | sort -n | tail -1`
echo "$newtheadcount" > sh/2ch${boardtitle}out.txt
diff=`diff sh/2ch${boardtitle}outpre.txt sh/2ch${boardtitle}out.txt`
if test -n "$diff" ; then
mailtitle=`echo "「$threadtitlebase」の新規スレ$newtheadcountが$newtheadnumber個あります" | nkf -j`
echo "$mailtitle" | mail -s "$mailtitle"
[email protected] mv sh/2ch${boardtitle}out.txt sh/2ch${boardtitle}outpre.txt
fi
else
echo "エラーです"
mailtitle=`echo "「$threadtitlebase」の新規スレ判定shでエラーが起きました" | nkf -j`
echo "$mailtitle" | mail -s "$mailtitle"
[email protected] fi
485 :
25 :05/02/13 15:37:01 ID:y6F/uzDO
>>484 これをcronで定期実行すると、
当該スレッドに新規スレが立ったときだけ
その旨をメールを送ってくれます。
(初回起動時のみはとにかくメールをくれます)
486 :
名称未設定 :05/02/13 22:58:01 ID:bNWg0Hqj
そこかしこに日本語が含まれてて、たまたま動くって感じがするね。 日本語にきちんと対応してないコマンドが多いから、perlとかrubyとか使わないと安心できないよ。それはさておき、 echo "$newtheadcount" > sh/2ch${boardtitle}out.txt 出力先はフルパスで書いておいたほうが吉 送信先のメールアドレスは変数にして冒頭に置いたほうが便利でしょう。 メールの本文はヒアドキュメントを使うとよいと思われ。
487 :
名称未設定 :05/02/13 23:33:40 ID:bNWg0Hqj
diff=`diff sh/2ch${boardtitle}outpre.txt sh/2ch${boardtitle}out.txt` if test -n "$diff" ; then 差異がたくさんあると変数に格納できなくなってエラーするぞ。 diff -q するか diff sh/2ch${boardtitle}outpre.txt sh/2ch${boardtitle}out.txt > /dev/null if [ $? -ne 0 ] ; then のほうが適切かと。 増えた行の情報がほしいんなら comm がいいかも。 comm -13 古いsubject.txt 新しいsubject.txt すれば新着スレ(=新しいsubject.txt にだけ存在する行) が抽出できると思われ。あらかじめソートしておくのをお忘れなく。
488 :
25 :05/02/13 23:49:16 ID:qxzez8qt
>>486 乙。
>出力先はフルパスで書いておいたほうが吉
→なるほど確かに。
>送信先のメールアドレスは変数にして冒頭に置いたほうが便利でしょう。
→なるほどそうすれば簡単に誰でも使えるshに一般化できますね。
自分でちょこっと書き換えるのにも楽そうだし。
>メールの本文はヒアドキュメントを使うとよいと思われ。
→!!!! こ、これは便利そうだ!
#!/bin/sh
cat <<EOT | nkf -j | mail -s "test"
[email protected] baka
afo
バカだね。
EOT
ほほぉ〜!!!!
489 :
25 :05/02/14 00:02:04 ID:6SVYkjSO
>>487 乙。
>diff -q
-q Report only whether the files differ, not the details of the
differences.
なるほど。-q オプションでよさげだな。
> > dev/null
!!!!!
こ、これはこういうものがあったのか。
(今までも出てきてたのかな)これは便利そうだね。
なによりdisk書き込みせずにdiff判定できるのがいいね。その方法だと。
>>484 の cat "hogehoge" > とかも cat dev/null > の方がセンスよいかも。
>comm
よさげだな。やってみるわ。ヒマなときにでも。
490 :
名称未設定 :05/02/14 01:15:06 ID:RShixA3n
>>489 echo "hogehoge" > sh/2ch${boardtitle}outpre.txt
ここは
touch sh/2ch${boardtitle}outpre.txt
が普通だろう。cat /dev/null > ... はキモイ。
491 :
25 :05/02/16 21:32:26 ID:NsYeH+S1
OS10.3.8です。 パスワード認証を設置しようと悪戦苦闘しているのですが、 以下のような設定を行っていても認証設定がONになってないようです。 (普通にアクセスできてしまう・・・) なにがおかしいのでしょうか? eelsPBG4:~/sites sheel$ cat .htaccess AuthType Basic AuthName "By Invitation Only" AuthUserFile /usr/local/passwd/passwords AuthGroupFile /dev/null Require valid-user eelsPBG4:~/sites sheel$ cat /usr/local/passwd/passwords cat: /usr/local/passwd/passwords: Permission denied eelsPBG4:~/sites sheel$ sudo cat /usr/local/passwd/passwords baka:0yr4uzj(略
492 :
名称未設定 :05/02/17 01:03:37 ID:Cwf4ZT/l
>>491 思いつく原因.
1.AuthConfig設定し忘れ
そもそもその場所は.htaccessによる設定が許されてる?
具体的にはAllowOverride AuthConfigが設定されてる場所かい?
2.passwordsファイルが読めない
passwordsというファイルはmodeが400になってるんだろうけど,ownerは誰だい?
apacheの動作ユーザーとしてと一致してるかい?(標準ではwww)
この場合はerrlogによめねぇよってメッセージがでてると思う.
493 :
名称未設定 :05/02/17 01:10:53 ID:Kk9CRq/U
もはやシェルスクリプトとはなんの関係もないな
494 :
名称未設定 :05/02/17 01:56:59 ID:QYc4WCIS
皮先くん隔離スレだからしかたがない
495 :
25 :05/02/17 02:27:42 ID:vVn+xTVG
>>492 紙!!
で、できました!!!(苦節数ヶ月・・・)
sudo pico /etc/httpd/users/sheel.conf
で開いて、
AllowOverride None を
AllowOverride All に変更するだけで
パスワードを求められました。
ところがである。
ちゃんと
>>491 のようにユーザー名はbaka
パスワードは(略)で入力しても先に勧めません・・・。
apacheを再起動してもダメですた。
もう一度htpasswdコマンドで
eelsPBG4:~ sheel$ sudo htpasswd /usr/local/passwd/passwords baka
New password:
Re-type new password:
Updating password for user baka
としてからapacheを再起動してもダメですた。
なにがいくないのでしょうか?
496 :
25 :05/02/17 02:52:16 ID:vVn+xTVG
>>495 わかりました。
/usr/local/passwd/passwords
のアクセス権の設定がよくなかったようです。
640にしてました。
これで治りました。
sudo chmod 604 /usr/local/passwd/passwords
497 :
名称未設定 :05/02/17 07:46:26 ID:5f3mHO4w
俺はApacheの事は全然わからんが > /etc/httpd/users/sheel.conf > AllowOverride None を > AllowOverride All に変更 ってすごく大ざっぱな気がするんだけど、それでいいの? 492さんの記述を読むと、ディレクトリごとに許可したり許可しなかったりするようなものなのでは?
498 :
名称未設定 :05/02/17 22:56:31 ID:tYHFU/D0
「ちゃっちゃか」について
499 :
名称未設定 :05/02/18 00:04:10 ID:qi4nCXg6
>>497 同じくapacheに詳しくないけど、/etc/httpd/users/sheel.confのAllowOverride
自体がもともと特定のディレクトリの設定だから良いんじゃないかな。
500 :
名称未設定 :05/02/18 04:06:06 ID:k9OyC4Tc
初心者質問スレから誘導されてきました。 JAVAについての質問です。 当方、MacOS9.2.2、MRJ2.2.5、IE5.1.6、ネスケ7.0です。 レンタル元の鯖缶がファイルマネージャー置いたよーというのでアクセスしてみたら Stack Trace: java.lang.Error: Failed to get language list : sun.io.MalformedInputException : null at FileManager.init(Compiled Code) at com.apple.mrj.JManager.JMAppletViewer_OLD.doAppletInit(JMAppletViewerOld.java) at com.apple.mrj.JManager.JMAppletViewer_OLD.setState(JMAppletViewerOld.java) at com.apple.mrj.JManager.JMViewerEvent.post(JMAppletViewerOld.java) at com.apple.mrj.JManager.AVDispatcherThread.run(JMAppletViewerOld.java) というJAVAメッセージが出て表示すら出来ませんでした。 ブラウザやOSを(OS10.1.5)変えてみても全滅でした。 ファイルマネージャーというのはUserminのものなんですが本家の ファイルマネージャー(demo版)は動きました。 この場合、私の方に問題があるのでしょうか?それとも鯖缶の設置した ものの方に問題があるのでしょうか?
501 :
名称未設定 :05/02/18 04:18:58 ID:RRkHKzz8
502 :
名称未設定 :05/02/19 01:11:20 ID:GP8sC+a1
どうも解らない現象で、解る方いらしたらアドバイスお願いします。 $hdiutil create -srcfolder hoge hoge.dmg とかで、パスワード聞かれる場合とそうじゃない場合があるんですが、 パーミッションとかですかね? マシン2台試して一方は聞かれ、もう一方は聞かれません。 (共に管理者権限のユーザ、OS10.3.8) パスワード聞かれない方法わかる方お願いします。(´Д`)
503 :
名称未設定 :05/02/19 01:29:56 ID:r++ADzKS
シェル「スクリプト」スレなんだから
強引にでもスクリプトに関連づけてくれと思いつつ
>>502 >パーミッションとかですかね?
とかじゃない?
hoge 全体に読み込み権限あるかい?
504 :
名称未設定 :05/02/19 13:39:24 ID:GP8sC+a1
>>503 >hoge 全体に読み込み権限あるかい?
コピーは出来るんであるはずなんですけどね。
>強引にでもスクリプトに関連づけてくれ
try
do shell script "
rm hoge.dmg;
hdiutil create -srcfolder hoge hoge.dmg;
mkdir backup;
mount -w afp:/at/user:pass@remote/backupdir backup;
mv hoge.dmg backup;
umount backup
"
end try
アップルスクリプト(´・ω・`)ショボーン・・・
505 :
名称未設定 :05/02/19 14:28:37 ID:sC3g5RUK
UNIXスレが刺々しかったので読むのをやめてこっちに来た人としては、
>500はともかく>502は必ずしもスレ違いとは思わないな。
>>504 しょうがない。調べてやりましたよ。なんてね。
プロンプトが出るのは読めないファイルがある場合と、自分以外がオーナー
である場合っぽい。後者は-anyownersオプションをつけると良いっぽい。
このオプションをつけるとオーナーの情報はディスクイメージには入らない。
というわけで-anyownersをつけてみたらどうですか?
506 :
紙 ◆N3i.Qu1SoY :05/02/19 23:32:58 ID:mDh8Z6iS
>>491 の件では大変お世話になりました。
以後、この問題について悩む人がいないように
きっちりわかりやすい形でここにかいておきますね。
<.htaccessによるパスワード認証>
まず、あなたのアカウント名がsheelだった場合、以下のURL
http://あんたのIPアドレス/~sheel/ にパスワード認証を要求するようにしたい場合は以下のように設定する。
sudo pico /etc/httpd/users/sheel.conf
の
AllowOverride None を
AllowOverride All に変更する
(この処理によってあとで設置する.htaccessファイルが参照されるようになる)
(変更したあとの保存はControl+Oのあとにreturn。さらにControl-Xでpico終了)
そして
sudo mkdir /usr/local/passwd/
sudo htpasswd -c /usr/local/passwd/passwords baka
(-cは初回設定のみ)
などでbakaというユーザーのパスワードを設定する。
sudo chmod 604 /usr/local/passwd/passwords
次にパスワード認証したいdirectoryに.htaccessファイルを作成する
sudo ( echo "AuthType Basic" ; echo "AuthName ¥"personal only¥"" ; echo "AuthUserFile /usr/local/passwd/passwords" ; echo "AuthGroupFile /dev/null" ; echo "Require valid-user" ) > /Users/sheel/Sites/baby/.htaccess
(この例では
http://あんたのIPアドレス/~sheel/以下をパスワード制限する )
sudo apachectl graceful
(apacheを再起動する)
507 :
紙 ◆N3i.Qu1SoY :05/02/19 23:34:23 ID:mDh8Z6iS
>>506 >baby/
最後の方にある
baby/
は無視してください。間違えました。
508 :
紙 ◆N3i.Qu1SoY :05/02/19 23:35:30 ID:mDh8Z6iS
>>506 >baby/
最後の方にある
baby/
は無視してください。間違えました。
509 :
名称未設定 :05/02/20 00:24:04 ID:dlAThTbe
>>紙 .htaccessで出来る事は、俺様.confでも出来ますよね? なら、俺様.confが使えるのに、なんで.htaccessを使うんですか? あちこちに.htaccessが有ると、後々厄介な事になりそうだし、 apacheも微妙に遅くなるでそ? なんかちがう?てかすれちがい?
510 :
名称未設定 :05/02/20 00:52:47 ID:gTKqNstl
管理者権限が要るか要らないかじゃないの 個人で使うマシンならどっちでも同じだけど .confファイルをいじれるのは管理者だけ .htaccessはシェルがなくても使える
511 :
紙 ◆N3i.Qu1SoY :05/02/20 05:27:32 ID:FsWcWEf/
>>509 う〜んどうなんでしょう。
俺様.confだけで済むことならそっちでやりたいけど、
俺的に理解している範囲では
・俺様.confでAllowOverrideをONにする
(つまり.htaccessを使えるようにする)
・その上で好きなディレクトリに.htaccessファイルを置いて
個々のディレクトで管理する
ということしかできん。
Sites全体を同一の設定で統一するのには俺様.confが適しているだろうが、
個々のディレクトリで設定を変えるにはやっぱ
.htaccessをいじったほうが楽じゃないの?
512 :
名称未設定 :05/02/20 05:34:35 ID:zvO+xtuQ
誰か知らんが、わざわざUNIX版でこんな糞スレの宣伝すなよ。恥知らずが。
513 :
名称未設定 :05/02/20 14:05:50 ID:VsMnKQLM
個々のディレクトリの設定を変えるのも俺様.confでできるし、 セキュリティのこと考えると俺様.confの方がいいけどな。 そんなことより sudo chmod 604 /usr/local/passwd/passwords 604なんて気色悪いパーミッションの方が気になる apacheが読めればいいんだから、ここは sudo chown www /usr/local/passwd/passwords じゃねえの? それと大量のechoしてるが、こういうことするときは sudo cat - > > /Users/sheel/Sites/baby/.htaccess hoge hoge Ctrl-D とすればいい。
514 :
名称未設定 :05/02/20 14:12:16 ID:VsMnKQLM
つうか,/Users/sheelにファイルつくるのにsudoいらねえじゃん。
515 :
名称未設定 :05/02/20 14:16:52 ID:Dzmn2O96
そろそろT砲の出番も近いかな…
516 :
504 :05/02/21 23:41:26 ID:+JfFgLgI
>>505 激遅レス申し訳ない。出来ました!マジ嬉しい!ありがとう!
manちゃんと読めよ(#゚Д゚)ゴルァ!!って怒らなくてアリガトウ・・
と>504は動・か・な・い!ヽ( ゚∀゚)ノアヒャ
以下修正:
try
do shell script "
hdiutil create -anyowners -srcfolder hoge hoge.dmg;
mkdir backup;
mount -t afp afp:/at/user:pass@remote/backupdir backup;
mv hoge.dmg backup;
umount backup
"
end try
517 :
名称未設定 :05/02/26 13:59:32 ID:9zgH1TXo
Apple MacOS X Downloadsにあったので紹介。
SubEthaEditなど他のエディタと連携できる。
Pipe 1.0 ($14.95)
Helps you write, test, and debug shell scripts quickly while using your favorite text editor.
ttp://www.kcore.de/software/pipe/
518 :
名称未設定 :05/02/28 07:45:33 ID:ALWbtybC
今日も今日とてCaminoをアップデートする。
function cup {
curl -Ns -L -f
http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/latest/Camino.dmg.gz |
gunzip > /tmp/Camino.dmg
hdid /tmp/Camino.dmg
mv /Applications/Camino.app ~/.Trash/Camino.app.$$
cp -R /Volumes/Camino/Camino.app /Applications
mkdir /Applications/Camino.app/Contents/Resources/Japanese.lproj
}
最後の行がないとJavaアプレットでの日本語表示に差し障りがある、らしい。
ディスクイメージのアンマウントは手動でやっている。
自動でやろうとすると、どういうわけか後々カーネルパニックになることがある。
519 :
名称未設定 :05/03/03 00:13:01 ID:ts0fiPvW
あげとくよ。
520 :
名称未設定 :05/03/20 15:40:26 ID:PTVXYNFE
たまに保守
521 :
名称未設定 :05/03/21 00:06:11 ID:e98VFyak
皮先電波少年は生きてるのか?
522 :
名称未設定 :2005/03/21(月) 10:19:20 ID:CVvDV46U
自分が必要な知識が付いたから (自分が欲しいものは作れたから) 他スレに紛れたりしながらぼちぼちやってるのではないかと。
ああ、おまいらすまんかった。 HDがcrashしてからこのスレを登録し直すの忘れとった。(@CocoMonar) 今度からちゃんとここもちぇっくするようにしてやるので どんどん質問があったら書き込め。
524 :
名称未設定 :2005/03/24(木) 07:51:25 ID:Fa+r0/fr
相武紗季ちゃんのプリティーな画像を集めるスクリプトを教えてください (恥ずかしいから書く奴がいないだけで需要はいっぱいあるはずだ!!)
525 :
名称未設定 :2005/03/24(木) 18:50:30 ID:1sX0PpXr
>>524 ネタ投下乙
相武紗季が、分らないので思わずググった。(w
そっか〜、好みは色々だからな。漏れはパスだ。
curlで、てきとーにダウンしたらイイと思う。スクリプトなんていらんだろ。
526 :
名称未設定 :2005/03/25(金) 00:52:31 ID:RKiyYjaF
527 :
名称未設定 :2005/03/25(金) 07:30:53 ID:iJ1Nhp9H
そうか今比較的非オタ層にも人気のあるさわやかアイドルさんだと思ったので
名前を使わせていただいたのだが、、なかなか難しいな。
松浦亜弥ちゃんクラスになると知名度が高いぶん嫌いだという人も多いしね。
って何の話をしとるんじゃ俺は。
>>526 連番ならそれこそダウンローダーで済む話だと思うんですけどね。
その気になったら勝手にネットを徘徊して条件に合うファイルを集めてくるようなプログラム作れないだろうか。
528 :
名称未設定 :2005/04/07(木) 21:33:21 ID:NpslSQXV
OSX質問スレでも伺ったのですが、回答が無かったので こちらで質問させて頂きます。 OSX 10.3.8です。 PBG4 Ti 1GHz システムプロファイルの機能拡張にて 読み込み済み:いいえ となっているドライバを読み込む方法を教えてください。 よろしくお願いします。 当方ターミナル等不慣れですので、できれば優しくお願いします。
529 :
名称未設定 :2005/04/08(金) 00:31:10 ID:5cg+Dg4w
>>528 >OSX質問スレでも伺ったのですが、回答が無かったので
さもありなん・・・
コミュニケーションも不慣れっぽいけど、エスパーきぼんぬ?
530 :
名称未設定 :2005/04/08(金) 20:39:54 ID:EKCBHbEB
ケスクセロード
531 :
名称未設定 :2005/04/08(金) 21:43:58 ID:x/wtHnf2
誤爆と見なす。
532 :
名称未設定 :2005/04/08(金) 22:04:14 ID:EKCBHbEB
ぇえっ!
533 :
名称未設定 :2005/04/09(土) 01:26:23 ID:jlNsxZOb
会社のLANが更新されてセキュリティーが強化され ウェブメールが使用出来なくなりました。 ログイン画面?が総てはねられるようになりました。 また、同様にダウンロードも…。 何かいい方法はありますか?
534 :
名称未設定 :2005/04/09(土) 02:03:27 ID:fwqaep01
そりゃどうしようもないわ 私的にネットを利用するなという会社の方針なんだろうから倣ってあげなよ
535 :
名称未設定 :2005/04/09(土) 07:38:31 ID:XWUQhRYi
穴掘りかな
536 :
名称未設定 :2005/04/21(木) 00:16:27 ID:kYcwViiF BE:247763669-
乱上げ
537 :
名称未設定 :2005/04/21(木) 01:05:40 ID:q/5kkeH6
自宅にサーバ立てて、SSHでトンネルする。
久しぶりに来たので亀レスしてみる。
>>533 一番いいのは会社の方針に従っておくこと。
どうしても必要があるなら、自宅鯖に80番ポートで認証付きのプロキシサーバを立て、
そこを踏み台にして外の世界に接続する方法なんかがあるよ。
キーワードはこんな感じか。正直初心者にはお勧めできない。
squid, プロキシ認証, HTTP CONNECT, トンネリング
>>538 書き込む前に新着レスを確認する癖をつけようね。
540 :
名称未設定 :2005/04/21(木) 01:20:08 ID:xAZgkApf BE:142191656-#
自虐お断り
541 :
名称未設定 :2005/04/21(木) 10:35:17 ID:KHyryTHj
会社の公用でウェブメールを使うとは考えにくいわけで、 私用なんだったらPHSか何かで自前でウェブにつなぐとか。
542 :
名称未設定 :2005/04/22(金) 00:05:22 ID:IQGX5P9F
いや、外国で結構Webメール使われてる。 会社変わっても、メールアドレスが変わらないから便利なんだそうだ。
543 :
名称未設定 :2005/04/23(土) 04:47:17 ID:om3l263A
えー、tcshやらbashでは配列が使える訳ですが、皆さんは使ってますか? それとも、もっとリッチな言語にしますか?
544 :
名称未設定 :2005/04/23(土) 15:24:39 ID:p0X9hUaP BE:106567946-
IPアドレスを表示したいのですが ifconfig | grep 'inet .* -->'| sed s/'.*inet '// | sed s/' -->.*'// これより手短な書き方はあるでしょうか?
545 :
名称未設定 :2005/04/23(土) 15:59:48 ID:HB5+s5iF
>544 en0決めうちになるけど、これとか。 ifconfig en0 | awk '/inet /{print $2}'
546 :
名称未設定 :2005/04/24(日) 23:34:34 ID:nAWHq15t
ipconfig getifaddr en0
547 :
545 :2005/04/25(月) 17:42:27 ID:mekVnLC1
そんなオプションがあったのか。勉強になりました。
548 :
名称未設定 :2005/04/28(木) 23:53:57 ID:TsgmVXfq
>543 そこまで変数使うようなことは Rubyにまわしちゃうかなぁ。楽だし。 ところで皆は引数のチェックってどうやってる? やっぱ getopt?
549 :
名称未設定 :2005/04/29(金) 04:04:28 ID:eaQ/n3oe
俺はifでやってる。 シェルスクリプトだから、短くてお手軽なのが多いんだ。 長かったり、本格的なスクリプトならgetopt使うかも。
550 :
名称未設定 :2005/05/10(火) 11:27:14 ID:lDlMr/J2
イメージ形式(xxxx.IMG)として保存されているファイルは、普通、 Finder上からマウスのダブルクリックでマウントしますが、この 作業をシェル(またはApple Script)から実行することは可能でしょうか?
551 :
名称未設定 :2005/05/10(火) 15:22:25 ID:BZ0g/yJj
>>550 open xxxx.IMG
ではだめかね?
552 :
名称未設定 :2005/05/10(火) 16:20:18 ID:GSF8+mfz
あとはhdiutilか
553 :
名称未設定 :2005/05/10(火) 22:57:40 ID:yi4hR2qm
>>551 , 552
ありがとうとざいます。hdiutilで上手く行きました。
hdiutil attach /Volumes/vol_1/xxxx.IMG
hdiutil deattach /Volumes/xxxx
昔、linuxを使っていた時に覚えたmountコマンドのパラメターを変えて
やろうとして失敗しました。助かりました。
554 :
名称未設定 :2005/05/11(水) 19:01:48 ID:uN4yukc/
555 :
名称未設定 :2005/05/11(水) 21:37:09 ID:PeyEFRE+
エプソンプリンターのimage frameアプリは フレーム保存量が多いとやたら重くなりません? って事で適当に書いて嫁に使わせています #!/bin/sh if [ `ps x|grep -c '[b-t][a-c]sh'` -ne 1 ] ; then exit elif [ `ps -x|grep -c '[E]PSON'` -ne 1 ] ; then mv /Users/Shared/UDL/* /Users/Shared/UDL_1/ 2>/dev/null sleep 1 open /Users/Shared/ImageFramer killall Terminal else killall Terminal fi Photo Quicker の時は逆の動作ね
556 :
紙 ◆N3i.Qu1SoY :
2005/05/12(木) 12:52:01 ID:FsxFC5Ea ひさしぶりに来てみたらなんだこの有り様は。 もっと俺みたいに建設的なレスをしるよ。 叱咤激励age