トップページunix
1001コメント312KB

シェルスクリプト総合 その6

■ このスレッドは過去ログ倉庫に格納されています
0001うはwwwww2006/03/26(日) 00:56:22
シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。


□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashなので特に注意。
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)

□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
0341名無しさん@お腹いっぱい。2006/04/22(土) 23:01:13
>>340
誰もそんな話はしていないが。
0342名無しさん@お腹いっぱい。2006/04/23(日) 01:45:54
お力をお貸しください。
sh で、スクリプトを組もうとしています。
目的は、apache で、決まったユーザごとにBASIC認証をさせようとしていて、
新規のユーザが入るたびに、設定するのが面倒になったので、スクリプトを組み始めました。
取り合えずユーザ名とパスワードだけのテキストファイル(list_name)は、手動で作り
user1 passwd1
user2 passwd2

for文かwhile文で書けば終わると思っていたのですが
二次元配列?のところでうまくいきません。
ユーザ名もパスワードもバラバラに引数として利用したい。
for文だと、eval を使って、出来るんでしょうか?
while文で、shift 2 とかすればいいかなと思ったのですが、for文でのin に変わるものだわかりません。

なにかヒントだけでもよろしくお願いします。
0343名無しさん@お腹いっぱい。2006/04/23(日) 02:02:21
>>342
read の使い方を調べると幸せになれる。

while read user pass ; do
...
done < list_name

bash の read なら配列に代入する事もできるけど、
これで充分だよね?
0344名無しさん@お腹いっぱい。2006/04/23(日) 02:09:51
はい、bashはもうたくさんです。
03453422006/04/23(日) 02:13:31
>>343
御世話になりました。
幸せになれました。
0346名無しさん@お腹いっぱい。2006/04/23(日) 09:01:38
>>344
zshでも、readで配列に入れることができるが、(read -A)
するとzshも、もうたくさんですか?
0347名無しさん@お腹いっぱい。2006/04/23(日) 15:29:15
はい、zshももうたくさんです。
0348名無しさん@お腹いっぱい。2006/04/23(日) 15:41:27
配列の扱いって、bashとzshとで異なるよね。
で、配列が使えるkshでは、bashとkshは同じ。
kshがPOSIX準拠だとすると、bash方式の配列が正しくて、
zsh方式の配列は独自文法ということになる。
配列に関してはzshの方が糞。bashは正しい。
0349名無しさん@お腹いっぱい。2006/04/23(日) 15:49:45
どうでもいいが、シェルスクリプトのスレでzshの話をしてるのは何なんだ?
/bin/sh がzshのシステムなんて、無いだろ?
てことは、zshスクリプトは「わざと」書いてるんだろう。
「わざと」書く分には、/bin/shと互換性が無かろうが、そいつの責任であり
勝手じゃないのか?
0350名無しさん@お腹いっぱい。2006/04/23(日) 16:29:58
>287 >291 >292 >293 >294 >295 >297 >303 >307 >308 >309 >310

python -c 'print __import__("sys").stdin.read()' |
ruby -e 'while gets(); print $_ end' |
sh -c 'while read x;do echo $x;done' |
awk '{print}' |
perl -pe '' |
sed '' |
cat |
tr a a |
grep '' |
dd 2> /dev/null |
gzip -c | gzip -dc |
uuencode hoge | uudecode -p |
tail +1 |
vim -es -c "wq! /dev/stdout" /dev/stdin |
bash -c 'echo "`</dev/stdin`"' |
tee |
comm - /dev/null |
paste - |
cut -f 1- |
nkf -t |
perl -ple 0 |

危険!全部繋げて試したらカーネルパニクッた

0351名無しさん@お腹いっぱい。2006/04/23(日) 16:30:10
>/bin/sh がzshのシステムなんて、無いだろ?

