Macでシェルスクリプト総合 Part 1

このエントリーをはてなブックマークに追加
1名称未設定
■シェルスクリプトとは?
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
・その他の関連ソフト
 - GeekTool:シェルスクリプトの結果をデスクトップに表示

・推薦図書(入門向け)
入門UNIXシェルプログラミング
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797321946/
ttp://www.jbook.co.jp/product.asp?product=2100568
ttps://market.bookservice.co.jp/emp-bin/eh_writer.exe/top/main/detail.html?1512596

・参考になるサイト
いっぱいあります。Googleで「シェルスクリプト」で検索してみてください。

・準備する物
改行と文字コードの変えられるテキストエディタ。
Mac OS Xの起動するMacintosh。
4名称未設定:05/01/07 15:21:34 ID:OHNKMLVD
>>1
乙。
>>3
>改行と文字コードの変えられるテキストエディタ

俺はJedit使ってるけど、無料じゃないし、
他にいいのある?
5Paper ◆n02s7xx2/2 :05/01/07 15:28:32 ID:oKXi9icV
>4
mi を使ってる。

 は じ め て の か た へ

ここは当座は「川崎君」<ttp://sheel.mydns.jp/> と
「マジで紙」(Paper ◆n02s7xx2/2) の隔離スレとして機能します。

隔離元スレ
Terminal初心者質問スレ Part 4
http://pc5.2ch.net/test/read.cgi/mac/1080488656/
Mac OS Xでサーバー part3
http://pc5.2ch.net/test/read.cgi/mac/1100267051/
MacOS X を Unix として使ってる人の為のスレ その8
http://pc5.2ch.net/test/read.cgi/mac/1100943859/

川崎君はよく「チンカス以下」と言われるこまったちゃん。
最近は curl を使ったシェルスクリプトにはまっていて、
Dynamic DNS を使っで自分の Mac でサーバーごっこをして遊んでいます。
その関係で、ついつい話の流れが「ちなみに、CGIをシェルスクリプトで書くには
どうすればいいの?」とか変な方向に行きがちですが、それもご愛嬌。

川崎君はどうしても自分の書いた「高度な」「他のやつならマスターするのに
3ヶ月はかかる」スクリプトを自慢したいのですが、そういう時期を過ぎた
堅物の (でも優秀な) Un*xer さんたちは誰も相手にしようとしてくれません。
でも、川崎君にほのかな恋心を抱く「紙」は、どうにも川崎君のいっちゃった
質問がスルーされるのが忍びなくて、ついつい反応してレスを返してしまいます…

そんな川崎君とその仲間。これからどんなことになるんでしょうか?

さあ、は じ め ま し ょ う か
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
と入力してみましょう。
11Paper ◆n02s7xx2/2 :05/01/07 18:18:00 ID:GIOycl+N
やめれ
12名称未設定:05/01/07 18:19:08 ID:9Sa+cBAS
大丈夫、間違っているからorz
13名称未設定:05/01/07 19:01:13 ID:uHvP5+4j
ほほぉ、こんなところにこんなスレを発見。
そうかmiがよいのか。今度からmiを試してみるよ。
ありがとうね。

ついでに俺のつくったスクリプトを公開してやるので
誰か添削してくれない?
「ここはこうした方が(・∀・)イイ!!」とかアドバイスをいただけると
うれしいのですが。

ちょっと便利なshをつくってみました。
【nwlisttemphi.sh】 最高気温
http://sheel.mydns.jp/~sheel/nwlisttemphi.sh
【nwlisttemplow.sh】 最低気温
http://sheel.mydns.jp/~sheel/nwlisttemplow.sh
<これってなにするの?>
気象庁の「電子閲覧室」
http://www.data.kishou.go.jp/
からデータを取得して好きな観測点の好きな年の好きな月の
最低気温あるいは最高気温を取得するshellscriptです。
その月の最高・最低気温の平均も表示されます。あらかじめ
東京、静岡、浜松、熊本、鹿児島、枕崎、福岡、佐賀、大分、宮崎、長崎
が登録されています。
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
今のところの問題点は、
http://sheel.mydns.jp/~sheel/nwbachlow.sh.txt
http://sheel.mydns.jp/~sheel/nwbachhi.sh.txt
これらの動作速度がやたら重いところです。
改善するべきところがあったらご指摘していただけるとうれしいのですが・・。
26名称未設定:05/01/07 23:24:28 ID:j5XZQ6VG
あと、
今、手動でsshでアクセスして.shを.sh.txtへmvしたんですけど、
これって確かsedかなんかつかえば一括処理が可能な気がするんですが、
具体的にどんなふうにやればいいんですか?
27Paper ◆n02s7xx2/2 :05/01/07 23:53:08 ID:GIOycl+N
28名称未設定:05/01/08 00:12:41 ID:rhKAWMOS
iPodにiTunesで作ったEQセッティングを反映させるために、
iPod上でEQ名として確認できるようにしたいのですが、
どういうスクリプトを書けばいいのか教えて下さい。
29名称未設定:05/01/08 00:13:43 ID:MSu7zh3d
やめろと言っただろ!

これでUNIX板は当分マカーたたきで盛り上がるな。
自動化君のときもそうだったけど、
他人でもマカーが叩かれてるといきづらくなるんだよね。
30Paper ◆n02s7xx2/2 :05/01/08 00:42:13 ID:xAPTQfk5
やば、せめて転載にするべきだった…。いつもごめんなさい。
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 を設定すること。これ基本。
3525:05/01/08 20:41:15 ID:BgVyDm2f
>>34
非常に参考になります。
今ちょい時間がないのでまた時間ができたときにいろいろと吟味してみます。

こういう意見を待っていますた。
36Paper ◆n02s7xx2/2 :05/01/08 22:02:10 ID:ib2Ce7mD
人に見せるスクリプトの場合は、コメントも重要だけど
「意味のある変数名・関数名」をつけることをお勧めしておきましょう。

それと、自分はこの場合あんまり気にしなくてもいいとは思ってるんだけど、
シェルスクリプト内での外部コマンドはフルパスで指定するのがうちでのしきたり。

もうひとつ、一時ファイルには /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のスレも荒らされるわけで…。
41Paper ◆n02s7xx2/2 :05/01/12 22:59:48 ID:WKAuLwZJ
紙なんでぼろが出ていますが。

> なんで 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
なにが「ワラタ」のか教えてほしい
44Paper ◆n02s7xx2/2 :05/01/13 01:37:03 ID:ZeTeF8BG
>>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で検索してきた方がいいですかね。すいません。
46Paper ◆n02s7xx2/2 :05/01/13 02:43:35 ID:ZeTeF8BG
>>44 そのまま
47名称未設定:05/01/13 03:43:40 ID:ugV7KcoW
ありがとうございます。
48名称未設定:05/01/13 04:04:14 ID:ugV7KcoW
・・・。
ありゃ。
絶対使うなとか書いてありますよ・・。
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/mktemp.3.html

