シェルスクリプト総合 その2
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001名無しさん@お腹いっぱい。
2005/04/17(日) 00:17:17まずは注意点、リンク、地鎮祭など(>>1-10くらい)をご覧ください。
□前スレや過去スレ:
シェルスクリプト総合 その1
http://pc8.2ch.net/test/read.cgi/unix/1101820646/
☆シェルスクリプトを勉強するにあたって☆
http://pc5.2ch.net/test/read.cgi/unix/989659936/
便利なシェルスクリプト見せろ
http://pc5.2ch.net/test/read.cgi/unix/996949546/
【貝】第1回シェル講座【殻】
http://fun.kz/test/read.cgi/unix/1016372780/
□関連スレ:
sed
http://pc8.2ch.net/test/read.cgi/unix/1085730992/
おまえら! shell は何を使っているんですか?
http://pc5.2ch.net/test/read.cgi/unix/1012330865/
Eshell の使い方とか設定とか【Emacs Shell、Lisp】
http://pc8.2ch.net/test/read.cgi/unix/1102921590/
□他板の関連スレ:
Macでシェルスクリプト総合 Part 1
http://pc7.2ch.net/test/read.cgi/mac/1105074933/
【Shell】どのシェル使ってる?【Script】
http://pc8.2ch.net/test/read.cgi/linux/1067330754/
0827名無しさん@お腹いっぱい。
2005/08/05(金) 02:35:580828名無しさん@お腹いっぱい。
2005/08/05(金) 02:54:40そんなぁ・・・
そこをなんとか・・・
0829名無しさん@お腹いっぱい。
2005/08/05(金) 03:15:53だだこねる相手はママだけにしとけよ。
次の方、どうぞ↓
0830名無しさん@お腹いっぱい。
2005/08/05(金) 07:43:520831名無しさん@お腹いっぱい。
2005/08/05(金) 07:47:09シス管が居て、迷惑してるのですが、
これを拒否するにはどうしたらいいでしょうか?
ちなみに、root権限で上書きコピーしてくるため、
一般ユーザーのパーミッション設定では防げません。
あと、.emacsだけじゃなく、$HOME/.profile
$HOME/.xinitrcとかもコピーで潰されるので大迷惑です。
0832名無しさん@お腹いっぱい。
2005/08/05(金) 08:17:230833名無しさん@お腹いっぱい。
2005/08/05(金) 08:34:38#!/bin/sh
cat <<EOF | mail root
From: $USER
あなたのホスト管理はクソです。
いますぐ.emacsをroot権限で上書きするというアホな行為をやめてください。
EOF
0834名無しさん@お腹いっぱい。
2005/08/05(金) 08:53:27自分の.emacs を、.my-emacs とかにかえて、
シェルのalias を使って、
alias emacs="emacs -q -l .my-emacs"
とかしとく。
.profile の方も、同じような考え方で、
bash --norc --noprofile の後、自分のprofileを読み込むようなscriptを書いといて、
毎回、loginし直す。(面倒だけど)
zsh 、ksh、tcsh等、対話的に使うshellを他のにするとかでもいいんじゃん?
.xinitrcは、
export XINITRC=$HOME/.my-xinitrc
を設定しといて、startx。
で、どうよ。
>>833 みたく、管理者に一言いうのが早いかもしんないけど。
0835名無しさん@お腹いっぱい。
2005/08/05(金) 11:18:520836名無しさん@お腹いっぱい。
2005/08/05(金) 11:36:49ログインシェルは何か。自分の権限でcronやchshは使えるか。
などによっていろいろと対抗手段は考えられるけど、情報不足。
0837名無しさん@お腹いっぱい。
2005/08/05(金) 11:41:59こんなに釣りにつき合ってくれてありがとう。
0838名無しさん@お腹いっぱい。
2005/08/05(金) 11:48:340839名無しさん@お腹いっぱい。
2005/08/05(金) 13:03:52∧_(Д`; )
( ・∀・)玉 つ
(っ ≡つて ヽ チーン!
して_)_ノw (_)
玉を砕くと書いて「玉砕」と言う。
0840名無しさん@お腹いっぱい。
2005/08/05(金) 13:12:340841名無しさん@お腹いっぱい。
2005/08/05(金) 13:32:33ふつー、rm -f してから cpするだろうから効果なし。
0842名無しさん@お腹いっぱい。
2005/08/05(金) 16:40:350843名無しさん@お腹いっぱい。
2005/08/05(金) 17:32:09の3の書き込みなんですが、意味は分かるんですが
なぜ {, という書き方なんでしょうか。
そのままぐぐってみてもヒットしないので
展開の書式を解説しているサイトを教えてください。
0844名無しさん@お腹いっぱい。
2005/08/05(金) 17:35:5513.6 Brace Expansion
====================
A string of the form `FOO{XX,YY,ZZ}BAR' is expanded to the individual
words `FOOXXBAR', `FOOYYBAR' and `FOOZZBAR'. Left-to-right order is
preserved. This construct may be nested. Commas may be quoted in
order to include them literally in a word.
0845名無しさん@お腹いっぱい。
2005/08/05(金) 17:42:34>>843 は、空文字列のカンマに付いての質問と思われ。
ブレース展開自体の質問じゃないよ。
0846名無しさん@お腹いっぱい。
2005/08/05(金) 17:42:54(゚Д゚)ハァ?
0847名無しさん@お腹いっぱい。
2005/08/05(金) 17:43:46自分の理解力不足を棚にあげて、人を批判とはおめでたい人ですね. :-)
0848名無しさん@お腹いっぱい。
2005/08/05(金) 17:44:25> ブレース展開自体の質問じゃないよ。
>>843
> 展開の書式を解説しているサイトを教えてください。
0849名無しさん@お腹いっぱい。
2005/08/05(金) 17:44:57英語が読めないなら、エキサイト翻訳使えよ。
0850名無しさん@お腹いっぱい。
2005/08/05(金) 17:52:13ネスティング可能なことと、
カンマ自体を普通の文字として使うならクォートしろということだけ。
元質問のコマンドラインでは左から右への順序は関係ないし、
空文字列のカンマも許されることは >>844 には書かれていない。
なので、 >>844 は早とちりの外し回答だと思う。
0851名無しさん@お腹いっぱい。
2005/08/05(金) 18:09:45百年謝罪しろ!!!!!!!!!!!!!!!!!!!!!!!!!!
0852名無しさん@お腹いっぱい。
2005/08/05(金) 20:29:30> 空文字列のカンマも許されることは >>844 には書かれていない。
禁止されていないということは許されているということだろ。
0853名無しさん@お腹いっぱい。
2005/08/05(金) 20:38:18元質問は「 {, とは何か?」と聞いているのだから、
「それはブレース展開の最初の文字列が空文字列になっているものだ」
と答えるのが的確。
>>850 はマトはずれ。
0855名無しさん@お腹いっぱい。
2005/08/05(金) 21:11:43今/home/.vimrcがあるとして、ユーザディレクトリにそれぞれコピーするには
どう書けばいいですか?所有者ももそれぞれのユーザに設定できますか?
0856名無しさん@お腹いっぱい。
2005/08/05(金) 21:12:300857名無しさん@お腹いっぱい。
2005/08/05(金) 21:19:51シス管が居て、迷惑してるのですが、
これを拒否するにはどうしたらいいでしょうか?
ちなみに、root権限で上書きコピーしてくるため、
一般ユーザーのパーミッション設定では防げません。
あと、.vimrcだけじゃなく、$HOME/.xsessionや
$HOME/.cannaとかもコピーで潰されるので大迷惑です。
0858名無しさん@お腹いっぱい。
2005/08/05(金) 21:24:000859名無しさん@お腹いっぱい。
2005/08/05(金) 21:26:37コミュニケーション能力を磨くといいよ。
0860名無しさん@お腹いっぱい。
2005/08/05(金) 21:34:21コミュニケーション能力じゃなくて、
技術的に回避する方法はありませんか?
上司に言っても、
「シス管は彼に任せているから、彼の方針に従ってくれ」
の一点張りで話が進みません。
0861名無しさん@お腹いっぱい。
2005/08/05(金) 21:39:23> >>859
> 技術的に回避する方法はありませんか?
あるけど、
> 「シス管は彼に任せているから、彼の方針に従ってくれ」
その彼とコミニュケーションはとったの?
0862名無しさん@お腹いっぱい。
2005/08/05(金) 21:45:480863名無しさん@お腹いっぱい。
2005/08/05(金) 21:46:34だれも君がどう感じたかなんて聞いていないよ。
0864名無しさん@お腹いっぱい。
2005/08/05(金) 21:52:54もちろん、とったよ。
「これはシステム管理上必要なことだから」
で話は進まず。
0865名無しさん@お腹いっぱい。
2005/08/05(金) 21:56:36>>861
$HOME/.xsession の場合は回避するの難しくないか?
0866名無しさん@お腹いっぱい。
2005/08/05(金) 22:04:22,. '´ _ -−ニ二二`ヽ、
/ / _,.−'⌒ヽ,ノ``'ミ,、
,.' / / ,,イ゙\ /入、ヾ,
. / / // -‐''"_ ヽ l l′/`_''l}
' / ,.イii/ /∠´ `ヾ' l lレ''´ ヾ
/ ,.' ii/u i{,_,, ゚ }! l li{,_,. ゚ }
. / /ii i/u uヾく,_,ノ′ l lゞi-rイ
,' /-、 i| u ' ' ` ,__〉〉 |
. /l 「ヾ'i| ,.r‐ `'U'U_,ィ}|
/ | ー}.l| /,r 'T"丁 ̄| ̄ | l|'|
}i iト、}( l! ,イ |__, ⊥ _|__,l|.ト、
`i iiiハ `| i l_/ _,ノノ|| \
. }iij. |. l |Y/ ‐┴''" ||\ \
゙l! | l|. 仁 _,__ || \ \
/ | |l lニレ'´ `ヾ'、 || \ \
/ |. |ヽ 「]、 ヾ>、|| \
/ .| |. ヽ`「ヽ }H|\
| | ヽ`「ヽ、、,__,,ノj‐|| ` ー─
u | | \`'〔`'T''''''T´ ,ノ|
| | \ ` ̄ ̄ ̄ /
| | `−──‐′
0867名無しさん@お腹いっぱい。
2005/08/05(金) 22:05:00.xsession って #! みてくれたっけ?
0868名無しさん@お腹いっぱい。
2005/08/05(金) 22:35:33見るかどうかは、/usr/X11R6/lib/X11/xdm/Xsession に
どう書いてあるかによって変わる。デフォルト状態の
Xsessionでも、Xのバージョンによって違ったと思う。
というか、root管理者が /usr/X11R6/lib/X11/xdm/Xsession
を編集して、そもそも$HOME/.xsessionを参照しないようにされてしまうと
一巻の終り。それに気づかない程度のアホ管理者と想像するが・・
0869843
2005/08/06(土) 00:40:56空文字列という意味なんですね
ありがとうございました
0870名無しさん@お腹いっぱい。
2005/08/06(土) 13:29:380871
2005/08/07(日) 12:53:34そのホストとは別に、LinuxなりBSDなりマシン立ち上げて、
そっちの環境で作業すれば〜
0872名無しさん@お腹いっぱい。
2005/08/07(日) 13:12:15これでなんで最後のSUMがゼロになってしまうんでしょうか?
0873名無しさん@お腹いっぱい。
2005/08/07(日) 13:17:40やりたいこと自体はこれでOKでした。
0874名無しさん@お腹いっぱい。
2005/08/07(日) 13:18:26パイプでwhileにつないだ場合、
この部分はさらに別シェルで実行されるから
その次のセミコロン以降の変数には反映されない。
0875名無しさん@お腹いっぱい。
2005/08/07(日) 13:22:17>>454
0876名無しさん@お腹いっぱい。
2005/08/07(日) 13:39:50どうするのがいいんでしょうか??
0877名無しさん@お腹いっぱい。
2005/08/07(日) 13:48:27>>455
0878名無しさん@お腹いっぱい。
2005/08/07(日) 13:53:01ありがとうございます。これでなんで上手くいくのか分りませんがとにかくそういうもんだと思っておきます。
0879名無しさん@お腹いっぱい。
2005/08/07(日) 16:11:32シェルによって違う。
bourneとbashはパイプからだとサブシェルになる。
kornとzshはパイプからでもサブシェルにならない。
0880名無しさん@お腹いっぱい。
2005/08/08(月) 23:29:21読み込む処理がうまく行きません。
外側のループが処理されずに抜けてしまいます。
(個人的な推測では内側のループで外側のカーソルも移動している気がします)
どなたか、対処の方法を教えてくだされ。
ソースはこんな感じです。
function funcA
{
while read LINEB
do
処理あれこれ
done <$LINEB
}
while read LINE
do
funcA
done <$FILEA
0881名無しさん@お腹いっぱい。
2005/08/08(月) 23:35:21ヒント:リダイレクト、ファイル記述子
0882名無しさん@お腹いっぱい。
2005/08/08(月) 23:38:460883880
2005/08/08(月) 23:42:58もうちょっと、ヒントをください。
>>882さん
先ほどのソースは間違ってますが、現実は「FILEB」です。
ご指摘ありがとうございます。
0884名無しさん@お腹いっぱい。
2005/08/09(火) 00:04:592 FILEB=$0
3 CNT=0
4 function funcA
5 {
6 while read LINEB
7 do
8 echo $LINEB
9 done <$1
10 }
11 while read LINE
12 do
13 echo ------$CNT------
14 funcA $FILEB
15 CNT=`expr $CNT + 1`
16 done <$0
この例だと、同じファイルを読み込んでるけど、ちゃんと動くがなぁ。
0885880
2005/08/09(火) 00:34:04ほ、本当ですか?
自宅にはUNIX環境がないため、確かめることはできないのですが…
なんでだろうか。。
0886名無しさん@お腹いっぱい。
2005/08/09(火) 06:20:17どうすればいいでしょうか?
0887名無しさん@お腹いっぱい。
2005/08/09(火) 06:35:34echo $$ > pid
念のため言っておくけど、複数個起動すれば当然"pid"というファイルの
内容は書き直されちゃうからね。
0888名無しさん@お腹いっぱい。
2005/08/09(火) 07:14:42あざーっす!
参考になります。
ところで、やはりスクリプト内で別のスクリプトを読んでいる場合は
実プロセスIDではなくてスクリプトを実行しているプロセスのIDになってしまいますよね・・
0889名無しさん@お腹いっぱい。
2005/08/09(火) 07:19:22スクリプトを実行してるプロセスのIDになりました。
apacheとかはどうやって取得しているんでしょうか・・・
0890名無しさん@お腹いっぱい。
2005/08/09(火) 07:23:100891名無しさん@お腹いっぱい。
2005/08/09(火) 07:55:48あざーーっす!!!!
取れました!
1 #!/bin/sh
2
3 echo $$
4 ./test.sh &
5 echo $!
という超簡単なものなら行けたんですが・・・・・
実はtomcatの自動起動スクリプトを書いているんですが、
ソース晒して見てもらってもいいでしょうか?
0892名無しさん@お腹いっぱい。
2005/08/09(火) 16:03:39ってなんだよ?
0893名無しさん@お腹いっぱい。
2005/08/09(火) 16:13:010894名無しさん@お腹いっぱい。
2005/08/09(火) 16:14:21http://d.hatena.ne.jp/keyword/%A4%A2%A4%B6%A1%BC%A4%B9
0895名無しさん@お腹いっぱい。
2005/08/09(火) 16:15:07当たってたら、なんかくれ。
0896名無しさん@お腹いっぱい。
2005/08/09(火) 16:59:30日本語を書くこと。
0897名無しさん@お腹いっぱい。
2005/08/09(火) 17:40:180898名無しさん@お腹いっぱい。
2005/08/09(火) 21:41:090899名無しさん@お腹いっぱい。
2005/08/09(火) 21:43:310900名無しさん@お腹いっぱい。
2005/08/10(水) 09:20:00こういうのあんまりよくない?
0901名無しさん@お腹いっぱい。
2005/08/10(水) 10:18:290902名無しさん@お腹いっぱい。
2005/08/10(水) 10:37:29自己レスです。
結局
echo $(ps -ewo "%p %c %u %a" | awk "\$2==\"java\" && /catalina/ && \$3==\"$CATALINA_USER\" {print \$1}" | head -n 1) > $CATALINA_PID
こんな強引なやり方でプロセスID取得しました
0903名無しさん@お腹いっぱい。
2005/08/10(水) 12:56:490904名無しさん@お腹いっぱい。
2005/08/10(水) 14:54:230905名無しさん@お腹いっぱい。
2005/08/10(水) 19:16:47Tomcatが8080で待ちうけている場合
/usr/sbin/lsof -t -i TCP:8080 -P
シェルスクリプトじゃないけどね。
0906名無しさん@お腹いっぱい。
2005/08/10(水) 19:48:48ええー、(環境によっては)lsofをわざわざインスコすんの…。
そりゃあ必要なものは何でもインスコしなきゃならんがの。プロセスidさえ
わかればよいという目的下だと、ちょっとバランスの悪さを感じる。(俺は)
0907名無しさん@お腹いっぱい。
2005/08/10(水) 23:15:45Kシェルで
count=`cat a.txt b.txt | grep ${検索条件} | wc -l`
というコマンドで検索条件に半角スペースを含む文字列を指定したい場合、どうしたら良いですか?
0908名無しさん@お腹いっぱい。
2005/08/10(水) 23:23:53これじゃあかんの?
0909907
2005/08/10(水) 23:39:59それだと、なぜかcount=0になっちゃうんですよ。
もちろん、条件には引っ掛かる文字列もあります。
うーん。
0910名無しさん@お腹いっぱい。
2005/08/11(木) 01:43:37ksh使ってないんで本題はわからんが、grep -c って標準的じゃないの?
スペースの話を別にすれば
count=`grep -c $検索条件 a.txt b.txt`
でよかったんじゃないのかな。
本題も、wc -lを取り払って試せば、なぜなんだかわからないかな。
0911名無しさん@お腹いっぱい。
2005/08/11(木) 02:03:080912名無しさん@お腹いっぱい。
2005/08/11(木) 11:13:46というところからして、検索文字列の正規表現が
おかしくてマッチしないだけというオチじゃなかろうか。
grep を fgrep に変えてみるとか。
0913907
2005/08/11(木) 20:04:46検索条件はファイルから読み込んでいるので、
半角スペースに見えているのは特殊文字かと思い、
cat -vしてみたら
行末に^Mの文字が‥
引っ掛からないわけでした。
やさしいunix板の皆様、ありがとうございました。
逝ってきます。
0914名無しさん@お腹いっぱい。
2005/08/14(日) 08:45:190915名無しさん@お腹いっぱい。
2005/08/14(日) 10:05:520916名無しさん@お腹いっぱい。
2005/08/14(日) 11:04:42NetBSDにstaticな/bin/bashを突っ込む俺も阿呆だと思うけど。
だってシングルユーザモードでもログインシェルにbashを使いたいんだよもん!
0917名無しさん@お腹いっぱい。
2005/08/14(日) 17:35:450918名無しさん@お腹いっぱい。
2005/08/14(日) 18:04:12私はbashかksh。
0919名無しさん@お腹いっぱい。
2005/08/14(日) 18:51:360920名無しさん@お腹いっぱい。
2005/08/14(日) 19:41:530921名無しさん@お腹いっぱい。
2005/08/14(日) 22:12:160922名無しさん@お腹いっぱい。
2005/08/14(日) 23:23:49明らかにスレ違いだし。
0923名無しさん@お腹いっぱい。
2005/08/22(月) 17:31:43????.sh: xrealloc: cannot reallocate 268435456 bytes (0 bytes allocated)
(????はファイル名)
というエラーがでます。
前同じスクリプトを動かしても何も普通に動いていたのに。。。
パーミッション、ファイルサイズ制限、ログインシェル、メモリ残量
はチェック済みです。。。
このエラーが起きる原因はなんでしょうか?
よろしくお願いします。
0924923
2005/08/22(月) 18:14:300925名無しさん@お腹いっぱい。
2005/08/22(月) 18:26:41原因はなんだったんだよ!
0926名無しさん@お腹いっぱい。
2005/08/23(火) 20:43:34bourne shを使っています。
サーバにある毎日更新されているログファイル(ファイル名に日付入り)にアクセスし、
その中で使用されている2種類の文字列をカウントして、数をエクセルで日ごとに表示させようと思っています。
今考えているやり方は、引数に日付を与えてそれを元にその日のログファイルを検索し、
その中からヒット数をカウントしてテキストかCSV形式で保存し、手作業でエクセルに流し込もうと思っています。
(grep "A" logfile | wc -l ; grep "B" logfile | wc -l) >> hoge.txt
このやり方だとテキスト・CSVどちらの形式でも、
1
2
と改行が入ってしまって、エクセルで
A B
0822 3 5
0823 1 2
0824
という横並びの形で表すことができません。
何か良い方法を教えていただけますでしょうか。
よろしくお願いします。
レス数が900を超えています。1000を超えると表示できなくなるよ。