MacOSX 10.0
0352名無しさん@お腹いっぱい。2006/04/23(日) 18:09:51
>>350
乙。w
0353名無しさん@お腹いっぱい。2006/04/23(日) 18:15:55
expectに標準入力(パイプ)で文字列を渡すにはどう記述すればいいでしょうか?
(というかそもそも可能でしょうか?)
03543532006/04/23(日) 18:28:59
質問の意図はコマンドラインに直接パスワードを与える方法は
多数見つけたのですが、
これではセキュリティ的にもろみえの状態なので避けたい、ということです。
ttp://ns1.php.gr.jp/pipermail/php-users/2003-December/019954.html
0355名無しさん@お腹いっぱい。2006/04/23(日) 18:42:42
>>354
expect `cat`
でいいんじゃない?
03563532006/04/23(日) 18:51:26
>>355
須磨祖、それはどういう意味でしょうか?
0357名無しさん@お腹いっぱい。2006/04/23(日) 23:47:19
>>356
>>355は何もわかっていないという意味です。
0358名無しさん@お腹いっぱい。2006/04/24(月) 12:25:35
>>355
できました。ありがとう。
シェルの基本文法で良かったのですね。
03593532006/04/24(月) 16:18:45
358は俺に何かうらみでもあるとですか?
03603532006/04/24(月) 23:53:15
ぜ、全然レスがないですね・・、
若干すれ違い気味なせいでしょうか
0361名無しさん@お腹いっぱい。2006/04/25(火) 02:20:38
>>360
expectもtclも門外漢だが、

gets stdin line
or
set line [ gets stdin ]

とかじゃいかんのか?
0362名無しさん@お腹いっぱい。2006/04/25(火) 09:13:53
>>360
355 で解決しないの?
command substitution って知ってる?
03633532006/04/25(火) 10:21:30
>>361
神サンクス!
gets stdin line でアメ語をぐぐったら例が結構見つかりました。
ただ
gets stdin old_pass
gets stdin new_pass
としている例があったんですが、2つ標準出力で渡すのはどうすればいいんでしょうか?
echo "old_pass" | echo "new_pass" | ./password.exp
とかやってみたけどもちろん無理ですた
gets stdin new_pass のみなら上手くいきました。

>>362
357氏のレスから意味のないレスだと思ってマスタ、
神レスだったのですね。
コマンド置換ってやつですね、調べてみましたが、基本的な使い方は
なんとなく理解したのですが、
この場合はいまいち使い方がわからんとです orz
0364名無しさん@お腹いっぱい。2006/04/26(水) 00:33:20
結局パスワードはスクリプトを実行時に手で入れるんでしょ?
だったら expect 使う意味があまり無いと思うんだが。
0365名無しさん@お腹いっぱい。2006/04/26(水) 01:25:57
ファイルの内容を指定した行番号から出力させるようなコマンドってあります?
0366名無しさん@お腹いっぱい。2006/04/26(水) 01:31:17
すいません、分かりました
0367名無しさん@お腹いっぱい。2006/04/26(水) 04:18:44
>>362
セキュリティ的にモロ見えイクナイってのが発端なのに、
>>355で解決するって本気で思ってんの?
0368名無しさん@お腹いっぱい。2006/04/27(木) 21:08:48
Bシェルの勉強始めたばかりでくだらない質問ならすいません。
スクリプトを書いているんですが、
引数を渡さないかぎり入力待機状態にして次の行にいかない様に
するようなコマンドはありますでしょうか?
教えてくださいm(。_。;)m
0369名無しさん@お腹いっぱい。2006/04/27(木) 21:53:37
>>368
引数という用語がおかしいようだが、
キー入力待ちにしながらシェルスクリプトを1行ずつ実行させたいということか?
だったら、途中に、
read hoge
というコマンドをはさんどけ。
[Enter]を入力しないと次に進まなくなる。
0370名無しさん@お腹いっぱい。2006/04/27(木) 23:09:09
Bシェルの引数の限界値ってどう求めるんでしょうか?
Cシェルは1706が引数の制限なようですがBシェルに関しては
ARG_MAXを限界値に引数に渡されるバイト数+環境との記述
をみたのだが同じ環境なら引数に渡されるバイト数は固定でないのか?
例えばls * | wc -l とかでやると(ファイル名+空白分)*ファイル数のバイト数は
ファイル数が多いほど少なくなるのですが・・・。
詳しい方教えてください。
0371名無しさん@お腹いっぱい。2006/04/27(木) 23:15:14
日本語でおk
0372名無しさん@お腹いっぱい。2006/04/27(木) 23:20:43
>>370
引数の個数じゃなくて、
全引数の文字列のバイト数+環境変数のバイト数(変数名も含む)
で決まってるはず。
手元の環境で試してみると、
合計128KBみたいだった。
0373名無しさん@お腹いっぱい。2006/04/27(木) 23:35:01
>372
レスサンクス。
書き方がわるかったのかな。
全引数の文字列のバイト数+環境変数のバイト数(変数名も含む)
はオレも分かってはいるんだが
同じマシン、同じコマンドでやれば環境変数のバイト数は同じだよね?
つまり全引数のバイト数は固定だと思ってるのだが・・・。
ls * | wc -lを例えば%10dの10文字のファイル名が入ったフォルダで
実行した場合の限界ファイル数と200文字のファイル名が入った
フォルダでの限界ファイル数を取得したとき、文字数*ファイル数で出した数
がかなり違ってくるのでどうしてでしょうか?と聞きたい。
一応空白を考慮しても計算しているがそれでも違ってくる・・・。
0374名無しさん@お腹いっぱい。2006/04/28(金) 01:56:55
試すのめんどくさいから、どう違うのかちゃんと書けよ
0375名無しさん@お腹いっぱい。2006/04/28(金) 09:37:54
限界ファィル数云々付近の意味がわからんので、具体的に書け
0376名無しさん@お腹いっぱい。2006/04/28(金) 19:03:33
%30dで作成した30文字のファイル名の場合、29800ファイル
でls * | wc -lが引数が長すぎますとのエラーを返して
で%200dで作成した200文字のファイル名の場合5000ファイルで
ls * | wc -lが引数が長すぎますとのエラーを返した。
ここで空白を考慮してファイル名を31バイトと201バイトだと
考えると31*29800と201*5000では100Kぐらい差が出てくる。
全引数の文字列のバイト数だと考えるとなんでこんなに差が出るのと謎に思えたので教えてほしい
0377名無しさん@お腹いっぱい。2006/05/01(月) 22:16:01
>>376
「引数が長すぎます」は E2BIG (システムコールからのエラー)で出るらしい。Solarisでは
http://cvs.opensolaris.org/source/xref/on/usr/src/cmd/sh/service.c#315

