[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 02/10 13:03 / Filesize : 248 KB / Number-of Response : 977
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト相談室



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 の罠にはかからないよ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<248KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef