1 名前:デフォルトの名無しさん [2005/04/04(月) 03:43:03 ] シェルスクリプトに関する質問・回答や議論等を行う相談室スレッド。
620 名前:デフォルトの名無しさん [2007/07/05(木) 00:28:33 ] しつもん スイッチのポートとその先のPCのMACをSNMPで対応付けたいのですが、 #!/bin/bash while [MACアドレスがある限り];do snmpwalk -c コミュ IP .1.3.6.1.2.1.17.4.3.1.1 >aa snmpwalk -c コミュ IP .1.3.6.1.2.1.17.4.3.1.2 >bb snmpwalk -c コミュ IP .1.3.6.1.2.1.17.1.4.1.2 >cc snmpwalk -c コミュ IP .1.3.6.1.2.1.31.1.1.1.1 >dd grep MAC aa > mib grep mibの右側 bb >bridge grep bridgeの右側 cc >ifindex grep ifindexの右側 dd >port paste MAC,port >output.txt done <mac.txt みたいなたらい回ししか出来ないんですか? 関係ないけどどうして演算結果を変数に入れるのがあんなに変な形式なんだろう?
621 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:40:18 ] >>618 #!/bin/csh -f echo ' @を使わないことに何の意味があるの?' echo 'あんた馬鹿じゃねーの?'
622 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 01:02:45 ] >>618 Bourne Shellでやる「ように」と書いたのが見えませんでしたか? ・cshでも``記法は使えるでしょ? ・exprはBourne Shellの内部コマンドじゃないでしょ?
623 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 01:37:06 ] >>620 コマンド置換を山ほどネストすれば一時ファイルはもっと減るんじゃね? つかこの程度のことにbash使うな で、変な形式って?
624 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 00:53:44 ] 文字列+数値(たまに数値の無い行がある)の並んだファイルを置換したいです ○○○1 ××××200 △△ □□66 とか並んでるのを、 ○○○2 ××××201 △△ □□67 みたいに。 sedで左 >file1 sedで右 | sed -e "s/\([0-9][0-9]*\)/&+1/" | bc >file2 paste file1 file2 > file3 で解決かと思ったら、△△の行がbcで勝手に詰められて結果がずれてしまう… 私の頭ではこれ以上思いつきませんでした。助けて
625 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 00:56:27 ] awkでいいじゃん。
626 名前:赤帽勉強中 mailto:sage [2007/08/02(木) 21:45:16 ] ・lftpを使用してファイルアップロードと削除を行う(mirrorは使わない) ・アップロードと削除の対象ファイルはリストから読み込ませる って機能のスクリプトを作ろうとしているんですけど、 ファイル名をリストから読み込ませてのアップロードと削除がどうやれば良いのか。。。 どなたかlftpに詳しい方、アドバイスを下さいませ。(-∧-;) ナムナム
627 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 22:19:08 ] lftp使ったことないのでmanを見てみたが、manの範囲でできる。 実行するコマンドをテキストファイルに羅列して lftp -f そのファイル 標準出力からコマンドを食わせることができればきれいなんだけどな。 cat <<EOF > commands user hoge pass cd hoge EOF sed 's!^!put !' < put_file_names >> commands sed 's!^!del !' < del_file_names >> commands lftp -f commands とかそんな感じじゃね?
628 名前:赤帽勉強中 mailto:sage [2007/08/02(木) 23:10:38 ] >>627 レスありがとうございます♪おかげで何とかなりそうですよ。 実はmanを見たりググったりしていたんですが何じゃこりゃ?って感じで理解できていませんでした(汗 まだまだ全然勉強が足りませんですね。。。ヾ(´▽`;)ゝアセアセ
629 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 00:52:33 ] ふつうrsync
630 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 12:59:17 ] ついでなので、ワタシの使っているコマンドライン公開 lftp -u USER,PASS HOST -e 'set ftp:passive-mode 0;set ftp:ssl-allow 0;mirror -Rev' 2>&1 >>629 ftp しか使えない環境でも、rsync って使えますか?
631 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 14:37:12 ] >>630 使えません
632 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 14:49:39 ] sshオーバーで耐えろ
633 名前:デフォルトの名無しさん [2007/08/13(月) 00:26:07 ] シェルスクリプトでURLのリンク先を開くにはどうしたらいいでしょうか?
634 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 01:06:27 ] >>633 汎用的なのは telnet + expect SSL や TLS を使用しているなら openssl 接続先が http なら wget とか curl とか ftp なら ftp コマンド
635 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 04:04:17 ] UNIXパワーツールの92Pに PS1='`date "+%D %T"` $PWD $ ' というカスタマイズが紹介されていたんですが +%D %Tをダブルクォートで囲むのは何故なんでしょうか?
636 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 08:04:47 ] >>635 そのPS1への代入の段階で展開させず、PS1に%Dを引き渡すため。 勿論それは、プロンプト表示の段階で展開されることを期待している。
637 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 16:05:22 ] >>636 シングルクォートで囲んでいるので、ダブルクォートで囲まなくても 代入の時点ではdateコマンドは実行されないのではないでしょうか?
638 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 16:19:05 ] >>637 date +%D %T と実行してみろ。話はそれからだ。 >>636 それでは"が必要な理由の説明になっていない。
639 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 22:55:46 ] >>635 論点とは違うが、 PS1='\d \t \w \$ ' これと大差ない気がする。
640 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 08:41:29 ] >>639 それ移植性ある?(PS1に移植性も何もないが、移植性のある.profileとか 一時期凝ってたんで)
641 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 01:16:48 ] >>640 移植性というか、依存するのはシェルのバージョンだから、 ttp://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html#lbBZ bash なら上の「プロンプト」の項に載っている奴は 少なくとも bash 2.05b 以降で使えるはず。 ついでに bash 3.2.17 の info を確認したら、二つ新しいのがあった。 これには移植性が無いって事だな。w `\D{FORMAT}' The FORMAT is passed to `strftime'(3) and the result is inserted into the prompt string; an empty FORMAT results in a locale-specific time representation. The braces are required. `\A' The time, in 24-hour HH:MM format.
642 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 01:59:47 ] echo $ とすると$が出力されるのに echo $"" や echo $'' とするとなにも出力されなくなるのはどうしてなんでしょうか?
643 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 02:15:52 ] >>642 後者は$が変数参照の一部と見做されるから。 抑止するには$を''で囲むか\でエスケープすればいい。
644 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 02:31:25 ] >>643 >>後者は$が変数参照の一部と見做されるから。 変数名が空の文字列の変数を参照しようとするってことなんでしょうか?
645 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 11:25:41 ] そんなようなもんじゃない? その割には、そんな変数は定義できないと思ったけど。
646 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 15:26:44 ] bash の話だと、 $"" と $'' は特殊な quoting の構文になってる。 zsh にも $'' はあるみたいだね。
647 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 19:47:15 ] man hogeの結果に対してgrepをしたい場合、どのように書けばいいのでしょうか?
648 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 21:41:37 ] うちのMacではそのまま man man | grep -i optionとかできるんだけど、 これって特殊?
649 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 21:51:12 ] >>647 PAGERをcatにしたらどう?
650 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 22:04:53 ] >>648 いやそんなことはないと思う linuxとかでもそうでしょ んでも、grep前にcol -bとかはさんだほうがモアベターだと思う
651 名前:647 mailto:sage [2007/08/28(火) 22:18:05 ] 今の環境はUbuntuなんですが デフォルトの状態でman hoge | grep "文字" をやるとエラーか文字化けか再フォーマットしてます〜というメッセージが出て止まってしまう みたいです。 言われたとおりPAGERをcatにしてみたら普通の文字はgrepできるようになったんですが、 man ls | grep -i のように-iの行を見ようとすると man: コマンドはステータス 13 で終了しました: /usr/bin/zsoelim /tmp/zman9mAoS0 | iconv -c -f EUC-JP -t UTF-8 | /usr/bin/tbl | /usr/bin/nroff -mandoc -Tutf8 | /usr/bin/col -b -p -x | /usr/bin/pager -s このようなメッセージが出て終了してしまいます。
652 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 22:47:15 ] nroff -man manページのtroffソース | grep ... はどう?
653 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 23:51:44 ] grep -e -i
654 名前:647 mailto:sage [2007/08/29(水) 09:18:30 ] >>652 実行してみると↓のようなエラーが出てきました。 普通にmanを実行するときちんと表示されるのに、それをリダイレクトしたりすると 文字化けするあたり、どこかがおかしいのだと思います。 653さんのようにやってみたところ日本語の部分が文字化けしてることを 除けばmanの情報をgrepできるようになりました。
655 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 10:30:44 ] >>654 grepで、オプション文字列と誤解されそうなキーワード(具体的には-で始まる)を検索する場合は、 -eなどでガードする必要があります。 なんてのは、シェルスクリプトと何にも関係ないマニュアルページを読めば済むことじゃないか。 鼬害だ、このすっとこどっこい。
656 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 12:51:20 ] おまいの選択している文字コードがmanファイルの文字コードと 違うんだから最初に LANG= で指定すると幸せになれるかもな。
657 名前:647 mailto:sage [2007/08/29(水) 15:05:01 ] >>655 すいません、すっとこどっこいでしたorz >>656 ja_JP.UTF-8以外に設定するとmanが英語で表示されてしまうみたいです。 この際、英語中心で読むようにしていこうかと思います。
658 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 17:48:29 ] そうか。 ちなみに俺は euc.jp の文字コードを使っているので 普通にman manすると文字が化けるが man -P cat man | grep man で日本語の所もgrepでけたぞ。
659 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 21:33:33 ] bash並にファイル操作が簡単で普通に数値計算できる言語はないものかねえ
660 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 22:36:05 ] >>659 具体的にどんなものをイメージしている? 計算部分は別プログラムを呼ぶのじゃダメ? awkでもperlでも、寧ろいっそ、octaveでも。
661 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 10:56:27 ] もう死にそうだからダメ元で助けてくれるえろい人頼ってみる YYYYMMDDNNNN.hogeというバイナリファイルが山ほどあり、NNNN部分は連番ではなくばらばら その中身を表示させるコマンドがある。表示内容が --内容ここから ヘッダ(ファイルにより行数ランダム) 1 : YYMMDD hhmm filesize 2 : YYMMDD hhmm filesize --ここまで YYYYMMDDNNNN.hogeのファイル名をYYMMDD.hhmmにリネームする awkで頑張ってみたけどヘッダの行数が統一されてないせいでお手上げ 一つ一つ表示させてはcpでリネームしてるんだが死にそう。 空白行の次の行だけをテキストか何かに出力する方法というか書き方って無い?
662 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 11:20:04 ] >>661 sed -e '1,/^$d' -e q YYYYMMDDNNNN.hoge
663 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 11:20:56 ] 訂正 sed -e '1,/^$/d' -e q YYYYMMDDNNNN.hoge
664 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 11:23:07 ] >>662-663 thx、やってみる
665 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 20:10:59 ] A="a\ta" echo $A ってすると次のようにメタキャラクタが展開されちゃうんだけど a[タブ]a これをecho $A |コマンド で展開せずに使いたいの。 ノーミソたりなくてやり方がさっぱり!おしえてエロい人! kshつかってます。
666 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 22:29:17 ] >>665 echo '$A' | こまんど ってことか? シェルスクリプト以前の問題だと思うが。
667 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 22:39:13 ] >>665 板違い。エロイ人に聞きたいなら。 sakura01.bbspink.com/hneta/
668 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 23:14:51 ] >>665 sed 's/<tab>/\\t/g' っていうことをしたいのだろうか
669 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 23:29:15 ] echo "${A}"
670 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 23:56:37 ] >>668 どうもありがとう!それです! Winのディレクトリ表記が全部タブに変換されてこまってました。
671 名前:デフォルトの名無しさん [2007/09/21(金) 16:39:07 ] とあるお気に入りのウェブサイトで、アドレスは一定のまま、 不定期に交換される画像(例えば www.example.com/cover.jpg ) を 毎日定時にチェックし、変更があったらそれをダウンロードし、 ファイル名にその日の日付を加えて保存する、という処理をさせたいです。 どのように書けばいいんでしょうか?
672 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 17:06:57 ] >>671 curl -I --header 'If-Modified-Since: Fri, 21 Sep 2007 09:00:00 GMT' URL とかやって、HTTPステータスが 304 Not Modified かどうかを見る。
673 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 14:40:26 ] 欧米エロサイトのサンプル画像取得か?
674 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 14:49:05 ] NASAのImage of the Dayとか。
675 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:02:35 ] >>672 別にHEADする必要なくね?更新確認と取得はHTTPならワンアクションで できるわけで。
676 名前:デフォルトの名無しさん [2007/10/18(木) 22:26:18 ] 質問させてください。 main.shというシェルスクリプトがあり、 main.shの中で、sub.shを実行させています。 sub.shは、5秒くらいで処理が完了します。 その後に、last.shというシェルを実行させたいのですが、 シェルコマンドで、"○○秒待つ"といったコマンドはありますでしょうか。 環境はbashになります。よろしくお願いします。
677 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 22:33:10 ] sleep ミリ秒
678 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 22:35:13 ] そもそもsub.shは非同期なの? 終わるのを待てばいいだけの話だったりはしないんだよね?
679 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 22:37:01 ] >>676 sleep 5 あと、『シェルブリッド』 じゃなくて 『シェルブリット』 だから。 そこは絶対間違えないように。
680 名前:675 mailto:sage [2007/10/18(木) 22:44:34 ] >>677-679 ありがとうございます! >>678 cronに登録したかったので 待つコマンドが無いかと思ってました。
681 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 22:47:19 ] ふと思ったんですが、sleepコマンド使うと、 PCのリソースを全て停止してしまうとかあるんでしょうか
682 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 23:29:41 ] ない
683 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 00:19:22 ] ふと思ったんですが、この方は自分で調べるとかないんでしょうか sleepなんて基本中の基本じゃん。
684 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 01:02:09 ] main.sh ------------ #!/bin/bash bash sub.sh bash last.sh ------------ で、いいのではないかと思うのは気のせいか。
685 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 01:19:02 ] >>684 たぶん>>678 も同じ疑問を持って書いたんだと思う。
686 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 09:31:43 ] >>683 sleep というコマンドを知らなかったとき、 この情報に辿り着くために必要な検索単語ってなんだ?
687 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 13:52:26 ] シェル 秒 待つ www.google.co.jp/search?q=%E3%82%B7%E3%82%A7%E3%83%AB+%E7%A7%92+%E5%BE%85%E3%81%A4
688 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 00:00:31 ] シェルスクリプトの本くらい立ち読みでいいから流し読みしろよ。 流し読みで覚えられないなら買え。 それやった上でsleepなんぞ知らないって言うなら諦めろ。
689 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 08:04:10 ] usleep
690 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 12:16:49 ] usleepなんて無いだろw
691 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 17:44:38 ] 何怒ってんのかね 気に入らなけりゃスルーすればいいのに
692 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 19:20:58 ] >>691 オマエモナーw
693 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 19:52:12 ] usleepのuがμのつもりだったと理解したときASCIIの世界に生きる人に同情した。
694 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 20:17:49 ] おいおい そこまで意地張ったのになんでnanosleepなんだよ!! かなり天邪鬼だ
695 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 22:04:14 ] >>693 マイクロは uC という表記方法もあるよ
696 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 23:15:22 ] >>695 結局それも「字形が似てるから代用」には違いないんでしょ?
697 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 23:46:50 ] μなんてDBCSローカルな文字つかって喜んでる椰子キモイ
698 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 23:50:13 ] μ(greek small letter mu)ならいいのか
699 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 10:48:43 ] 技術系だと割と当たり前に使うけどなぁ。usecとかum、uFとか。或いは組み合わせでug/lとかも。
700 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 14:35:50 ] それだってu(ユー)にマイクロの意味があるわけじゃないだろ? あくまでμの代用であることには違いないと思うが。
701 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 17:57:36 ] 不毛だ
702 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 22:38:48 ] 習慣
703 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 00:39:35 ] bashスクリプト中で cmd echo "foo-san" ってやると echo "foo-san" foo-san って感じに、実行されるコマンドの内容が先に表示される関数って、定番なのありますか? cmd() を echo $*;eval $* にしてみたけど、" とか ' とかの処理が旨くいかない。 DOS の echo on モードみたいのでもいいかも。
704 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 00:47:46 ] >>703 set -x
705 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 00:49:12 ] echo "." |xargs -t
706 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 09:52:26 ] >704 おーなるほど、そういうコマンドがあるのかー。勉強になりました。 >705 ありがとうございます。 でも echo つかうと、ダブルクォーテーションが表示されないのが、ちょっとかな、と。
707 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 11:10:16 ] >>706 set -v
708 名前:デフォルトの名無しさん [2007/10/24(水) 21:03:29 ] 親フォルダ内でシェルスクリプトを開いて、 Folder1に移動し、ABCを実行する。 1時間おきにプロセスABCがあるかチェックする。 終了したら、親フォルダに移動しFolder2でも同じことをする というスクリプトを書いたんですけど、 whileのdoで文法エラーが出て困ってます。 #!/bin/sh for i in 1 2 do cd Folder$i nohup ./ABC & while[$isAlive -eq 1] do sleep 1h isAlive='ps -ef | grep " ABC " |\ grep -v grep | wc - |' done cd .. done
709 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:18:40 ] while[$isAlive -eq 1] while文の文法の一部ではない。 [というコマンドの最後に ] いう引数があるコマンド行(リスト)。 よって空白が必須。
710 名前:708 [2007/10/24(水) 21:31:41 ] >>709 whileのところはできました。 ありがとうございます。 今度は、forのdoがおかしいって出ました。 forのなかでwhile制御することってできないんでしょうか?
711 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:41:40 ] エラーメッセージ書いてー。 '(単一引用符)は`(逆向き単一引用符)の間違いだよな? wc - |(マイナス、スペース、縦棒) は wc -l(マイナス、エル) の間違い?
712 名前:708 [2007/10/24(水) 22:21:55 ] 10行目、doが、syntax error です。って表示されました。 逆向き単一引用符で、wc -lエルです。 失礼しました。
713 名前:708 [2007/10/24(水) 22:24:03 ] 連投すいません。 エラーは、forじゃなかったです。 whileのところでした。
714 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 23:01:32 ] もっかいきっちりコピペしろ
715 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 00:23:06 ] 俺が同じマシン使ってたらABCという名前で永久に終了しないプログラムを動かしてやる。
716 名前:708 [2007/10/25(木) 03:03:38 ] >>714 ごめんなさい。もいっかい書き直します。 これの、whileのdoで文法エラーがでます。 >>715 永久に終了しない・・・作ってほしい #!/bin/sh for i in 1 2 do cd Folder$i nohup ./ppln & while[ $isAlive -eq 1 ] do sleep 1h isAlive=`ps -ef | grep " ppln " | grep -v grep | wc -l` done cd .. done
717 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 04:58:38 ] >>716 while と [ の間にスペースが足りないのはコピペミスだよね? 最初の while のチェックの時に $isAlive が未定義。 で、 [ コマンドが引数が足りないってエラーを吐く。 だから [ コマンドに与える変数はクォートで括っておくが基本。 while [ "$isAlive" -eq 1 ] あと pgrep があれば while の処理はもっと簡単に書けるよ。
718 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 08:21:46 ] ただ、>>715 がいうように、 既に誰かが同じ名前の無関係なプロセスを走らせていたらどうする? 「永久に」っていう細かいところでただの煽りとか思わずに、本質読み取らなきゃ。
719 名前:708 [2007/10/25(木) 16:02:00 ] >>717 ご指摘通りに作り直したら動きました。修正したものを張っときます。 >>718 おっしゃるとおりです。全然見えてませんでした。 実際に、スクリプトの名前を”ABC-sc.sh”としたら、 プロセスの出力が”2”とされてしまい、うまくいきませんでした。 もうちょっと改良について考えたいと思います。 プログラミングとかLinuxは初心者で、まだまだ勉強しないといけないって感じてます。 #!/bin/sh for i in 1 2 do cd Folder$i nohup ./ABC & sleep 20 isAlive=`ps -ef | grep "ABC" | grep -v grep | wc -l` echo "$isAlive" while [ "$isAlive" -eq 1 ] do sleep 1h isAlive=`ps -ef | grep "ABC" | grep -v grep | wc -l` echo "$isAlive" done cd .. done
720 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 01:12:26 ] >>719 $! という変数は知ってる? nohup ./ABC & echo "$!" # ← ABC の PID が表示される これなら >>718 の罠にはかからないよ