その計算では argvの分が入ってないのでざっと計算すると、

31 byte x 29800 + sizeof(char *) x 29800 = 1043000
201 byte x 5000 + sizeof(char *) x 5000 = 1025000

これぐらいの差なら誤差程度では?
0378名無しさん@お腹いっぱい。2006/05/04(木) 11:42:41
行ごとに対象ファイルの絶対パスが載っているファイルがあります。
対象ファイルの中で hoge という文字列が含まれている
ファイルを表示させたいのですが、簡単な方法はないでしょうか?
grep とリダイレクトあたりを使用することになると思うのですが。
0379名無しさん@お腹いっぱい。2006/05/04(木) 12:47:59
>>378

xargs grep -l hoge < ファイル
0380名無しさん@お腹いっぱい。2006/05/04(木) 17:39:58
今、入門UNIXシェルプログラミングを読んでるところなのですが、212ページのところのコードで
応答待ち状態にタイムアウトを設定する、というのがあります
10秒たっても入力がないときには自動で抜けるようにする、というスクリプトです

trap ":" 2
(sleep 10; kill -2 $$) &
echo "Would you like to ... [y/n]? \c"
read ANSWER
if kill -0 $! 2>/dev/null; then
kill $!
fi
case "$ANSWER" in
y | yes ) FLAG=TRUE ;;
* ) FLAG=FALSE ;;
esac
trap 2

CentOSというLinuxのディストリで標準のbash使ってるんですが
サブシェルからの割り込みをうまく受け付けてくれないようで、自動で抜けてくれません

Solaris環境では意図したとおりに動きました

Linuxが悪いのか、bashが悪いのか、スクリプトが悪いだけなのかよくわかりませんが
うまく動かすにはどうすればいいでしょうか?
0381名無しさん@お腹いっぱい。2006/05/04(木) 19:27:48
bashが変だと思うんなら、ashやkshつかえばいいんじゃ。
0382名無しさん@お腹いっぱい。2006/05/04(木) 20:22:29
>378
こんな感じ? やっつけだけど。

