1 名前:デフォルトの名無しさん [2005/04/04(月) 03:43:03 ] シェルスクリプトに関する質問・回答や議論等を行う相談室スレッド。
477 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 00:27:39 ] >>467 Solaris のawkみたいに腐ったやつだとわからないけど、gawkなら NF--; print $0 で取れないか?
478 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 00:33:01 ] >>477 jgawkでやったら aaa.bbb.ccc.dddが aaa bbb cccになった。
479 名前:デフォルトの名無しさん [2006/12/08(金) 01:05:00 ] NFってなに? Systemコマンドの使い方教えて
480 名前:477 mailto:sage [2006/12/08(金) 01:21:03 ] >>478 スマソ。OFSを設定してクレイ。 gawk -F'[.]' -v OFS='.' '{NF--; print} あたりでよろしこ。
481 名前:デフォルトの名無しさん [2006/12/13(水) 21:04:58 ] shellってすごいね
482 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 23:27:33 ] #!/bin/sh dump -0f /path/to/hda1.dump /dev/hda1 dump -0f /path/to/hda2.dump /dev/hda2 このスクリプトを実行して、hda1の実行途中でCtrl+Cを押したら hda1は終了するけど次行のhda2のバックアップが開始されます。 スクリプト自体を終了するにはどうしますか?
483 名前:デフォルトの名無しさん [2006/12/24(日) 10:47:11 ] >>482 dump は使ったことないので、勘ですが dump -0f /path/to/hda1.dump /dev/hda1 if [ $? -ne 0 ] then dump -0f /path/to/hda2.dump /dev/hda2 fi じゃ、だめですか?
484 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 12:55:55 ] #!/bin/sh -e dump -0f /path/to/hda1.dump /dev/hda1 dump -0f /path/to/hda2.dump /dev/hda2
485 名前:デフォルトの名無しさん [2006/12/26(火) 23:54:08 ] sedで-dオプションを使って、特定の文字列がヒットした時に、 その行を削除したいのですがうまくいきません。 manpageみても使い方がよくわからず、困り果てております。 どうやって使えばいいかご教授お願いします。
486 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 23:58:45 ] >>485 -dオプション??? 単純に行削除だけなら例えば以下のように。 -- sed -e '1,5d' #最初の5行を削除 sed -e '/pattern/d' #patternを含む業を削除
487 名前:デフォルトの名無しさん [2006/12/27(水) 06:42:35 ] >>486 使い方思いっきり間違ってました ありがとうございます 助かりました
488 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 17:11:03 ] てか、パターンを含む行を削除したいだけなら grep -v でやれば良い。
489 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 01:09:04 ] きっとgrepでは業(カルマ)を削除できないのだろう。
490 名前:デフォルトの名無しさん [2006/12/29(金) 16:00:50 ] sedでレコードのor検索やand検索ってできますか?
491 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 16:12:11 ] RDBでいうレコードの概念は、区切り文字とのパターンマッチでおおよそシミュレート可能。 その上で、パターン/X/と/Y/のandは/X/{/Y/}で、orは /X/... /Y/... でシミュレート可能。
492 名前:デフォルトの名無しさん [2006/12/30(土) 12:08:44 ] 例えばレコードの100バイト目から105バイト目を置換したいんだけど、 全角・半角が不規則に混ざっているので、 s/(.{100,100})......)/\1abcdef/ とか正規表現でやってもうまくいかないんだよね。 良い方法あるかな? ちなみにUNIX、sedでやるつもり。
493 名前:デフォルトの名無しさん mailto:sage [2006/12/30(土) 15:00:03 ] >>492 多バイト文字を途中でぶった切ってもいいの? $ LC_ALL=C sed -e 's/^\(.\{99\}\)\.\{6\}/\1abcdef/' とか。LC_ALLは状況しだいでLANGとかLC_COLLATEあたりでもOK。 あとこの正規表現はGNU sed でないと多分食ってくれない。
494 名前:492 mailto:sage [2006/12/30(土) 23:40:41 ] うちはcshなので env LC_ALL=C sed 〜 って感じですね! ありがd! 後いい忘れたけど固定長ファイルで置換部分は必ず1バイト文字なのでぶった切られることはないです。
495 名前:デフォルトの名無しさん mailto:sage [2007/01/02(火) 14:18:06 ] RDB=ラーメンデータベース
496 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 00:18:43 ] よく勘違いされてるんだけど、 ラーメン(Rahmen)というのはドイツ語で、 英語のframeに相当する単語なんだ。 だから「枠」とか「骨格」とか「軸組み」とかいうような ニュアンスなんだよ、本来であれば。
497 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 09:39:49 ] ラーメン違い。本来も糞もない。
498 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 12:33:20 ] 遅レス気味すまそ。 >>483 そういうの書くなら dump -0f path/to/hda1.dump /dev/hda1 || exit 1 と || exit の方が、見やすくって良くないか。
499 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 01:26:49 ] 質問があります。 Vine4.0を使用していまして #!/bin/sh declare -i MAX MAX=10 while[ $MAX -lt $1 ] do echo $MAX MAX=$MAX+1 done というスクリプトを書いたのですがいざ実行してみると下記のようなエラー?がでてしまします。 command not foundということは何かがたりないのでしょうか? アドバイスお願いします。 . a05.sh 12 bash: while[ 10 -lt 12 ]: command not found bash: a05.sh: line 5: syntax error near unexpected token `do' bash: a05.sh: line 5: `do'
500 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 02:35:36 ] whileの後ろに空白がないんじゃないか?>499
501 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 03:45:07 ] >>499 空白入りの引数を渡すとエラーを吐くから $1 の所をクォートしておくと吉
502 名前:499 mailto:sage [2007/01/06(土) 02:58:14 ] >>500 ,501 whileの後ろに空白をいれたら無事に動作しました。 クォートとは''の事ですよね?参考になりました。 ありがとうございました。 新しい質問なんですけど #!/bin/bash while [ -f .count.lock ]; do sleep 0.1 done touch .count.lock declare -i INTEG INTEG='cat access_count.txt' INTEG=$INTEG+1 echo $INTEG >| access_count.txt echo "$INTEG" rm -f .count.lock を動作させると bash: cat access_count.txt: syntax error in expression (error token is "access_count.txt") 15 ←access_count.txtの内容を書き換えてもどんどんインデントされていきます。 の様に吐き出されてしまいます。 INTEG='cat access_count.txt'の部分が悪い様なのですがINTEGにcatを使って ファイルの内容を代入することはできないのでしょうか? access_count.txtの中身は 0 とだけ入っています。 よろしくお願いします。
503 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 03:33:25 ] コーテーションの向きを確認すべきかと
504 名前:492 mailto:sage [2007/01/06(土) 11:02:47 ] すいません、また来ました… \{99\}使えんかったorz .を99個書くしかないんかね〜
505 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 21:31:43 ] >>504 sedを使わない方法 (dd bs=1 count=99;dd bs=6 count=1 of=/dev/null; echo -n abcdef; cat)
506 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 02:48:47 ] >>504 使ってる sed がGNU sedでないとかない? echo abcdefghijklmn | sed -e 's/^\(.\{5\}\).../\1XXX/' で abcdeXXXijklmn になるよ(Fedora Core5) あと、493は後ろのドットに余計な\がついてるからそれはとっておくんなまし。
507 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 15:39:41 ] >>504 awk '{print substr(1, 99, $0) "12345" substr($0, 105)}' hoge.txt
508 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 23:38:53 ] >>504 printf "%099d\n" |tr 0 \.
509 名前:504 mailto:sage [2007/01/16(火) 00:52:23 ] やっぱawkじゃね〜 サンクスコ
510 名前:デフォルトの名無しさん mailto:sagw [2007/01/16(火) 17:35:01 ] ちょいとawkスクリプトでお尋ねしたいんだが、 2つ以上のファイルから文字列の切り出しってできますかね? 色々試してみたのだけれど全然できなかったんで hoge1.dat の$1,$3 と hoge2.dat の$5,$2 を 1行でhogehoge.datに出力という形 GMTっていうマイナーなツールで絵を描いてるんだけど、GMT内の計算スクリプトで出たデータのお尻に 別のデータを加えてそのまま描けないかなぁって試行錯誤してるんですが。
511 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 17:44:04 ] できます。しかし、残念ながらスレ違いにつきawkスクリプトは割愛。
512 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 18:08:10 ] >>511 スクリプトが複数行に渡らずにできるならなんとかサンプル探してやってみる
513 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 18:33:03 ] >>512 なぜにワンライナーにこだわるん?
514 名前:512 mailto:sage [2007/01/16(火) 19:44:23 ] スレ違いだけど一応 >>513 簡単に言えば頭の悪い素人だから。 マニュアルになりそうなもんは見たりするんだけど、大体そういうのって一行で処理終わらせるのが多くて。 専門用語がてんでダメだし、 何故処理できるのか?を理解してなくて、「こうやればこういうのができる」でしか認識してなく 自分自身、誰かが書いたソースの簡単な処理や変数を弄るだけしかできないって分かってる。 複数行に渡ると検索でHITしにくいし、「できる」て事さえ分かれば後は調べたらなんとかなるかな、と スレ読んでたら組み合わせ次第でなんとかできそうだわ
515 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 19:55:53 ] カラム数が固定ならpasteとawkをパイプで繋ぐのが楽かな。
516 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 00:33:49 ] 一応、書いてみたんだがな…、1行ぢゃないから駄目か #!/usr/bin/gawk -f BEGIN{ while( (getline line1 < "hoge1.dat" ) > 0 && \ (getline line2 < "hoge2.dat" ) > 0 ){ split(line1,col1) split(line2,col2) print col1[1],col1[3],col2[5],col2[2] } }
517 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 01:45:36 ] >>510 bash 限定かも $ paste <( awk '{print $1,$3}' hoge1.dat ) <( awk '{print $5,$2}' hoge2.dat )
518 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 10:59:01 ] 対話式のスクリプトを作っており、read で入力されたIPアドレスを 正規表現でIPアドレス規則が正しいかを判断さえたいのですが、 どうしたらいいですかね。
519 名前:デフォルトの名無しさん [2007/01/24(水) 11:51:57 ] 関数やサブシェルについての質問です。 まずサブルーチンの方ですが、以下のようにしました。 「Name_sub.sh」 #!/bin/sh echo "What is your name and age ?" read your_name your_age CHECK_NAME () { echo $1 $2 } CHECK_NAME $your_name $your_age これ単体で実行すると、正常に$your_name $your_ageが戻ってくることを確認しました。 これを他のmainスクリプトから呼び出して使おうとしました。 「Name_main.sh」 #!/bin/sh var=(`./Name_sub.sh`) echo '${var[@]} = ' ${var[@]} ここで、Name_sub.shの戻り値を配列varに入れようとすると、 Name_sub.shの対話部分が表示されませんでした。 対話部分をプロンプトに表示して、関数のCHECK_NAMEの戻り値のみ 配列varに代入するにはどうすればよいのでしょうか?
520 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 12:29:27 ] とりあえずtmp.txtファイルに値を保存して、その値をmainで読み込むことにしました。
521 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 13:17:20 ] source を使うケースじゃないのかな。
522 名前:デフォルトの名無しさん [2007/01/25(木) 15:51:10 ] >>518 sh や bash の場合 (ksh もこうだったかも知れない) IFS=. とすると set で指定した変数は '.' で区切られて $n に入るようになる。 たとえば ipaddr に 172.24.1.2 と入っているときに IFS=. set $ipaddr とやると $1 に 172, $2 に 24, $3 に 1, $4 に 2 が入り、更に $# が 4になる(4つに分割されたということ)。 なのでまずはこの直後に if [ $# -ne 4 ]; then echo Error ; exit 1 ; fi のようなことをして4つでなければエラー扱いにしてしまえば良いと思う。 更に $1 から $4 に入っているので for でループさせることもできる。 なのでここで数値が 0 〜 255 になっていなければエラーにすれば良い。 # n に 172, 24, 1, 2 の順で代入されてループする。 for n do if [ 0 -gt "$n" -o 255 -lt "$n" ]; then echo Error ; exit 1 ; fi done テストで数を先に書いている理由は n には何が入ってくるか分からないから。 ('-' で始まるオプションのようなものを入れられてしまうとテストコマンドの 動作が変わってしまうかも知れないため)
523 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 16:05:50 ] どうしても正規表現を使わないと我慢ならんという場合はこんな感じかな。 なんか無理があるが。 if perl -e '$_='\'"$ipaddr"\'';if(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/){if($1>=0&&$1<=255&&$2>=0&&$2<=255&&$3>=0&&$3<=255&&$4>=0&&$4<=255){exit 0}}exit 1;' then echo ok else echo ng fi
524 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 17:38:15 ] 正規表現の時は >=0 の判定はいらんと思う。 どちらにしろ面倒だけど。
525 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 22:03:14 ] あ、そうだね。いらないね。
526 名前:デフォルトの名無しさん [2007/02/07(水) 22:53:33 ] [質問] シェルスクリプト初心者です. power 12.34 dBm power 13.45 dBm power 14.56 dBm ある,power(電力) の変化を確認するのに while true; do sleep 1 echo `command`; done で 表示しているのですが 改行して新たな出力を出さないで, 前の出力を消し power 値 dBm の値のところだけが変わる ようにしたいのですが,いい方法ありませんか? clear は使わずにお願いします. 分かりにくい説明ですみませんがどうかよろしくお願いします.
527 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 23:09:16 ] >>526 キャリッジリターンを使うと吉。 command が複数行出力しているとこれでは上手くいかないけど。 while true; do sleep 1; echo -en "`command`\r" ; done 詳細は man printf かな?
528 名前:デフォルトの名無しさん [2007/02/11(日) 11:20:30 ] シェルスクリプトって例外処理できます? 例えば一つ上の行でエラーが発生したときはそのシェルスクリプトの処理を終了するとか。
529 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 12:14:42 ] >>528 プロセスの終了ステータスを見て条件分岐することはできる。
530 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 13:13:06 ] >>528 普通は>>529 の終了ステータスを使う。エラー時に終了するだけならこれで十分。 シグナルが飛ぶならtrapでシグナルハンドラを書くのもあり。 try/catch/throwに直接対応するものは、Bourne shell、csh、bashにはない。
531 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 20:02:45 ] set -eしとけば、(検査されていない)終了ステータスが0以外の場合は スクリプトが終了する。終了処理はtrap "..." 0
532 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 08:56:55 ] どもですm(_ _)m
533 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 19:47:34 ] リダイレクトのことで質問なんですが echo hoge > test ls -l < test とやるとlsは標準入力(つまりtest)の内容を読み込むのなら 普通にls -lとした場合はキーボードからの入力を読み込もうとすると思うんですが、 そうはならないのは何故なんでしょうか?
534 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:19:42 ] >>533 入力がリダイレクトされても、lsは何も読むわけではない。 つまり、ls -l < test と書いても ls -l と書いても同じ事。
535 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:42:01 ] たしかにls -l < testとやっても変わらないみたいです。 今、入門UNIXシェルプログラミングという本で勉強しているのですが、 その本の89ページには echo abc nnn > xyz ls -l < xyz とするとls -l abc nnnとしたときと同じ結果になる。書いてあったのですが、 この本が書かれた時と今ではlsの動作が異なるということなんでしょうか?
536 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:55:46 ] いつの時代か知らんが、lsが標準入力から引数を貰うような作りになってる という話は聞いたことがないな。 ls -l `cat xyz`とか xargs ls -l < xyz ならありえる。 xargsは、はしょって言うと、標準入力から受け取ったものを、自分に与えられ た引数につなげたて、その全体を実行するコマンド。、
537 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 22:01:14 ] うーんサンプルコードを見ても特にxargsを使っているわけではないようです。 本のタイトル名で検索したらサポートページがあったので、後で この件に関してメールを送ってみようかと思います。ありがとうございました。
538 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 22:12:21 ] >>537 物はこれか? ttp://shop.sbcr.jp/isbn/shell/index.htm ここには載っていないようだな。 ttp://shop.sbcr.jp/isbn/shell/errata.htm
539 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 22:17:38 ] この本か。 会社に置きっぱなしだから明日確認してみる。
540 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 22:22:57 ] 著者名のつづりのミスもみつけられんとこ信用するな
541 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 01:49:29 ] >>535 ls -l `< xyz` なら期待通りの結果になるよ。 bash 依存の記法だったと記憶しているけど。
542 名前:539 mailto:sage [2007/04/05(木) 10:21:44 ] 入門UNIXシェルプログラミング(ソフトバンク株式会社、Bruce Blinn、初版) の87ページに確かに載っているな ---------- $ cat xyz # xyzファイルの中身を確認 abc nnn $ ls -l < xyz # xyzファイルを「標準入力」としてリダイレクトする ---------- ls (GNU coreutils) 5.97では動きませんでしたがええ。
543 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 12:53:34 ] リダイレクトのことで質問なんですが 中身がスペース一つのファイルsampleを cat test | sed -e 's/ / /' > test2 とするとtest2にスペース10個が出力されるので cat test | sed -e 's/ / /' > test とするとtestの中にはスペースが10個入っていると思うんですが、 中身を見てみると空になってしまいます。 一つのコマンドの中で同じファイルに対して入出力のリダイレクトを行うと 空になってしまうのはわかるんですが、今回の場合はどうしてうまくいかないのでしょうか?
544 名前:543 mailto:sage [2007/04/05(木) 12:55:16 ] すいません、上の例でのtestはsampleの間違いですorz
545 名前:543 mailto:sage [2007/04/05(木) 12:57:52 ] 何度もすいませんorz どうやら連続した半角スペースは一つにまとめられてしまうみたいで、 上の例のs/ / /はs/スペース1個/スペース10個/ってことです。
546 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 13:50:57 ] >>545 一部のOSのようにパイプラインを非同期にしか実装してない環境ならいざ知らず、 まともなOSではパイプラインの前後のプロセスは同時に実行されるので、 パイプラインに接続する一つのファイルを読み書きしようとすれば当然そうなる。
547 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 14:50:40 ] つまり上の例だと ・最初に書き込み用にファイルを開く、当然ファイルの中身は空になる。 ・catは空のファイルの中身を出力する ・空がsedに渡されるので当然空をファイルに書き込む という順番で処理が行われるんでしょうか?
548 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 15:14:56 ] ちょっと違うな。 cat test | sed -e 's/ / /' > test の場合、 シェルがtestを"w"で開いてからcatとsedを起動する筈だから、 catが起動された時点でtestは既に空の筈だ。 空の入力に対してcatは何も出力しないし、sedも同じように何も出力しない。 従って、空になるのはcatやsedが起動される前と言うことだ。 ちなみに、どうしても同じファイルに読み書きしたいなら sed -e 's/ / /' < test | tee test のようにしてしまえばいい。 これなら、シェルがtestを開いてからteeがtestを開こうとするので (unixの開きっ放しのファイルは削除できたように見えてもそれは見掛けだけ仕様に基づき) 無事に処理される筈だ。
549 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 15:27:54 ] まず最優先でリダイレクトのための処理が行われて、それから コマンドの処理が行われるんですね。わかりました。ありがとうございます。
550 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 17:02:21 ] なんか今一判っていない悪寒。
551 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 02:40:06 ] >>549 GNU sed 使ってるなら -i オプションつけとけ
552 名前:デフォルトの名無しさん [2007/04/07(土) 19:35:57 ] シェルを初めて組みます。 Cシェルで、自分のグローバルIPを取得して、そのIPをメールで送信するようなプログラムを 組みたいと思っております。 で、グローバルIPの取得の仕方が分からないのですが、 どのようにかけばよいのでしょうか? OSはRedHat10です。
553 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 20:07:14 ] シェルスクリプトのことをシェルゆーな。 Cシェルで書くな。 プライベートアドレス 10.x.x.x 172. {16-32} .x.x 192.168.x.x 割り当てられているIPアドレスは LANG=C /sbin/ifconfig |sed -n 's/inet addr:¥([^ ][^ ]*¥) .*/¥1/p' で取れるから、あとはawkでも使って該当しないものを除外すれば いいんじゃないか? と書いてから気づいたが、家のダイアルアップルータに繋がっている LinuxからグローバルIPアドレスを取ろうとするなら、Linuxにはプライ ベートIPアドレスしか割り当てられてない。取るべきはルータに付いてる グローバルIPアドレスになるから別の方法が必要だぞ。
554 名前:デフォルトの名無しさん [2007/04/07(土) 22:25:30 ] >>553 すいません、ありがとうございます。 何もわかってないんで^^; ずばり、そのとおりで、取得したいのはルータについてるグローバルIPです。。
555 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 22:42:16 ] >>554 ダイアルアップルータやモデムにはtelnetサーバが内蔵されていることがある。 叩くコマンドが分かれば、expectを使って取得できるかもしれない。 httpサーバを内蔵していることもあるが、こっちはずばりIPアドレスを確認する ページを持ってるかもね。
556 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 23:00:35 ] >>554 誰もおまいのルータの仕様を知っているやつはいないからな・・・ うちのFLASHWAVE 2040 M1ならID:PASS@ ルータのIP/doKeeping.htmlを wgetで取得してvar sIpAddress="*.*.*.*";の場所を取得すればわかる。
557 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 00:37:43 ] 何も考えずにメール出せば、大抵はReceived:にIPアドレスが自動的に書かれる。 書かれないならば、書いてくれるメールサーバを提供しているISPに乗り換える。
558 名前:537 mailto:sage [2007/04/11(水) 10:24:46 ] ソフトバンクさんからメールの返事が届きました。 正誤表も更新したみたいです。
559 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 12:36:15 ] alias定義で改行の前に入れる\にはどのような作用があるのでしょうか? csh でいろいろと試してみたところ、下のようにwhile文などが使えるようになりますが、 一方で、引数を扱ったりwhile文のネストをしたりすると正常に動作しなくなってしまいます。 alias loop '\ set count = 1\ while ( $count <= 5 )\ echo hoge\ @ count++\ end\ '
560 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 12:45:23 ] 未だだね。
561 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 12:46:29 ] あーいけね、>560は>558の話ね。 >>559 行末のバックスラッシュは改行文字をエスケープする。
562 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 13:19:26 ] >>561 「改行文字をエスケープする」の意味を具体的に教えて欲しいのです。 >>559 のコードで\+改行を空白に置き換えると動かなくなります。 妙な副作用がなぜ出るのかも謎です。
563 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 22:34:26 ] >>552 診断君とかにアクセスしてIP抜いてもらって それをパースするのはだめなんか?
564 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 22:36:33 ] ワンクリ詐欺サイトにアクセスすればIPアドレス教えてくれそうだな。
565 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 23:29:53 ] >>563 頻度にもよるけどあんま他人様のとこに頼るのもいかんと思う。 自前で取れるんならそうした方が優しいし確実。一応 ttp://info.ddo.jp/remote_addr.php とか使うとワンライナーでやれるけど。
566 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 12:59:30 ] >>562 シェルスクリプトにおける改行の意味を調べてみると良いよ。 alias loop 'set count = 1;while ( $count <= 5 );echo hoge;@ count++;end;'
567 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 05:02:58 ] >>566 while?
568 名前:デフォルトの名無しさん [2007/04/13(金) 21:22:17 ] 質問させてください。 以下のように、test-serverへ接続し、 date;hostname;whoamiを実行するスクリプトを書いてます。 date;hostname;whoamiの結果をリダイレクトし、 スクリプト本体があるサーバに保存したいのですが、 その場合、どう記述すれば良いでしょうか。 #/bin/bash HOST=test-server UNAME=root PASSWD=*** expect -c " set timeout 20 spawn telnet $HOST expect login:\ ; send \"$UNAME\r\" expect sword:\ ; send \"$PASSWD\r\" expect \"$\" ; send \"ls\r\" expect \"$\" ; send \"date;hostname;whoami\r\" expect \"$\" ; send \"exit\r\"
569 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 11:40:37 ] そのスクリプトの出力をリダイレクトすればいいのではなくて?
570 名前:568 mailto:sage [2007/04/17(火) 21:48:16 ] その方法が分からないのです。expect内部でリダイレクトすると 接続先にファイルが出来てしまうんじゃ無いでしょうか
571 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 23:45:47 ] >>570 にほんごよめますか?
572 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 00:08:52 ] ラッパー側のスクリプトの出力をリダイレクトしようとしても、 expectの中で起動したプロセスの出力はexpectが全部食っちゃうん じゃないの?
573 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 18:39:33 ] あるプログラムをバックグラウンド実行して、 そのプログラムが一定時間後に終了していなかったら終了させる、みたいなことはできますか? こんなイメージです。 #!/bin/sh /bin/hoge & # 数十分かかる。途中で固まるかもしれない。 sleep 3600 # 念のため一時間待ってみる [ hoge が終了していなかったら hogeをkillする。終了していたら無視 ] exit
574 名前:デフォルトの名無しさん mailto:age [2007/04/21(土) 18:41:17 ] あげ
575 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 18:50:35 ] >>573 こういう事? #!/bin/sh -x DURATION=3600 hoge & PID=$! echo ${PID} sleep ${DURATION} kill ${PID} exit
576 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 18:51:49 ] >>573 pid控えておいて、atコマンドで終了スクリプトを仕込むとか。
577 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 19:30:31 ] 一時間の間にpidが再利用されない保証があるなら。