、、と思ったら違った。これはCの関数?(汗
49Paper ◆n02s7xx2/2 :05/01/13 06:34:23 ID:ZeTeF8BG
日本語がいいなら、まずこれ読んで
ttp://www.linux.or.jp/JM/section.html

mktemp(1) は、内部的に mkstemp(3) / mkdtemp(3) を使っているので安心
ソース: (ftp://) ftp.mktemp.org/pub/mktemp/mktemp-1.5.tar.gz
50名称未設定:05/01/13 15:51:06 ID:ugV7KcoW
>>49
半分冗談みたいな書き込みに対して
かゆいところに手が届くレスありがとうございます。

あのページ、そんな区分になってたのですね。
検索してみましたが普通のコマンドのmktempのページはないっぽいですね?
未翻訳?
別のところで解説のページ見つけましたが。

内部的にも安心なのですね。
ちょっと心配してたのでほっとしました。
5125:05/01/15 15:05:58 ID:S4ny4jdG
今、この本を一から読んでいます。
http://www.amazon.co.jp/exec/obidos/ASIN/4756107850/qid=1105769068/ref=sr_8_xs_ap_i1_xgl/250-8109155-1569061

あまりに面白くてわかりやすいのでただの小説感覚で読めます。
この本で学んだことをすぐさまTerminalで実行。
そうやってunixについて少しずつ理解が深まっていくようです。
52名称未設定:05/01/15 15:27:48 ID:ro77sM5J
>>51
AmazonのURLを紹介する時は
ttp://www.amazon.co.jp/exec/obidos/ASIN/4756107850/
まででいいですよ。
それ以降はいらない部分。
(あるとアフィリエイトが実行される場合もあるのでよくない)

ちなみに最後の番号部分はISBNの番号になってます。
5325:05/01/15 15:52:37 ID:S4ny4jdG
>>52
あ、ホントだね。今度からそうします。
54名称未設定:05/01/15 15:57:35 ID:ro77sM5J
本で覚えたコマンドと言えば
ttp://www.amazon.co.jp/exec/obidos/ASIN/479800555X/
を買ったんですが、
この中に出てきた、findを使って検索したファイルに対してコマンドを実行というのが今ちょっとお気に入りです。
なかなか使う機会がないですが、
たとえば
『find . -name "*.txt" -print0 | xargs -0 grep "シェルスクリプト" 』
とか。
55名称未設定:05/01/15 16:00:14 ID:01h8G+8A
あんたそればっかりだね
56名称未設定:05/01/15 16:26:31 ID:ro77sM5J
ぎくっ。
いやこっちのスレの方が何かレスあるかなーと思って。
5725:05/01/15 16:48:41 ID:S4ny4jdG
>>54
すまんが勉強したいので
そのfind以下の意味を教えてくれんか。
5825: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から渡された引数が展開される

基本ですな。
6025:05/01/15 19:34:12 ID:s9VHqUxS
>>59
ありがとう。
ものすごく勉強になります。

こんなふうにいちいち初心者向けに説明してもらえると
うれしいです。
6125: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"
62Paper ◆n02s7xx2/2 :05/01/15 20:24:45 ID:BdiIofmX
一応言っておくと、 read を使って対話形式にするのは楽しいけれど
実際にそれを使っている人は少数派かと

君に対しては何度かいわれているみたいだけど、これくらいなら alias の領分
alias tfind=" find . -name *.txt -print0 | xargs -0 grep"
tfind hoge
まあ、そうしちゃうとスレ違いなんだけどね。
もっというと、自分はどっちかというと grep -r を多用
63名称未設定:05/01/15 20:52:42 ID:mCHrxJm6
本といえば プロフェショナルシェルプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4756116329/
もおすすめ。ちょっと難しいかもしれんけど。

同シリーズの プロフェショナル BSD も良書だと思う。ちと高い。
6425:05/01/15 21:40:33 ID:s9VHqUxS
>>62
ほほう。aliasというのもあるんだね。
一応メモっとくよ。実際便利そうだし。
俺がshにハマっているのも「便利だから」ってのが理由だし、
他に同等のことで「簡単に便利にできる」ものがあったら
どんどん紹介してほしい。

aliasの欠点はせっかく登録してたのに
再インストールとかするとまた登録するのが大変そうってのが
ありそうなんだけどそのへんどうなの?
6525:05/01/15 21:48:01 ID:s9VHqUxS
>>62
grep -r hoge
とかやってみたけど使い方がよくわからん。
どうやって-rオプションを使うのか具体例で教えれ。
66名称未設定:05/01/15 22:10:26 ID:TN33CMCV
>>
.bashrcとかにかけばいいんじゃねーの?
6725:05/01/15 22:17:25 ID:s9VHqUxS
>>66
ラテン語しゃべってんじゃねぇ〜よ。
意味がわかんないっつ〜の。
>>59を見習って書き直し。
68名称未設定:05/01/15 22:23:30 ID:N5DgVqsz
言葉の通りだろ・・・

いくらなんでも酷過ぎないか?
6925:05/01/15 22:28:19 ID:s9VHqUxS
>>68
じゃ、おまえはもうしゃべらなくていいから
誰か神が>>66を日本語に翻訳してくれんか?
70名称未設定:05/01/15 22:40:53 ID:ccDJoVLo
>>69
> 誰か神が>>66を日本語に翻訳してくれんか?

オッケー!










.bashrcとかにかけばいいんじゃねーの?
7125:05/01/15 22:48:11 ID:s9VHqUxS
すみません。
誰か>>70を日本語に直してくれませんか?
7266:05/01/15 23:04:43 ID:TN33CMCV
あれ、.loginだったけ?忘れた

まぁ、ホームディレクトリのログインごとに読み込むファイルに書いておいて、
→バックアップのときにホームディレクトリを丸ごとバックアップ
→再インストールでそのファイルからその設定をもう一度する or
 ファイルを置き換える

って意味です。
73名称未設定:05/01/15 23:06:48 ID:D14HmYoA
.bashrcなどに書けばよろしいのではないでしょうか。
7425:05/01/15 23:10:39 ID:s9VHqUxS
>>72
なるほど納得。乙。

まぁしかしなんかそれだと
自分用にカスタマイズされたTerminalって感じで
あんま好きでないかな。aliasを使う方法って。
あくまで外部プログラムみたいな感覚で使えるshの方が合ってるような気がする。俺には。
7525: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
>>76
ここは>25隔離スレですから!
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
79Paper ◆n02s7xx2/2 :05/01/15 23:39:24 ID:A2pzha+o
なんだこれ、釣れた釣れた

とりあえず alias, grep の使い方について基本は押さえて
http://x68000.q-e-d.net/~68user/unix/pickup?alias
http://x68000.q-e-d.net/~68user/unix/pickup?grep
どこかのスレのテンプレにもあるけど、このページは偉大。
著者が FreeBSD + tcsh 使いなのか、いくらか Mac の場合と食い違うけどね。
Mac の場合、ディレクトリを再帰的に検索するのは grep -R の代わりに grep -r とか。

具体例は
grep -r sem_t /usr/include/

悪いね、日本語もシェルスクリプトも教えられるほどの腕じゃない
8025:05/01/15 23:47:17 ID:s9VHqUxS
>>76
なんだおまえは。
ここは俺様専用のスレなんだぞ。
俺様が外で悪さをしないように誰かに隔離されてるんだ。
部外者がごちゃごちゃ言うヒマあったら
もっと俺様に有用な情報を提供しろ。

ん??? す、すまん。正直すまんかた・・・orz
最後の行と>>77だけ見てつい脊髄反射でかいてしまった。
>>76は十分有用なことをかいてるじゃないか。乙。
81名称未設定:05/01/15 23:51:18 ID:bESoWFjV
そこはいいリファレンスですよね。例文は絶対必要。
MANページ見てちっともイメージ沸かないときにはそこに行きます。
ググれば自然とたどり着くというか。

その昔、X68030にNetBSD入れた経験あり。
当時は全然使い方分からなくてすぐ抜いたけど。


8225:05/01/15 23:51:19 ID:s9VHqUxS
>>78
>#クリップボード中のテキストの改行文字をCRLFからCRに置換
>pbpaste | tr \\r\\n \\r | pbcopy

をいをいをいおいをいおいおいおい!!!!
いいよいいよ〜!@!!!!!!
こ〜ゆ〜の待ってました〜〜〜〜〜!!!
かなりおもろい〜!


>#!/bin/sh
>#答えをしゃべる計算機

うを〜〜〜〜〜〜〜!!がお!!!!!!!
か、感動した!!!!!!!!!!!!!!
すげぇ〜〜〜〜〜〜、俺!!!!
8325:05/01/15 23:56:37 ID:s9VHqUxS
>>78
ん?
3+1
とか打ち込んでも
3
としかsayしてくれんな・・・。

>>79
具体例ありがとう。
そのリンクも読んでみるよ。ちょいタバコ吸ってくるね。
8425: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 で後方参照だけを表示したいのですが↑で上手く行きませんです。
8625: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
上手くいきそうですヽ( ´ー`)ノワーイ

みなさん大変ありがとう御座いました!
90Paper ◆n02s7xx2/2 :05/01/16 01:08:46 ID:dsAlawvl
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' ファイルパス

でいいような。
92Paper ◆n02s7xx2/2 :05/01/16 01:17:38 ID:dsAlawvl
さっきは h を抜かし損ねていましたね。ごめんなさい。
sed はパターンアドレスが使えるとうれしいですね。

sed -n '/.co.jp$/s/.co.jp$//p'

-n : 出力命令を指定しないかぎり出力しません.
'.co.jpで終わる行の / 置換する / .co.jp$ を / (なし)に / その結果できた行だけを表示'

sed について調べると多分最初にたどり着くサイト「sedは日暮れて」
ttp://www.chimimo.com/sed/
man sed は何をおいても。
ttp://www.sist.ac.jp/~suganuma/cpp/man/command/sed.htm
93名称未設定:05/01/16 01:18:04 ID:sr+u6daI
カブタ
9425:05/01/16 01:19:03 ID:9HTtBDN0
>>91
p:d
の意味で何ですか?
\1
の意味って何ですか?
95Paper ◆n02s7xx2/2 :05/01/16 01:22:50 ID:dsAlawvl
>>91
あー。「;」って知らなかったです。
9625: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 にマッチした行はそこでプリントされ、スクリプトの
最後で再度プリントされるので、結果として入力行が全部プリントされ、マッ
チした行はダブってプリントされてしまいます。
98Paper ◆n02s7xx2/2 :05/01/16 01:43:02 ID:dsAlawvl
パターンアドレス使わなくてもいいじゃん自分。あほ…
勉強になりました。教授と呼ばせてください

って、うちの大学の教授じゃないですよね? >> 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" |
を付けないとだめかな。
10125: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
当時、似たようなのが二人居たみたいだから対応がわからんけど、Terminalスレ
の多分この辺。

ttp://pc7.2ch.net/test/read.cgi/mac/1080488656/620-629
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
嫌らしげな行動と性格が伝わって来る。拒否されたのもそのせいだよ。
11225: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
コマンドなんざ間違えながら覚えて行くもんだ。ちったあ試行錯誤しれ。ナァンチテ
117Paper ◆n02s7xx2/2 :05/01/17 18:30:53 ID:N5arCW4r
rsync と思いつきで言ってみる。
調べてみようかな。
118Paper ◆n02s7xx2/2 :05/01/17 18:42:16 ID:N5arCW4r
正解は神の光臨を待つとして、

思いつきの回答1
zshを使って tar cf hoge.tar **/*.txt みたいな。
119Paper ◆n02s7xx2/2 :05/01/17 18:50:55 ID:N5arCW4r
カレントディレクトリいかに含まれる拡張子 .jpg のファイルを
ディレクトリ構造を保ったまま /tmp にコピー

zsh -c "tar cf - **/*.jpg | tar xvf - -C /tmp"
120Paper ◆n02s7xx2/2 :05/01/17 19:15:54 ID:N5arCW4r
どうしてもfindを使いたくないのか自分

思いつきの回答2
rsync -av --include=¥*/ --include=¥*.jpg --exclude ¥* . /tmp
121名称未設定:05/01/17 19:32:23 ID:lUzAuGJY,
レスありがとうございます。
これからそれぞれ調べながら勉強させていただきます。
2点ほど質問いいでしょうか。

zshの事は全然わからないのですが、
>>118でzshならではのポイントはどこなのでしょうか?

tarでやった場合、コピー先にすでにディレクトリ構造の一部が存在していた場合はどうなりますか?
全部上書きですか?

また、引き続き他の方の解答例もお願いします。
122Paper ◆n02s7xx2/2 :05/01/17 19:38:15 ID:N5arCW4r,
>>121

>>>118でzshならではのポイントはどこなのでしょうか?
**/* のつもりでしたが、 bash でも使えますね。

> 全部上書きですか?
さあ?
飯を食ってきますので、それまでに検証よろ
123Paper ◆n02s7xx2/2 :05/01/17 20:50:21 ID:N5arCW4r
必要が出たんで。つながりにくいサイトを無理矢理見る

until curl -fL http://poorserver.example.com/; do sleep 20; done | w3m -T text/html -Is

w3m: ttp://w3m.sourceforge.net/
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
そりゃデフォルトで起動しているんだろう。でもエラーメールが発生
したら、そのメールは何処に帰ってくるんだ?デフォルトの設定では
そこまで面倒みてくれないから、そのまんま使うのはヤメレ。
12625: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の基本事項になるのできっちり覚えておこう。

ワラタ
バカウケ
12825:05/01/18 08:59:10 ID:E+o/jc5S
Unix端末というのは歴史的に複数のユーザーが使うものだったので、
ユーザー間のやりとり方法としてmailコマンドは標準でついている。
その辺の歴史から学ぶようにするといいかもね。
12925:05/01/18 11:36:57 ID:E+o/jc5S
クローズアップ現代の放送予定内容をメールしてくれるsh。
これでだいたいうまくいくようになったのですが、
http://sheel.hopto.org/~sheel/closeup.sh.txt

「空行」とか、「全角スペースのみの行」とかを削除するには
どうしたらいいのでしょうか?
上記URLを見てもわかるように、
sed "s/^$//g"
で空行削除を試みたのですが、全く効果がないようです。
130名称未設定:05/01/18 13:49:16 ID:YqdXndk7
>>126
125さんの言う通りです。

ローカルの架空ユーザに向けて打ったメールはエラーで戻ってきますけど、@入
りの外に向けて打ったメールは戻ってこないはずです。

外に向けて打ったメールのFrom欄はどうなってます? [email protected]
かなってません?

あなたがどこかに届け出たか、DynIP等で名前を借りるなどの手を打たない限り、
インターネッツ上に存在しないドメイン名なので、万が一To欄にあるアドレス
に届かなかった場合、「送り先の」メルサバが行き先不明で戻そうと思っても
これまた出し元不明で戻らず、戻らないと[email protected]だとか
[email protected]、みたいなところにも戻そうとしたりして、これまた当然届
かず、多大な負荷になるのでやっちゃダメってことなのです。

メールは送り先に届くまでに複数のサーバを経由するので、影響は等比級数的
に大きくなります。

届かなかった場合に諦めるまでの時間って、信頼性を上げるために結構長く設
定してある(恐らく数日レベル)と思うので、かなり痛いです。
メールは、届いたときより届かないときの方が負荷が大きいのです。

もちろん、ドメイン名を登録してあってもメールの到達性を確保しないと意味
がありせん。>>109で出したnomail等外鯖を使う方法を取ると、その辺りをあま
り考慮しなくていいのでおすすめです。
13125:05/01/18 16:17:19 ID:mbQueAwQ
>>130
いやだから実際戻ってくるんだって。
おまえも一度試してからほざけよ。
132名称未設定:05/01/18 17:10:15 ID:C0Hmy3au
>131
「ヲレが赤信号無視で渡っても無事だったので、常時赤信号で渡っても問題無し。」
と主張しても頭悪いだけだぞ。
まず、>130にちゃんと謝ってから、メールを理解してこいや。

蛇足だが、他の奴らにも理解しないままの状態でむやみに試さないように釘さしとく。
それから最近プロバイダがport25規制を始めてる理由もちゃんと理解しとくべき。
13325:05/01/18 17:17:23 ID:E+o/jc5S
いやだから実際にやってみろって。
>>130の言ってることが全く意味不明というか杞憂であることがわかるから。
134名称未設定:05/01/18 18:40:34 ID:J1gI8jSI
postconf -nをさらしてみろ >>25
13525: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
いやココじゃないとダメ。
13825:05/01/18 21:38:29 ID:FqLA0/b0
>>136
意味不明。
俺は>>134で言われた通りにやってその結果を全てさらしただけであり、
それがどうでもいいところとかいうくらいなら
最初から>>134みたいなこと言うな、チンカスが。

あとyahoo.co.jpとかを晒しちゃいけないのなら、
自分のメールアドレスは晒すな、という意味か?
なんで自分のメールアドレスを晒しちゃいくないのかさっぱり意味がわからん。
MLとかじゃみんな普通に晒してるけど?

ちなみに俺のメアドは[email protected]な。
文句があるヤツがいたらスパムでもどうぞ。10000倍にして返してやるから。
13925: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
>>135>>139から何がどうなってるのかわかる人、
解説お願いします。
14225: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.
143>>142のつづき:05/01/18 22:31:24 ID:FqLA0/b0
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
アホさ満開〜 ヽ(´ー`)ノ
14625: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ブラウザはどうやって実現してるんだろ。
15425:05/01/19 14:19:30 ID:WwWL7Dsq
>>152を含め、今まで出てきたやつは全部できなかったが
>>149は神! これで空行を削除することができた。
しかし全角のみの行はこれでは削除できなかったが、
どうしてだろうか・・・orz
155名称未設定:05/01/19 18:59:15 ID:RQu2U8ax
>>154
> 全角のみの行はこれでは削除できなかった
文字コードが違うとか?
156Paper ◆n02s7xx2/2 :05/01/19 20:22:33 ID:C6EZ/e+Q
意外と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
>>156
コマンドラインで自分宛てにファイルを送る程度の簡易SMTPクライアントだったら、
ttp://www.hellohiro.com/
のへんを見たらわりと簡単にJavaででっち上げられそうな気が。
Perlでも作れるかな。
158Paper ◆n02s7xx2/2 :05/01/19 20:54:09 ID:C6EZ/e+Q
はい。ライブラリは結構見つかりますね。
Javaでならでっちあげたことがあります。個人的にはRubyでやってみたいんですけど。

SMTPサーバーののきっちりした設定も覚えておかにゃあならんな。
15925:05/01/19 22:42:27 ID:dYb4c++D
>>156
w3m!!!!
そんなもんがあったのか!!!
つか、「そんなのない?」って質問しようかとしてたところだった。
まじで>>156は神!!

で、今
http://yudoufu.velvet.jp/osx.html#term
を見てw3m(とgc)をインスコ中。ちょいまて。
16025:05/01/19 22:46:04 ID:dYb4c++D
だ、だめだわ。gcのインスコまではうまくいったが
w3cのmakeでどうも失敗してるっぽい。
まぁええわ。もうやめた。めんどくさい。
16125:05/01/20 00:14:53 ID:H/CLmUGK
>>156
ttp://sheel.mydns.jp/~sheel/closeup.sh.txt
関数を埋め込んでみたけど、ダメっぽい。
なんも出力されない。空メールがくるだけ。

>>155
正解でした。
シェルスクリプトを記述しているファイルの漢字コードを
Shift-JISに変更したら全角スペースのみの行も変換できました。
162名称未設定:05/01/20 01:20:49 ID:otQ6Xs5j
なんか基本をスッ飛ばし過ぎな希ガス
16325: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
16625:05/01/20 03:16:18 ID:H/CLmUGK
このJPGファイルをメールに添付しようとして
http://www.nhk.or.jp/gendai/photo/photo2021-1.jpg
以下のようなshを書いてみたのですけど、
入力を迫られるだけでなんともなりません。
どこがいけないのでしょうか?
man uuencodeは見ましたがよくわかりませんでした。


#!/bin/sh
curl -O -s "http://www.nhk.or.jp/gendai/photo/photo2021-1.jpg"
uuencode photo2021-1.jpg | mail -s "test" [email protected]
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
アドバイス書いてくれてもいいじゃないですか。
お願いしますよ。
17025:05/01/20 05:16:49 ID:+Kteqz+N
>>167
ありがとうございます!!!神!
できました。
ですかお察しの通り、文字化けしてファイルとして
認識してくれませんでした。

一体全体、どうしたらまともにmailコマンドを使って
添付ファイルが遅れるようになるのでしょうか・・・・・。
やっぱmailコマンドじゃ無理ってことでしょうかねぇ。

>ヘッダ込みで作ったものを/usr/bin/mailで送っても、ヘッダが本文扱い
>になってしまうかも。ヘッダと本文の間は1行以上空行を置くことになっていて、
>空行の後にヘッダがあっても、ヘッダとして機能しないからです。

矛盾してるような気がするのですが・・・
要するにmailコマンドであっても、
ヘッダ
空行
本文
というように書いてやればOKってこと??

ところでヘッダはこの場合どういうのを書けばよいのでしょうか?
(どの辺を見ればわかるのか、でもいいです)
またはMaiil.appで普通にヘッダを見る方法を教えていただければ
自分で解析してみますけど・・・。
「すべてのヘッダを表示する」ボタンでは肝心のところまでは
表示されないようなのです。
(jpgファイルを自分に送信して受信し、そのヘッダを解析する)
17125: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のような記述ができるのは俺も知らなかったけど、
パイプが分割できるというよりも、コメント行や改行や空白の扱いの問題のような気がする。
173Paper ◆n02s7xx2/2 :05/01/20 08:28:53 ID:3491vNuK
>>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には面白い読み物がたくさんあるんで、もしよければどうぞ。
174Paper ◆n02s7xx2/2 :05/01/20 08:53:09 ID:3491vNuK
…というか、歓迎させてください、ですね。礼儀がなってなくてごめんなさい。

格言「誰かが書いたコードは自分で書くな」と「誰も書いたことのないコードは
ほとんどない」にのっとって、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) 一応。
> ところでヘッダはこの場合どういうのを書けばよいのでしょうか?
「表示 > メッセージ > ソース」を見てみればいいかも
17525: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$
17625:05/01/20 12:31:43 ID:G1EjltYG
>>173
@ITはマジでおもろいコンテンツがいっぱいだね。
さっそくbookmark登録したよ。ありがとね。

つか実はこれ読んで、最初は意味不明だった。
http://www.atmarkit.co.jp/fnetwork/rensai/tcp03/01.html
まず、「telnetで25番ポートで接続」ってのがやり方書いてないし、
第一回、第二回の読み物にもロクなこと書いてないし・・・。
さらにman telnetみてもわからんのでこないだ教えてもらった、これ
http://x68000.q-e-d.net/~68user/unix/
を見てやっとわかった。(マジでいいね、「UNIXの部屋」)

>>174
も見て見るね。
17725:05/01/20 15:46:35 ID:H/CLmUGK
JEPGファイルをuuencodeで添付するのは難しいようなので
(>>174のrubyにしても他にいろいろインストール必要がありめんどくさい)
とりあえずこんな本文↓が送れるようにすることで満足することにした。

ーーーーーーー<メール本文>ーーーーーーーー
http://www.nhk.or.jp/gendai/yotei.html

<1月20日(木)放送予定>
性犯罪 再犯を防げ
幼児・児童を狙った性犯罪が後を絶たないなか、いま再犯が大きな
問題になっている。奈良県で起きた女児誘拐殺人事件では、逮捕
された犯人はかつて同様の事件を何度も起こし服役していた。
去年、松山で起きた女性を拉致して暴行した上殺害した事件は、
犯人が出所後8日目の犯行で、5回目の性犯罪だった。(略)
(NO.2022)
スタジオゲスト
諸澤 英道さん(常磐大学・教授)
スタジオ出演
堀部 敏男(NHK社会部・記者)
http://www.nhk.or.jp/gendai/photo/photo2022-1.jpg
http://www.nhk.or.jp/gendai/photo/photo2022-2.jpg
ーーーーーーー</メール本文>ーーーーーーーー

ソース
http://sheel.mydns.jp/~sheel/closeup.sh.txt
17825:05/01/20 15:54:26 ID:H/CLmUGK
ところで紹介してもらったmiだけど、
これ、かなり便利だねぇ〜。
モードで色が変わるのがとても(・∀・)イイ!!
sh書くにはいまんところperlモードで書いてるけど、
なんかいまいちな面もあるんだよねぇ。
shで書くのに適したモードファイルってみんな何使ってるの?
179名称未設定:05/01/20 17:08:31 ID:+XdmG8ro
>>178
miも多機能で便利だけど、SubEthaEditなんかも使ってみたら?
非商用だったらFreeだし。
Network越しに複数人でいじれる(らしい...まだやったことない)のが特色みたい。
ttp://www.codingmonkeys.de/subethaedit/
18025:05/01/20 17:33:09 ID:H/CLmUGK
>>179
!!!!
こ、これはいいね!!
miだとbash用のモードファイルが別途必要だが(それがあるかどうか知らんけど)
これだと元々bash用のモードが入ってるね。
デフォの色使いはちょっとセンスなさすぎだけど、
これは自分でカスタマイズできるので無問題。

これはscriptの記述ミスが減りそうだなぁ。
``の付け忘れとか。

さんすこ。
181名称未設定:05/01/20 19:09:09 ID:CErtLa24
添付ファイル付きメールの書式、@ITのこのページがちょっと詳しいね。
ttp://www.atmarkit.co.jp/fnetwork/rensai/netpro04/netpro01.html
18225:05/01/20 19:13:29 ID:WYkN70oF
>>181
ナイスな情報、乙。
また時間があるとき(来週の水曜日の夜)に見て見るわ。
183Paper ◆n02s7xx2/2 :05/01/20 19:14:59 ID:3491vNuK
>JEPGファイルをuuencodeで添付するのは難しいようなので
>(>>174のrubyにしても他にいろいろインストール必要がありめんどくさい)

Rubyスクリプトのほうは何もインストールしなくても成功したけど、
うちの環境が変なのかなあ。一応念のために書いておくと、

cat > samail.rb
# ( ttp://sonic64.hp.infoseek.co.jp/2004-10-09.html のスクリプトをペースト )
# ( Enter, Control-D を入力 )
ruby samail.rb --to [email protected] --from [email protected] --smtp smtp.ecample.org --attachment my.jpg

でできました。
184Paper ◆n02s7xx2/2 :05/01/20 19:23:10 ID:3491vNuK
>>175 (=25)
>finkは以前に試して、でもインストールに失敗しました。

もったいない。
っていうか、finkで失敗したら、w3mをソースからインストールなんてできるわけ
ないじゃんか。今まで普通のパッケージをインストールしたことはないの?
悪いことは言わんから、とりあえず入れとけ。エラーが出たら晒してくれれば見るし
185名称未設定:05/01/20 19:43:36 ID:dA+6jW+A
> っていうか、finkで失敗したら、w3mをソースからインストールなんてできるわけ
> ないじゃんか。

妙な論理を展開すんなや、バカっ垂れ。
186Paper ◆n02s7xx2/2 :05/01/20 19:47:52 ID:3491vNuK
あちゃ。そうかな。まあ飛んでるか。ごめん。

にしても、pkg形式だと、インストールだけならパスワードを入力するだけで
良かった気がするんだけど…。何がいけなかったのかな。
187名称未設定:05/01/20 21:06:33 ID:zhByCgQO
>>185 >>186 お互いスルーを覚えましょう
188名称未設定:05/01/20 21:40:06 ID:CErtLa24
iconvについて質問です。

% echo "Yahoo! Japan" | iconv -t UTF8
iconv: conversion from char unsupported

という具合にエラーになるんですが、使い方間違ってますでしょうか?
nkf -wに置き換えると問題ないんですけど。
189Paper ◆n02s7xx2/2 :05/01/20 23:53:05 ID:1x8tHT/8
>>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なら便利に使えそうだとわかりました。
192190: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待ち?
195Paper ◆n02s7xx2/2 :05/01/21 06:47:32 ID:ryjLorC/
>これ、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秒ごとに実行されることになります。
196Paper ◆n02s7xx2/2 :05/01/21 06:54:53 ID:ryjLorC/
>>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で呼び出されるシェルがおかしいって事なのかな。
199Paper ◆n02s7xx2/2 :05/01/21 08:59:51 ID:ryjLorC/
>>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
200Paper ◆n02s7xx2/2 :05/01/21 09:30:38 ID:ryjLorC/
>curlがタイムアウトか何かで終わったって事なんだろうか・・。
curlがタイムアウトで終わると、そのときの終了コードは28になっているはずです。
man curl を確認してみてください。

>Amazonみたいにリダイレクトがかかる所だと、…
それらしき症状を確認しました。失敗する、というか、curl の出力が終わらない。
とりあえず -L をはずすか、パイプで w3m とか head とかを通せば
それなりに表示ができるみたいなんですが。

# OK
curl -fLs http://www.amazon.co.jp/exec/obidos/ASIN/4797321946/ | head
curl -fs http://www.amazon.co.jp/exec/obidos/ASIN/4797321946/
# NG
curl -fLs http://www.amazon.co.jp/exec/obidos/ASIN/4797321946/
curl -fLs http://www.amazon.co.jp/exec/obidos/ASIN/4797321946/ | cat

原因はわかりません。憶測で言うと、Amazonのサーバーサイドのプログラムが
出力を閉じてくれない作りになっている、とか…
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
>>205
気にするな。
208名称未設定:05/01/22 06:50:27 ID:SrUbFo7X
ID:ASsM4AEPは、何から何まで人に聞いて知識を得ようとしているように見える。
2chに入り浸ってるとそうなるのか?
209Paper ◆n02s7xx2/2 :05/01/22 07:33:12 ID:fsjKWEMU
>>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

質問する時だけ嫌らしいほど低姿勢。
213Paper ◆n02s7xx2/2 :05/01/22 11:01:04 ID:fsjKWEMU
皆さん豊富な語彙をお持ちのようで。

>とりあえずcurl -Lがなぜ(untilで素通りするという事はおそらく
>正常な終了コードを出しつつ)HTMLを取ってこないのかわからない
その部分のスクリプトとURLを晒しなされ。
21425:05/01/22 15:20:58 ID:F77Mj/Qy
明日の雨の予想をメールしてくれるshです。
http://sheel.hopto.org/~sheel/rain.sh.txt

こんなメールが来ます。

明日の雨予想
00時1 mm/h
03時3 mm/h
06時1 mm/h
09時0 mm/h
12時0 mm/h
15時0 mm/h
18時0 mm/h
21時0 mm/h
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しても無視されるようです。
219Paper ◆n02s7xx2/2 :05/01/24 08:10:02 ID:fuVA3AaC
>>218 開けました
220名称未設定:05/01/24 09:07:20 ID:5R+fZ1VG
あれ?そうですか。検証ありがとうございました。

ttp://www.psl.ne.jp/perl/pdojo00c.html
何かこれが原因っぽいですけど、よくわからない。
22125:05/01/24 10:33:42 ID:JaraWg9u
test
22225: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
22325: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一本槍
22525:05/01/24 11:49:23 ID:JaraWg9u
>>224
grepは使いやすい(理解しやすい)ので行の抽出にはgrepを
好んで使っているのですが、
perlやawkやsedを使うと>>223がどのようにシンプルなshに変わるのでしょうか?
226Paper ◆n02s7xx2/2 :05/01/24 12:19:33 ID:fuVA3AaC
テストしますね。
227Paper ◆n02s7xx2/2 :05/01/24 12:21:58 ID:fuVA3AaC
じゃないや。投稿テストスレでやれ >>226(=Paper) >>221(=25)

>>225
>>224>>223 に言及しているのではないんじゃ
228Paper ◆n02s7xx2/2 :05/01/24 12:52:10 ID:/yCGNX28
2ch に詳しくないけど、ツールを使ってアクセスするなら dat を直接読む方法もある。
サーバーにもやさしくて取り扱いやすいんじゃないかと。

# テストスレの dat をダウンロードしてみる
# 今試してみたら、初回のdat取得時には
curl -fLO --compressed http://pc7.2ch.net/mac/dat/1087915053.dat
# 次回の取得からは
curl -fLO -C - http://pc7.2ch.net/mac/dat/1087915053.dat
# gzip 圧縮と Range 指定は同時にできないっぽい?

差分がない場合には curl がコード 22 で終了するらしいんで、判定に使えそう。
本格的にdatを取り扱うなら awk か perl を使う?
22925: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ファイルの生成の機能もあれば便利ですね。
専用のソフトもあるようですが。
232Paper ◆n02s7xx2/2 :05/01/24 23:23:21 ID:bL/CPBFz
>>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
23325: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
いや、それ以前にDeveloper Tools(というか今はXcode Toolsか)
が入ってないとmakeできないだろw

ソースはcvsからとってこなくてもhttp://www01.tcp-ip.or.jp/~furukawa/nkf_utf8/にあり
23525:05/01/27 00:36:27 ID:Mui5XYQT
だ、ダメですた・・・。
makeはちゃんとnkf-2/nkf-utf8
に移動して行い、そのまま
sudo cp nkf /usr/local/bin
としたのですが、
nkfと打つとcommand not foundとなります???

いったいどういうことでしょうか?
23625:05/01/27 00:41:32 ID:Mui5XYQT
http://www.fan.gr.jp/~sakai/unix.php
ここからw3mをインスコして、ちゃんと言われるがままに
パスも通したのですが、w3mが使えません。
どういうことが考えられますか?
23725: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
そのページのせいにすな。お前の理解不足だ。入門書の一冊も読んでねーのかよ。
24025:05/01/27 00:47:37 ID:Mui5XYQT
>>235の件に関しても、
別におまいらの力を借りなくても事故解決しました。
方法は、
>>236のリンクからnkfのパッケージをインスコしただけでした。

まったく・・・おまいらってほんっと、役立たずだね。
241名称未設定:05/01/27 00:57:07 ID:LCUhRQxb
>>238-239
そいつは1から10まで手取り足取り、子供に教えるときみたいに噛んで含めて
説明しないと理解出来ないからほっとけ。
24225: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
24525:05/01/27 01:29:44 ID:Mui5XYQT
>>243
別におまえには聞いてないよ。洋梨はどっか池。
246名称未設定:05/01/27 01:33:22 ID:MuI2Ou/f
俺さぁ、AppleScriptとかshell scriptとか「使いたい...」って思う人を増やしたいと思って、
時々新・Mac板に貼ったりするんだけどさ、こういう皮先みたいなヤツが居ると、
知ってても教える気がなくなる人が増えるんじゃないかと思う。

もう、邪魔だから氏んで。>>25
24725:05/01/27 01:51:12 ID:Mui5XYQT
だから俺がいやなら他でやってくれよ。
ここは俺様専用隔離スレとして機能してるんだからさ。
Macでシェルスクリプト総合(皮先以外) Part1
でも立ててそっちでやれ。

ちなみに俺様はすごいので>>242
結局おまいらの力を借りずに自分で解決できました。
なぜだからわからんけど、
「非ASCII文字をエスケープする」のチェックを外したからかな??
それとも単にTermiinalを再起動したからかもしれん。ようわからん。
248名称未設定:05/01/27 01:57:35 ID:MuI2Ou/f
ねぇ、早く氏んで。>>25
24925:05/01/27 02:03:12 ID:Mui5XYQT
おまえがな。
250名称未設定:05/01/27 03:27:51 ID:Z9q0k8R+
凄まじいインターネッティングだな
251Paper ◆n02s7xx2/2 :05/01/27 06:28:11 ID:AqLYO8uv
このままだと誰か悪い人がこんなことを教えそうだ。

>>25
こうしておけばTerminalの再起動は不要
echo "PATH=AUTORELOAD;exit" >> .bash_profile
252Paper ◆n02s7xx2/2 :05/01/27 07:02:33 ID:AqLYO8uv
再起動という解決策も知ったし、しばらくは困らないだろうから簡単に言っとくと

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とか知らんのか?
255Paper ◆n02s7xx2/2 :05/01/27 10:08:07 ID:kwFOhgjr
.
25625:05/01/27 10:17:06 ID:Mui5XYQT
神キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
なるほどねぇ〜。すごくわかった(つもり)。
257名称未設定:05/01/27 10:34:27 ID:+zMLC6+p
何を?
258253:05/01/27 10:52:50 ID:aPm7gDSr
>>254
それも含めてGUIでできる事はGUIでやっちゃおっていう事です。
邪道だとは思いますが初心者のやってる事なんで許してくんなまし。
25966:05/01/27 11:01:52 ID:MNAdpSbf
変更した.tcshrcを反映させるにはわざわざTerminalを開かないで
source ~/.tcshrc
ってすれば?って事じゃないの?
260名称未設定:05/01/27 11:02:42 ID:MNAdpSbf
おや?変な番号が残ってた、すまん。
26125: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ってどうやるの? パスの再検索。
26325:05/01/27 13:56:46 ID:Mui5XYQT
>>156
これを参考にしてw3mを使ってみました。
すごく便利ですねぇ。かなりコンパクトなshになりました。

#!/bin/sh
#require nkf and w3m to be installed before you execute this script on Mac OSX 10.3
#see http://www.fan.gr.jp/~sakai/unix.php and download jx
#The lines which begin with # mean "comments" ( no need to execute this script )

mailbody=`curl -sfL http://www.nhk.or.jp/gendai/yotei.html | w3m -Is -Oj -T text/html -dump`
mailtitle=`echo "クローズアップ現代放送予定" | nkf -j`

( echo "http://www.nhk.or.jp/gendai/yotei.html" ; echo "" ; echo "$mailbody" ) | mail -s "$mailtitle" [email protected]
264名称未設定:05/01/27 16:49:16 ID:aYpBUbSP
>>258
cp .tcshrc tcshrc.txt
echo "source tcshrc.txt" >.tcshrc
open tcshrc.txt
265Paper ◆n02s7xx2/2 :05/01/27 19:43:51 ID:kwFOhgjr
>>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に入れておくと便利そうですね。
27025:05/01/28 10:41:42 ID:2EkwYb46
nkfもw3mも便利すぎる。

ところで普通にTerminalからnkfやw3mコマンドを含んだshを
実行すると当たり前の実行結果が返ってくるんだけど、
CroniOSXで同じコマンドを実行させるとnkfとw3mのところで
エラーが起こります。

これはいったいどういうことなのでしょうか??
何度も再起動しました。
CroniOSXを再起動してもダメですた。
271Paper ◆n02s7xx2/2 :05/01/28 10:55:24 ID:PbEO2Ldr
>>270 (=25)
PATHが通っていない可能性大。コマンドをフルパスで指定することをまず試す。
わからなかったらまた来るから、それまでおとなしく待つ。
27225: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

このどの部分をどう変えて実行すればよいのですか??
273Paper ◆n02s7xx2/2 :05/01/28 14:32:34 ID:PbEO2Ldr
たとえば

スクリプト内の w3m という文字列を /usr/local/bin/w3m に書き換える。

もしくは

PATH=/bin:/usr/bin:/usr/local/bin
あたりをスクリプトの先頭に書き加える。

詳しくは後で。

あと、紙ごときに対して低姿勢になるな。
27425: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は独り言が多いから、チラシの裏で十分。
29325: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
300300: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
30425:05/01/31 02:23:05 ID:7E8Ynnrp
274です。
>>303
ありがとうございます。
理由がわかってホッとしました。
これからはPATHをちゃんと入れるようにしたいと思います。
305名称未設定:05/01/31 05:16:37 ID:CzDe0jv/
crontabのSHELLをbashにしてしまえばいいんじゃねえの。
30625:05/01/31 05:31:11 ID:7E8Ynnrp
>>305
意味がわかりません。
もっと詳しく、かつ、具体的に指示してください。
30725:05/01/31 07:14:44 ID:7E8Ynnrp
/Library/WebServer/CGI-Executables/
の中に、なにも入ってないことが判明しました。
これはPowerBookG4もiBookも同じでした。(どちらも10.3.7)
せっかくshellscriptをcgiで動かそうを鼻息荒くこのページを
読んでいたのですが・・・。
http://www.futomi.com/lecture/macosx/prepare.html#place

これはいったいどういうことなのでしょうか??
10.3からprintenvというファイルはなくなってしまったの???
308名称未設定:05/01/31 07:21:49 ID:yclvNwPT
>>307
10.2は入ってるね。>printenv
CGI運用に関するツールみたいだけど
単なるサンプルのCGIでもあるみたいだし、(中身はPerlで書かれたスクリプト)
無くてもどうにかなるんじゃないの?
309Paper ◆n02s7xx2/2 :05/01/31 07:52:53 ID:JGtccGHp
>>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
ダメじゃないよ
312Paper ◆n02s7xx2/2 :05/01/31 08:43:00 ID:JGtccGHp
>>310 べつにレスを期待しているとは思わないけど

把握しているところではCGIを有効にする方法は2通りあって
1. ScriptAlias /cgi-bin/ "/Library/WebServer/CGI-Executables/"
2. AddHandler cgi-script .cgi

1. の場合は CGI-Executables というフォルダにあるものならなんでも実行できたような。
詳しく知りたい人は割とわかりやすいので Apache のマニュアルをどぞ
31325: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
31425:05/01/31 08:57:08 ID:Y2Qa7w6l
>>313
users/sheel/hello.sh

users/sheel/sites/hello.sh
の間違い。
315310:05/01/31 09:03:45 ID:aYozP/u8
>>312
web共有初めてなんで…

w3m http://127.0.0.1/cgi-bin/hello.sh
これは表示できた。

w3m http://127.0.0.1/~名前/cgi-bin/hello.sh
ダウンロード開始。

Safariなど
http://127.0.0.1/cgi-bin/hello.sh
http://127.0.0.1/~名前/cgi-bin/hello.sh
ダウンロード…

http://127.0.0.1/cgi-bin/hello.cgi
http://127.0.0.1/~名前/cgi-bin/hello.cgi
成功

ん〜。
Apache のマニュアル読んできます。
316310:05/01/31 09:36:22 ID:aYozP/u8
w3m http://127.0.0.1/~名前/cgi-bin/hello.sh
こっちは解決しました。

/etc/httpd/users内のファイルを変更してませんでした。
317310:05/01/31 10:34:18 ID:aYozP/u8
Firefox等
http://127.0.0.1/cgi-bin/hello.sh
http://127.0.0.1/~名前/cgi-bin/hello.sh
成功。

Safari,Shiira等

ダウンロード。
で、
>echo "Content-Type: text/plain;charset=UTF-8"#を
echo "Content-Type: text/html;charset=UTF-8"#に直すと
成功。

iCab
ry
不可。

ブラウザ側の解釈の違い?
318Paper ◆n02s7xx2/2 :05/01/31 12:53:27 ID:JGtccGHp
お。嘘を教えてしまったのかな。

>>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 っていう拡張子が人騒がせでしたね。潔く拡張子を消してしまうのが良いかと

31925: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:
32025: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
32125: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>
322Paper ◆n02s7xx2/2 :05/01/31 16:07:40 ID:u7Z8unKd
手数をおかけしましたね。
httpd.confは問題なさそうです。(いや、セキュリティとかは置いておいて

500のエラーであれば、ApacheのCGIは使えるようになっているはずです。
ってことで今度は該当しそうなエラーのログを見つけてくだされ
こちらの場合は結局スクリプトが変、ってことだと思うんだけど…

ってか今頃気がついて申し訳ないんだけど
>httpでアクセスするとダウンロードされちまいます。
これって「CGIスクリプト」がダウンロードされるんじゃなくって
「CGIの実行結果」がダウンロードされているのかな? だとしたら

>.sh っていう拡張子が人騒がせでしたね。潔く拡張子を消してしまうのが良いかと
32325:05/02/02 22:56:31 ID:ucPQifXh
sedやperlなどで ' とか " とかを削除するにはどうすれば??

sed "s/\"//g"
とかではエラーになってしまうのですが・・・。
sedやperl以外を使用する必要があるのでしょうか。
32425: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"
32625: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
32725: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にしとこうぜ
32925:05/02/03 01:52:08 ID:vPFrplbs
>>328
どうしてzipじゃだめなの??

http://sheel.mydns.jp/~sheel/temperature.tar.gz
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で解凍すると
何でもかんでも実行権限が付くか
何もかも実行権限が無くなるかだった気がします。
(環境設定で選択)
33225: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"

で動かないかなーとか。
33425:05/02/03 04:54:40 ID:vPFrplbs
>>333
なるほどね。やっと ; の意味がわかったよ。
まぁしかしパイプでつないだほうが見やすい(意味がわかりやすい)んで
これでええわ。
でもためになった。ありがとう。
335名称未設定:05/02/03 05:01:19 ID:Z8DgRvpJ
;は1行の終わりの印です。
普通テキストファイルに書く時は見やすいように;の後で改行するけど、
その改行はプログラムとしては意味が無い。
33625: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
あ、ゴメンこっちだった
http://pc7.2ch.net/test/read.cgi/mac/1072264921/l50
33925:05/02/03 05:48:37 ID:vPFrplbs
困っています。
$ ls -1
file001.txt
file002.txt
file003.txt
という感じのディレクトリがあったときに、shを使って
その中身をファイル作成日の順番に、057から始まるように
ファイル名を変更するにはどうすればいいのでしょうか??
file057.txt
file058.txt
file059.txt
という感じで。

ちょっと考えてみます。
34025: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

ほほぉ。
34125:05/02/03 05:59:40 ID:vPFrplbs
eelsPBG4:~ sheel$ ls -T1 file
file001.txt
file002.txt
file003.txt
file057.txt

ほほぉ。
34225: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

ほほぉ。
34325: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
34425: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" で良さげ。
347333:05/02/03 08:15:24 ID:Z8DgRvpJ
>>346
おおなるほど。勉強になります。
348名称未設定:05/02/03 09:54:35 ID:debnVQD3
>>331
それはzipじゃなくてsitでしょ
パーミッションが保存されてるzipならそんなことは起こらん
34925: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文で連番をインクリメントする。ループ
を抜けた時点の連番から処理を始めるって手があるね。それだと徐々に処理が
遅くなってくけど。
35125:05/02/03 14:32:20 ID:vPFrplbs
>>349
あ、デジカメ画像と言っておきながら拡張子は.txt・・・と
話がかい離してますが、わかりやすくしたかっただけで、
本当は
MAV_0001.3G2
MAV_0002.3G2
という動画の整理を行いたいのです。
このカメラ(A5504T)はバカなので連番を忘れてしまうようで、
いままでいちいち手動で連番をつけてきたのですが、
さすがにもう疲れてきましたので自動化してくれるものを
つくりたいなぁと。
もちろんGUIのフリーユーティリティがあるのは知ってるのですが、
(それかAppleScriptでも可能ですよね)
unix(てかsh)の勉強も兼ねて自分で作ってみようと思ったのです。

もうちょいがんがってみます。
35225:05/02/03 14:34:40 ID:vPFrplbs
>>350
ちょっとおっしゃってる意味がわかりづらいのですが、
しかしそのヒントでいいことを思いつきました。
最後に処理したあとには当然最後の番号を持つファイルが
存在するはずですので、それから番号を取得するようにすれば
いちいち別途テキストファイルを用意せずとも解決しますね。

もうちょいがんがってみまつ。
35325: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」はここで初めて聞いたんで、今もレスを見るたびにちょっとそわそわする。

心底どうでもいいのであげ
35525: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を見るなりしないといけないのが面倒だけど。
36125: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
36225: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 を使って作成日(というか修正日?)で並べ替えてます。
36325: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
36425: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
みたいな感じで。
36625: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に関しては何とかなるみたいだ。

…寝る。
36925: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
ま、cp -pってのもあるけどな。
おまいは此処に書き込む前に↓で調べれ。
http://www.jp.freebsd.org/man-jp/search.html
37125:05/02/04 04:43:21 ID:tW4Bmpui
cpとmvの違いを身をもって身にしみています。
ところでわざわざcpを使用していたのは理由があります。
それは、cpしたあとにrmすることで
ゴミ箱を空にする手間を省こうとしたのです。

mvだと・・・・え? あ、ゴミ箱は空にする必要がないのか・・orz
すまん、ひとりで解決した。

shで「ゴミ箱を空にする」コマンドってありますか?
ってのを聞きたかったですけど、この際だからもしあったら
後学のために教えてください。
37225: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はそんなにダメなソフトなんだろうか…。
37525: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にすることでその件は解決しましたので。
37625:05/02/04 06:08:02 ID:tW4Bmpui
>>374
いや、.3G2ってのは動画なんですよ。MPEG4の。
こんな感じ。
http://sheel.mydns.jp/~sheel/MAV_0000.3G2

写真だとiPhotoで管理するのが便利ですけどね。
377名称未設定:05/02/04 06:14:33 ID:sWELKBPp
へー。Webにアップするくらいなら充分な画質ですね。
37825: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させた方がよさそうだな。

どれ、改変してみる。
37925: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
38025:05/02/04 06:37:32 ID:tW4Bmpui
あ、古い順に連番していくので、
filenamelist=`ls -t *.3G2`
じゃなくて、
filenamelist=`ls -tr *.3G2`
が正解だった・・・orz >>379
38125: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
perlでできないかなと思ってあれこれ調べていたら驚くベキことが判明。
Perlクックブック314ページによると
『標準のUNIXでは、ファイルの作成時刻を知る手段は用意されていない。』
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man2/stat.2.html
STAT構造体とやら言うものがあんだけど、日時関係のデータが3つもあるけど作成日はないのねん。

て事は移植不可能な外道的手段であってもGetFileInfo -dを使うしか無いんだな。
38325:05/02/04 07:33:28 ID:tW4Bmpui
>>382
!!!!
な、なんと衝撃的な事実だすな・・・orz

ま、俺はMacしか使わないから必要があれば
GetFileInifo -d
でいいや。
38425:05/02/04 07:50:23 ID:tW4Bmpui
>>381
ほほぉ。

scp [email protected]:/Users/sheel/sh/bc.sh /Users/sheel/file/bc.sh
[email protected]'s password:
bc.sh 100% 2364 16.8KB/s 00:00

どれどれ。scpに -p オプションでも使って考えてみるかな。くくく。
385名称未設定:05/02/04 07:54:05 ID:EzANkcNa
cpだと、リソースはコピーされない。
コピー先がHFS/HFS+なら、/Developer/Tppls/CpMac で、どぞー。
38625: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
38725: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
ローカルネットワーク内で scp を自動化するんなら、パスフレーズなしの公開鍵認証を使う。
http://www1.u-netsurf.ne.jp/~ysk-net/Apple/History/Howto/ssh.html
この記事自体は実際に検証していないけど、日常的に使っているのでMacでもできることは確か。

…でも Mac っぽくできそうな気もするけどなあ。こっちは詳しくないけど
cp file /Network/Servers/sheel.local/
とかできないの?
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
シェルスクリプト総合 その1@UNIX板
http://pc5.2ch.net/test/read.cgi/unix/1101820646/
隔離の人以外はこっちのがいいかも。テンプレ見ような
39725:05/02/05 18:39:33 ID:A4QgGjFV
>>393
>osascript -e 'tell application "Finder" to empty trash'

ばっちり動作しますた!!!
すごいね〜。TerminalからAppleScirptが呼びだせるなんて!!!
感動してます。
逆もできちゃうし、MacOSX、マジで最強だなw(pgr
39825: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
40125:05/02/06 00:42:30 ID:2vVTYR/X
パスワードなしでsshやscpが行えるように設定した。
参照
http://www.geocities.jp/turtle_wide/tools/sshpass.html

こりゃ便利ですわ。
402名称未設定:05/02/06 01:10:20 ID:LjdMttf4
bsh、cshみたいなのをUnixから直輸入っていうのも芸がないな〜。というか、Appleらしくない。
もっと高機能且つ使いやすいものを作れよ。
40325: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的アプローチのシェル(スクリプト)だと思
うよ。
40525:05/02/06 02:45:13 ID:2vVTYR/X
「NO NAME」という名前のSDカードをEjectしたいのですが、
shもしくはosascriptで可能でしょうか?
40625: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
アップルスクリプトなら下のスレを参考にするといいかも

おもろい、めずらしいアップルスクリプト発表会 5
http://pc7.2ch.net/test/read.cgi/mac/1067367790/
409名称未設定:05/02/06 09:44:01 ID:Jz7NgqXA
ぐっとレベルの下がった質問でアレなんですけど、

 入れ子になった大量のフォルダとファイルがあって、
 いずれもファイル名・フォルダ名の先頭に3桁の番号が付いている。
 この番号が邪魔なので取ってしまいたい。

という時、shのスクリプトではどんな具合にしたらいいもんでしょうか?
mvを使えば1個ずつはできるんですが。

例えば『001test』という名前のフォルダとその中身に対して1度に処理をしたい時は?
mvでは正規表現は使えないですよね・・。うーん。
41025: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を経由できるとは!!

しかしこれは、、難しい・・。がんばって調べます。
41325: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
おおかっちょええ!
知らないのがいっぱい。勉強させていただきます。
42625:05/02/08 01:27:48 ID:b/S5rYmV
>>424
さっぱり意味がわからん。一行ずつ解説頼む。
427424: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は毎日朝から晩までいるけど真性のヒキコモリ?
43325:05/02/08 13:42:22 ID:Mzjf185Q
>>427
>>430
乙。
今仕事中で忙しいのであとで(後日)じっくり読む。
43425: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が空かどうかで条件分岐した方がよくないかい?

疑問点についてですが、同じスクリプトの中で円記号とバックスラッシュを両方書いてて何かおかしいと思わないですか。
43725:05/02/09 07:20:03 ID:XCWqvHCJ
>>435
>>436
!!!!!
な、なるほど・・・。たしかにyenとbackslashが同時混在するのって
なにか変ですね・・・。
文字コードとか改行コードとか記号コードとか、
いまいち意味がわかっていないのですが、
俺様はすごいのでちょっち勉強して調べてみますよ。
43825:05/02/09 07:20:52 ID:XCWqvHCJ
>>436
>1ページ目に書き込みなかった時どうすんの?

お、おっしゃる通りですね!!!
if文かましてみます。
43925: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が無事に出力されるのですが、
44025: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
44325: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」(コメント有り)

以上です。
44425: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
44525: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に変換するオプションが見つかりません。
どんなオプションをつければいいのですか?
44625:05/02/10 12:51:37 ID:EqyNj7bd
>>434
こちらもアドバイスをいただいたので改変しました。
RKKのSOUNDSTEADYの放送内容を取得するshです。
一時間おきとか毎日一回実行するようにcronしておくと
新しい番組表が更新されたときだけメールをくれます。
    ↓    ↓
44725: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
44825: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で阿呆な間違いをしている事に気付いたが
気付くだろうから放置しておく事にする。
45225:05/02/10 18:24:12 ID:rMkjkcs5
おう。乙。
ヒマなときにまたやってみるよ。
45325: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の場合は平仮名の濁点と本体が別の文字の仕様を採用してるんでしたっけ。
45625: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ってやってみそ。
45825:05/02/11 18:44:33 ID:sSPbz1Rj
>>457
nkf -help
では入力待ちになってどうもできませんでした。
今もう一回googleってみたらわかりました。

nkf -w
でUTF8に変換してくれるみたいですね。
459名称未設定:05/02/11 18:45:59 ID:ygSPENyG
>>458
おまいアフォやろ。(w
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と違って「]」が必要かどうかなんて本質的にはどうでもいいので
事実上全く同じといっても良いだろうけどさ。
46825: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はけっこういろいろ決めてるみたいだけど、他は特に
決まった標準があるかどうかはわからない。
47225: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
>>474
当然
476名称未設定:05/02/11 22:11:36 ID:GgwsXRwO
>>474
bashと、あとzshも使えるけど、FreeBSDのshとashはだめだった。
ksh由来の機能なのかな。

互換性が重要なら#!/bin/bashとかの方がいいかもしれないけど、そこまで来ると
bashの場所も/usr/binとか/usr/local/bin以下の可能性が出てくると思うね。
47725: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では言ってないだけ。

他にもいろいろありそうなので、指摘してください。
480478: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を管理する必要がなくなるので楽だよ
481478: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にもちゃんと書いてあった。)
48325:05/02/13 09:59:55 ID:y6F/uzDO
>>482
ああ、そうだね。
>>477は ! をつけたりつけなかったりして ! の適正な場所と意味を
検証するのに使ったので。
48425: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
48525: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 にだけ存在する行)
が抽出できると思われ。あらかじめソートしておくのをお忘れなく。
48825:05/02/13 23:49:16 ID:qxzez8qt
>>486
乙。
>出力先はフルパスで書いておいたほうが吉
→なるほど確かに。
>送信先のメールアドレスは変数にして冒頭に置いたほうが便利でしょう。
→なるほどそうすれば簡単に誰でも使えるshに一般化できますね。
 自分でちょこっと書き換えるのにも楽そうだし。
>メールの本文はヒアドキュメントを使うとよいと思われ。
→!!!! こ、これは便利そうだ!
#!/bin/sh
cat <<EOT | nkf -j | mail -s "test" [email protected]
baka
afo
バカだね。
EOT

ほほぉ〜!!!!
48925: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 > ... はキモイ。
49125: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
皮先くん隔離スレだからしかたがない
49525: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を再起動してもダメですた。

なにがいくないのでしょうか?
49625: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
シェルスクリプトに全く関係ないのに誘導される理由がわからんのだが…

Javaのバージョンが古いのは間違いない。
OS9のMRJはJava2ですらないし、10.1.5でも1.3.xでしょう。
とりあえずこちらに行ったらどうですか
http://pc7.2ch.net/test/read.cgi/mac/1047361032/l50
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砲の出番も近いかな…
516504: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
自分が必要な知識が付いたから
(自分が欲しいものは作れたから)
他スレに紛れたりしながらぼちぼちやってるのではないかと。
523紙 ◆N3i.Qu1SoY :2005/03/24(木) 06:58:39 ID:vVg2ozqi
ああ、おまいらすまんかった。
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
そんなあなたはUNIX板へGo
連番のH画像を一気にダウンロードする
http://pc8.2ch.net/test/read.cgi/unix/979106537/
2ちゃん画像落としまくりスクリプト
http://pc8.2ch.net/test/read.cgi/unix/1003833552/
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でトンネルする。
538Paper ◆n02s7xx2/2 :2005/04/21(木) 01:11:21 ID:KoLwhKBj
久しぶりに来たので亀レスしてみる。

>>533
一番いいのは会社の方針に従っておくこと。
どうしても必要があるなら、自宅鯖に80番ポートで認証付きのプロキシサーバを立て、
そこを踏み台にして外の世界に接続する方法なんかがあるよ。

キーワードはこんな感じか。正直初心者にはお勧めできない。
squid, プロキシ認証, HTTP CONNECT, トンネリング
539Paper ◆n02s7xx2/2 :2005/04/21(木) 01:12:40 ID:KoLwhKBj
>>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
547545: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
ひさしぶりに来てみたらなんだこの有り様は。
もっと俺みたいに建設的なレスをしるよ。

叱咤激励age