#!/bin/sh
for f in `cat ファイル`
do
if [ `basename $f | grep hoge` ] ; then
echo $f
fi
done
0383名無しさん@お腹いっぱい。2006/05/04(木) 21:07:41
>>381
たしかに、ash使ってみたらうまくいきました
UNIX間で互換性をもたせるにはどうすればいいのかな、と考えてたのですが
とりあえずLinuxの標準がbashになってることを恨め、って感じでしょうか・・・
0384名無しさん@お腹いっぱい。2006/05/04(木) 23:11:37
>>383
それならkshに統一するとか?
Bourne shellよりわかりやすくスマートにかける場面も多いし。

いっちゃうとPerlでもいいとおもう。
0385名無しさん@お腹いっぱい。2006/05/05(金) 02:48:10
そう、やがてはスクリプト言語になってしまうんだよね。でも
ここはシェルスクリプトのスレッド。あくまで。
0386名無しさん@お腹いっぱい。2006/05/05(金) 12:53:54
ttp://centossrv.com/postfix-pflogsumm.shtml
ここのpflogsumm_reportってシェルスクリプト参考にさせて
もらったんだけど、
直接たたくと上手く動作するものの
cronで動作させるとメール本文が空っぽ。
だれか想像できる原因教えてぷりーず
0387名無しさん@お腹いっぱい。2006/05/05(金) 13:26:42
mktemp のパスが通ってない。
0388名無しさん@お腹いっぱい。2006/05/05(金) 16:03:41
>>386
そういう場合はshellの引数に-xをつければいいよー。

そこだと1行目を
#!/bin/bash -x
にするとか。
0389名無しさん@お腹いっぱい。2006/05/05(金) 17:19:17
>>386
crontab に必要なパスを記述していない可能性が高い。
たとえば >>387 とか。
0390名無しさん@お腹いっぱい。2006/05/10(水) 22:03:55
Linuxで書いたスクリプトUnixで動かしたらエラー。
Unixの方がexpr substrに対応してなかった。

原因わかるまで1時間以上かかったぜ。
0391名無しさん@お腹いっぱい。2006/05/10(水) 22:40:44
>>390
エラーが出るだけましと思えば、、
0392名無しさん@お腹いっぱい。2006/05/11(木) 01:45:33
>>390
参考までに両方の expr のバージョンを教えてくれ。
0393名無しさん@お腹いっぱい。2006/05/11(木) 06:38:10
>>392
管理者の人に頼まれてLinuxで書いたからもうUnixの方は調べらんね。
実行できないって言われてmanでexpr調べたらsubstrはx86系のみ対応って書いてあった。んで、聞いたらたぶんx86系だといってたので原因わからず格闘。随分時間たっあとunameでシステムみたらSunの文字。ネットで調べたら他のCPUってオチ・・・。
0394名無しさん@お腹いっぱい。2006/05/11(木) 15:11:04
UNIXとか他のCPUとかあいまいすぎ
察するにお前の知識が足らんかっただけだろう
0395名無しさん@お腹いっぱい。2006/05/11(木) 22:23:08
>>394
Vine3.2(Pen4)で書いてSunOS(SPARC)で実行した。

3日前に初シェルスクリプト書いた位なので・・・知識はね
0396名無しさん@お腹いっぱい。2006/05/12(金) 02:54:32
適当にググってみたが、length substr index match 演算子が
GNU 拡張みたいだな。
0397名無しさん@お腹いっぱい。2006/05/12(金) 10:02:57
sh/bash って、子シェルにシェル変数を引き継ぐことできましたっけ?
0398名無しさん@お腹いっぱい。2006/05/12(金) 10:42:01
>>397
できない。
0399名無しさん@お腹いっぱい。2006/05/12(金) 11:00:06
>>398 THX です。
必要なものだけ環境変数に export することにします。
同じ種類のシェルなら内部でなんかうまいことパイプとか
つくって引き継いでくれるのかな?
とか都合いいこと考えてました。
0400名無しさん@お腹いっぱい。2006/05/13(土) 00:13:13
ShUnit使ってる人いる?

http://shunit.sourceforge.net/

ドキュメントがまったく無いんだけど
0401名無しさん@お腹いっぱい。2006/05/13(土) 06:48:50
>>400
シェルスクリプトのテストツール?なのかこれ?

今ソースを眺めてるけど、なんか関数が
たくさん定義されてるな。
今は眠いから処理を追いかけられねーや。
0402名無しさん@お腹いっぱい。2006/05/14(日) 04:13:00
bash上で

5 だったら 0005
55 だったら 0055
555 だったら 0555
5555 だったらそのままの 5555

というように数字1〜4桁までのファイル名を0を使って4桁に揃えたいのですが

for 名前 in * ; do
桁数=${#名前}
[ $桁数 = 1 ] && mv $名前 000$名前
[ $桁数 = 2 ] && mv $名前 00$名前
[ $桁数 = 3 ] && mv $名前 0$名前
done

こんなのしか思い浮かびません。もっとスマートで汎用的な感じにできませんでしょうか?
0403ヽ(´ー`)ノ ◆.ogCuANUcE 2006/05/14(日) 05:05:53
printf %04d 5
# -> 0005

printf %04d 55
# -> 0055

printf %04d 555
# -> 0555

printf %04d 5555
# -> 5555

printf %04d 55555
# -> 55555
0404名無しさん@お腹いっぱい。2006/05/14(日) 09:15:04
aa=000055; echo ${aa:$((-4)):4}

0055
0405名無しさん@お腹いっぱい。2006/05/14(日) 12:13:29
bashと限定している馬鹿には答える必要はないかもしれないが。

case "$x" in
?) y=000$x ;;
??) y=00$x ;;
???) y=0$x ;;
????) y=$x ;;
*) y=$x ;;
esac

なんて方法もある。
普通なら>>403を使うけど、数値しか使えないのでこういう小細工も使うことがある。
0406名無しさん@お腹いっぱい。2006/05/14(日) 13:36:09
>>405
それ自体は悪くはないんだけど、
仕事でそういうのの塊のコードがあって泣きそうになったことある。

シェルスクリプトで日付計算とかね。アホかっちゅーの。
0407名無しさん@お腹いっぱい。2006/05/14(日) 13:56:39
このスレの>>1を読めと言ってやれ。

とはいえ、「任意の日からN日後の日付」「任意の日どうしの間隔」
「任意の日の曜日」あたりを調べるのは確かに頭痛いな。
GNU date, env TZ=... dateを使うのが定番だろうけど、どっちもイマイチな気がする。
修正ユリウス日をうまく使ってすっぱりと実装できそうなんだが。
04084072006/05/14(日) 15:03:08
とりあえず作ってみた。bc/dcでやるべきだったか…
bash厨は$(())に置き換えたいだろうが、自分のマシンで勝手にやってくれ。

to_mjd() {
if [ "$2" -lt 3 ]; then
yy=`expr "$1" - 1`; mm=`expr "$2" + 12`; dd=$3
else
yy="$1"; mm="$2"; dd=$3
fi
expr $yy \* 1461 / 4 + $yy / 400 - $yy / 100 + \( 3059 \* $mm - 6118 \) / 100 + $dd - 678912
}
dayofweek() {
# Sun=0, Mon=1, Tue=2, Wed=3, Thu=4, Fri=5, Sat=6
expr \( "$1" + 3 \) % 7
}
from_mjd() {
yy=`expr \( $mjd \* 100 - 1507820 \) / 36525`
m2=`expr $yy \* 1461 / 4`
mm=`expr \( \( $mjd - $m2 \) \* 10000 - 149561000 \) / 306001`
d2=`expr $mm \* 306001 / 10000`
dd=`expr $mjd - 14956 - $m2 - $d2`
if [ $mm -gt 13 ]; then
yy=`expr $yy + 1901`; mm=`expr $mm - 13`
else
yy=`expr $yy + 1900`; mm=`expr $mm - 1`
fi
echo "$yy $mm $dd"
}
mjd=`to_mjd 2004 1 1`
echo "mjd: $mjd"# => 53005
echo "dayofweek: `dayofweek $mjd`"# => 4 (Thu)
echo "gregorian: `from_mjd $mjd`"# => 2004 1 1
04094022006/05/14(日) 16:45:14
ありがとうございましあた。
printf便利ですね。
caseも勉強になりました
エロ画像の生理に使います。
0410名無しさん@お腹いっぱい。2006/05/14(日) 18:21:33
>>408
どうでもいいことだが mjd って何の略?
「マジで」としか変換できないバカに教えてくれ。
0411名無しさん@お腹いっぱい。2006/05/14(日) 18:22:01
>>409
だったらrenameの使い方も覚えとけ。
0412名無しさん@お腹いっぱい。2006/05/14(日) 18:23:55
検索一発
Modified Julian Day
04134072006/05/14(日) 22:06:16
あうあう、from_mjdの一行目に"mjd=$1"ってのが必要なのでご注意を。
行数制限にひっかかったので、いろいろやってるうちに消してしまった… スマヌ
0414名無しさん@お腹いっぱい。2006/05/14(日) 22:32:07
>>411
renameコマンドは、同名の別物コマンドが少なくとも2種類以上あって、
使い方も違うので、どのrenameのことを言ってるのか明示すること。
で、OSによって使えるかどうかわからないrenameは覚える必要なし。
0415名無しさん@お腹いっぱい。2006/05/14(日) 22:34:57
>>412
マジで?!

いや、ありがと。
0416名無しさん@お腹いっぱい。2006/05/15(月) 16:39:35
named や httpd なんかが動作してるか(死んでないか)確認できる
シェルスクリプトきぼんぬ!
0417名無しさん@お腹いっぱい。2006/05/15(月) 17:09:26
pgrep named
0418名無しさん@お腹いっぱい。2006/05/15(月) 17:16:14
つrndc apachectl pgrep
0419名無しさん@お腹いっぱい。2006/05/15(月) 18:48:14
shell script じゃないじゃん。Mac OS X ではmake しても動かないし....

ps agx | grep named

つうか、rc か lanuchctl で生きているかどうか確認せずに殺すことが多い。
0420名無しさん@お腹いっぱい。2006/05/15(月) 19:12:39
grep使うならせめて
ps -ef | grep [n]amed
ps ax | grep [/]named
とかしてほしいす。
# 商用Unixにも入ってるようなpgrepがOSXに無いのはオドロキ
0421名無しさん@お腹いっぱい。2006/05/15(月) 19:32:10
やっぱ、
ps `cat /var/run/named.pid`
だろ。
pgrepはまだ歴史が浅井。
0422名無しさん@お腹いっぱい。2006/05/15(月) 21:38:44
>>421
そういうのってときどき見るけど
突然死してpidが再利用されてしまっている可能性は0とみなすの?
0423名無しさん@お腹いっぱい。2006/05/15(月) 23:29:44
PDP-11の時代ならまだしも今なら最低でも31bitあるわけだし、
一巡する前に気づかないのは別の意味で問題な気が。
0424名無しさん@お腹いっぱい。2006/05/15(月) 23:41:00
俺のマシンはPID_MAXが99999な件。
PDP時代ならこれだけの桁数まわすのに相当時間が
かかるからよかっただろうが、
今だからこそ再利用されてしまう可能性があるんじゃないか?
0425名無しさん@お腹いっぱい。2006/05/15(月) 23:47:16
>>420
FreeBSD ベースだからじゃね?
4.x は pgrep を ports で入れないといけなかった記憶がある。
0426名無しさん@お腹いっぱい。2006/05/15(月) 23:50:20
流量の多い qmail なメールサーバだと数時間で1周するな。
04274162006/05/15(月) 23:56:14
みなさんサンクスコ
でさらにあふぉな質問でスマソなんですが、
プロセスが死んでる場合(PIDが存在しない)は
メール、みたいな分岐処理をするにはどうすればよかとですか?
0428名無しさん@お腹いっぱい。2006/05/16(火) 00:57:56
>>427
if "プロセスが死んでると判定するコマンド"
then "メール送信用のコマンド"
fi
04294162006/05/16(火) 09:12:54
「プロセスが死んでると判定するコマンド」
は何になるのでしょうか?
pgrep named
はあくまで生きているプロセスを調べるためのコマンドなので
これでは無いですよね?
0430名無しさん@お腹いっぱい。2006/05/16(火) 11:44:04
そのプロセスと同じ uid か、あるいは root 権限で、
if kill -0 プロセスID 2>/dev/null; then
  生きてる
else
  死んでる
fi
0431名無しさん@お腹いっぱい。2006/05/16(火) 12:04:29
>>429
pgrepでもできる。死んでいる(存在しない)プロセスなら、
終了ステータスで偽を返す。

if pgrep named 2> /dev/null; then
:
else
echo 'namedが死んでるよ' | mail omae
fi
0432名無しさん@お腹いっぱい。2006/05/17(水) 17:30:19
すみません、とても素人な質問させてください。
リナックスザウルスの活用の幅を広げようと思ってます。

UNIXシェルスクリプトで、ライフゲームや、HIT&BROW(四桁数字当て)ゲームは
作ることができますか?
0433名無しさん@お腹いっぱい。2006/05/17(水) 17:58:59
職場の管理者が、「もうcsh系は不要」と言って削除されてしまいました。
ログインシェルをtcshにしていた人は強制zsh移行。
そこで、自宅からtcshをフロッピーに入れて ~/bin/tcshに突っ込みましたが、
chshでログインシェルが変更できません。あと、いろいろいじってるうちに
ログインできなくなってしまいました。内容が内容だけに、
管理者には相談できません。どうすればいいでしょうか?
0434名無しさん@お腹いっぱい。2006/05/17(水) 18:10:06
おとなしく懺悔
0435名無しさん@お腹いっぱい。2006/05/17(水) 18:53:24
>>432
できなくは無いと思うが余計な苦労を強いられるだろう。
そういう挑戦に興味が無ければ、より高機能なもの(Perlなど)を薦める。

>>433
> 管理者が削除されてしまいました
ガクガクブルブル
0436名無しさん@お腹いっぱい。2006/05/17(水) 20:07:13
>>435
> >>433
> > 管理者が削除されてしまいました
ヒント:尊敬
0437名無しさん@お腹いっぱい。2006/05/17(水) 23:10:52
僕も、tcsh 削除させようかな。zsh 使うのには、どうしようもない理由が必要だろうし。

function と **/*.c だけでも、zsh にして良かったと思うよ。つうか、なんで、いままでtcshなんか使っていたんだろうと反省中。
0438名無しさん@お腹いっぱい。2006/05/17(水) 23:24:44
zshって、シェルスクリプトスレで延々スレ違いのインタラクティブシェルの話をする馬鹿が
使うシェルってイメージがあるから損してるよな。かわいそう。
0439名無しさん@お腹いっぱい。2006/05/18(木) 03:33:06
それはむやみにフェラーリのるあほな成金がいるから
フェラーリのイメージが成金趣味っぽくなるのと同じだよ。
0440精進2006/05/18(木) 12:18:31
【労働環境】営業担当者が「SEに足りないと思うスキル」とは [06/05/16]
ttp://news18.2ch.net/test/read.cgi/bizplus/1147877411/-100

 「もっと顧客から課題を聞き出す力があればなあ」「専門知識を生かして積極的に提案して
もらえると助かるのだが」---。

 営業担当者がITに関する商談で客先を訪問した際に、同行したSEに対してこんな不満や要望を
抱いている。顧客に対して「何をすればいいのでしょうか」と“御用聞き”に徹して提案しようと
しないSEや、顧客と積極的にコミュニケーションを図ろうとしないSEに対して、営業担当者は
もどかしい思いをしているのだ。

 営業担当者がSEに抱く不満は、SEに対する期待の裏返しでもある。そんな不満や期待が込め
られた、営業担当者からSEに対するコメントをいくつかを紹介しよう。

「お客様の目の前で“それはできません”と即答しないでほしい」
「お客様を満足させていくという顧客指向を持ってほしい」
「指示・依頼を待つだけでなく、自分で考え積極的に提案してほしい」
■ このスレッドは過去ログ倉庫に格納されています