シェルスクリプト総合@LINUX Part4

このエントリーをはてなブックマークに追加
1login:Penguin
UNIX板のスレを見ている方も多数おられるかと思いますが、
まあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。

初めての自作スクリプト、自信ないから見てください。な初心者から
トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで
いろいろな人に参加して頂けると嬉しいです。

perlやらPythonやらの話が混ざっても良いんでない?

Part3 : http://pc11.2ch.net/test/read.cgi/linux/1184077033/
Part2 : http://pc11.2ch.net/test/read.cgi/linux/1154578200/
Part1 : http://pc8.2ch.net/test/read.cgi/linux/1121994321/

>>2-5あたりに色々と。
2login:Penguin:2008/05/17(土) 13:45:47 ID:9hFWtCOD
関連スレ
おまいら! sed の使い方教えて下さいm(_ _)m@linux板
http://pc11.2ch.net/test/read.cgi/linux/1067815570/
【Shell】どのシェル使ってる?【Script】@LINUX板
http://pc11.2ch.net/test/read.cgi/linux/1067330754/
シェルスクリプト総合 その10
http://pc11.2ch.net/test/read.cgi/unix/1202725267/
sed@UNIX板
http://pc11.2ch.net/test/read.cgi/unix/1085730992/
2ちゃん画像落としまくりスクリプト@UNIX板
http://pc11.2ch.net/test/read.cgi/unix/1003833552/
連番のH画像/動画を一気にダウンロードする2
http://pc11.2ch.net/test/read.cgi/unix/1135533382/

ログを読みたい人はこちら
http://makimo.to/cgi-bin/search/search.cgi?q=%83V%83F%83%8B%83X%83N%83%8A%83v%83g&andor=OR&sf=0&H=&view=table&all=on&shw=
3login:Penguin:2008/05/17(土) 13:46:06 ID:9hFWtCOD
4login:Penguin:2008/05/17(土) 13:46:45 ID:9hFWtCOD
>2
おまけの関連スレ

シェルスクリプト相談室
http://pc11.2ch.net/test/read.cgi/tech/1112553783/
awkについて語るスレ $2
http://pc11.2ch.net/test/read.cgi/tech/1172242542/
5login:Penguin:2008/05/21(水) 00:32:13 ID:a/iElE66
Unix系は仕事でSolarisから入ったので、Linuxでもtcsh使ってますが何か?
6login:Penguin:2008/05/21(水) 00:32:36 ID:a/iElE66
お、何かいいID
7login:Penguin:2008/05/21(水) 20:20:15 ID:5fFqv5kV
シェルでエロゲ作成したいんだけど意見聞かせてくださいな
8login:Penguin:2008/05/21(水) 20:57:55 ID:MNgR1LfO
ギガバイ子ちゃんでお願いします。期待しています。
9login:Penguin:2008/05/21(水) 23:57:35 ID:DRn6AcXl
ヒロインの一人に使ってあげてくれ
              _,,.. -ー 'ヘ-、、_
      .!、、 !、_、,.ィ'"   _ ,,..   _,゙ヽ,
      \`ー`=    '´ _,..、 ヽ  `、 ヽ
        ゝ、     /´ `  `ヽ   ゙、
       /   ,/ ,、/ ,.イ    !     ヽ、
      ノ ー=ニ,..-、,ヾ;、' /,.' !  i|  !   、__ ,.Zャ
    ー- 7 , /,、ヾ;、,.ィ // ,イ! ,!ト | ,イ  、ヾ、_
      / ,.' ,' ! ヾ;、'イ/ / / / |i |!,! / ヽ、 \、_
     ,/イ / ,!,イ!/_ !|;/  //_,.ィー|' /,ィ、   、ー- '"
      _/,.イ/!|i !ニ。ミ   /' ,ィ:;゚ソゞ |i }、-r-ー'ィ
     ゙̄/',.ヽ,|!ヾ`ゞ'='     ` ´ /!'" ーヤ
      ̄´フ! / ハ     ,:      ,イ ト、 ー_ユ-r''"`!
       /___ ,. \   ー_-;ァ  /!-''"イ´  |;;! ,.|
       ̄ /´ /イ!|/ ,ヘ、、   ,..イ;''´::;イ|    ,.! '´イ!
       /ヘ! { !/:::!'ヾi| ` ゙/:::::/ | !.-,..=-'´!|  ゙|!
      イ{゙ ト、 ヾ::::::::゙、   /::::::; '  ,r',.ヘヾ   ゙!|  ゙、
    _,.-ゞト!、 ヽ ゙!:::::::ヽ/::::,イ|  /イ-r'┴-、、 |;i  !
   / !__,,...|;i,.._ヽi!、 |::ヽ::イ!::/ ヾ!ィ'´   |;!   ゙iヽ| ト'' ソ
   / r|'"`7/゙T`,>ヾ>;!ノ:r!::く ,イ´,.!|__,,.. -┴ー -、!|ヾ゙!_ノ
  ,イL/゙! // / //´>::|!:::|i::ネ{! i!,!'´ //      ヾ,.|i|
 ,!,イ/ヾi! | L;. /イ/::::::|!::::|ir-、' /___//_      ノソi;|
10login:Penguin:2008/05/23(金) 04:46:10 ID:RB3w3nsA
ちょっとスレの趣旨から離れてしまいますが、
たとえば Windows の WSH のように Javascript で
一般的なシェルスクリプトのようなものを実行できる
インタープリタって、Linux にはないんでしょうか?

普段は bash 使っててそれで仕事上は全然問題ないんですが、
Windows ではバッチ処理を WSH + JScript で書いているので
ふとなんで Linux にはそういうのがないんだろうか、って思って。
11login:Penguin:2008/05/23(金) 07:16:44 ID:uTynWoSg
OpenJDK+Rhinoじゃダメかい?
12login:Penguin:2008/05/23(金) 22:34:35 ID:tQ4+YbeK
自宅のLinuxマシンをsmbサーバにして、
画像、テキスト、動画など、すべてのファイルを保存・管理しています。

仕事で書いた原稿記事などについても、
いちいち GUI アプリで開かなくても、
ターミナルからでも中身を閲覧できるように、
必ず文字コードは UTF-8, 改行コードは LF で保存しています。

が、クライアント(主として MacOSX、たまに Windows)のターミナルから、
そうしたテキストファイルを less で見ると、当然のことながら、
見やすい場所での改行を一切しないで、
ターミナルの幅いっぱいにテキストを広げてくれます。

これを、何か適当なところ(例えば一行は50字など)で
改行を入れて表示させてやる方法ってあるでしょうか?

クライアントは主として MacOSX 10.4.11 で、
使っている仮想端末は、OSX 標準の /Applications/Terminal.app です。
たまぁに WindowsXP や Windows2000 などからもアクセスし、
その場合には poderosa.exe を使っています。
サーバマシンは CentOS4.6 です。

ls になんらかのオプションを与えて整形するのか、
それともなんらかのシェルスクリプトを組んでやる必要があるのか、
基本的なところからわかりません。
どなたかアドバイスいただけませんでしょうか?
よろしくお願いいたします。
13login:Penguin:2008/05/23(金) 23:29:13 ID:1NkPPjck
>>10
こういうものはある。使ってる人は見ないけど。
ttp://www.wxjavascript.net/

>>12
スレチだけど lv -W50
これでわからなければCentOSのスレへ
14login:Penguin:2008/05/23(金) 23:44:07 ID:emu552tY
lvってCentOS製だったの?
15login:Penguin:2008/05/23(金) 23:52:41 ID:yTe4r5LG
>>13
どうもありがとうございました。
CentOS 用のパッケージは見つからなかったんですが、
ソースが見つかったので、checkinstall で rpm を作り、
インストールしたらすぐに希望通りのことができました。
16login:Penguin:2008/05/24(土) 08:58:44 ID:RlisQGoN
Mac OSXはUnix系と聞いたが、改行コードが違うのか。
17login:Penguin:2008/05/24(土) 09:20:38 ID:yYzGER+2
>>16
昔の MacOS は違ったなぁ.
18login:Penguin:2008/05/24(土) 09:42:14 ID:z250jUqQ
まだ\rなのか
19login:Penguin:2008/05/24(土) 10:01:19 ID:R69XGiJs
ええと、標準だと今でも CR+LF ではないかと思いますが、よく知りません。
20login:Penguin:2008/05/24(土) 16:36:20 ID:tQzGMWxj
21login:Penguin:2008/05/24(土) 16:52:04 ID:yYzGER+2
* LF: UNIX系のシステム。Linux、AIX、Xenix、Mac OS X、BeOS、Amiga、RISC OSなど。
* CR+LF: CP/M、MP/M、DOS、OS/2、Microsoft Windows。
* CR: コモドールによるシステム、Apple IIファミリ、Mac OS(バージョン9まで)、OS-9。
22login:Penguin:2008/05/24(土) 20:48:36 ID:5ErPV5SE
>>20-21
あ、OSの改行コードの違いにより改行されないことが>>12の相談かと思ったよ。
そもそも改行していない文章を fmt したいということか。
23login:Penguin:2008/05/24(土) 22:57:24 ID://jRJGUZ
MACはCRとずっと思ってたのにLFなのかぁ
24login:Penguin:2008/05/28(水) 15:18:10 ID:HsWDzpDn
子プロセスとして起動されたのか,
. で読み込まれたのか,
スクリプトの中から判断することはできますか?
25login:Penguin:2008/05/28(水) 15:23:33 ID:HsWDzpDn
それぞれ set の結果を diff してみた.

#子プロセスとして起動した ./test.sh
< BASH_ARGC=()
< BASH_ARGV=()
< BASH_LINENO=([0]="0")
< BASH_SOURCE=([0]="./test.sh")
---
#. で読み込んでみた . test.sh
> BASH_ARGC=([0]="1")
> BASH_ARGV=([0]="test.sh")
> BASH_COMPLETION=/etc/bash_completion
> BASH_COMPLETION_DIR=/etc/bash_completion.d
> BASH_LINENO=([0]="39")
> BASH_SOURCE=([0]="test.sh")

ふぅん.BASH_SOURCE じゃ判定できそうにないな.
BASH_ARGC が 0 じゃないことでチェックするのかな?
26login:Penguin:2008/05/28(水) 15:31:38 ID:HsWDzpDn
-------すくりぷと test.sh
#!/bin/sh
set
-------ここまで

chmod +x test.sh
./test.sh
./test.sh a b c
. test.sh
. test.sh a b c

4つともやってみたけど,結局何で判定すりゃいいのかわからない.
死ね俺.
27login:Penguin:2008/05/28(水) 15:36:50 ID:HsWDzpDn
${BASH_LINENO[0]}
で判定するのがよさげなんだけど,
そもそも sh にはそんな機能ないの?
bash 限定はちょっとやだなぁ.
28login:Penguin:2008/05/28(水) 15:42:12 ID:HsWDzpDn
単純に $0 で判定するのがいいのか?
29login:Penguin:2008/05/28(水) 15:43:32 ID:RYpMT0gt
lessの代わりにleafpadを使えば
30login:Penguin:2008/05/28(水) 17:51:58 ID:4Ch8TEZp
sh または bash で配列の結合ってできますか?
31login:Penguin:2008/05/28(水) 19:03:04 ID:xwe44XYV
神様助けてください
関数に配列を渡す方法がわかりません

a=( あ い う え お )
fnc(){
echo ${1[0]}
}

fnc a

これで”あ”が出ると思ったんですがでません
教えてください
お願いします
3231:2008/05/28(水) 20:20:45 ID:xwe44XYV
シェルスクリプトにはスクリプト内でスコープが無いことを知り

a=( あ い う え お )
fnc(){
echo $a[0]
}
fnc

で”あ”が表示できるようになりました
33login:Penguin:2008/05/28(水) 23:35:58 ID:auu89eB+
ループ文で外部ファイルから読み込んだコマンドを実行しようとしたときに
パイプ処理ができずに困ってます。(下記の場合、ls -lの結果しかでません)
サブシェルの方に行ってしまっているのかな?と思っているのですが、どう処理したらよいのでしょうか?

FILE=test.txt
while read LINE
do
$LINE
done < $FILE

■test.txtの内容(例)
ls -l | grep abc
34login:Penguin:2008/05/29(木) 00:07:17 ID:vP9yV59g
>30
c=(${a[*]} ${b[*]})

>33
FILE=test.txt
while read LINE
do
eval $LINE
done < $FILE
3533:2008/05/29(木) 00:17:22 ID:iY0MCSHA
>>34
ありがとう!できました!便利なもんがあるんですね。
助かりました〜。
36login:Penguin:2008/05/30(金) 19:21:49 ID:p9jie4Lm
echo $a[0]
これってちゃんと出力できるの?
${a[0]}
ってしないとエラーにならね?
37login:Penguin:2008/05/30(金) 19:45:31 ID:ZG0+9xy3
% a[0]='abcef'
% echo $a[0]
abcef
% echo ${a[0]}
abcef
% echo $SHELL
/bin/zsh
38login:Penguin:2008/05/31(土) 06:16:56 ID:g+xuahlh
#!/bin/sh

a[0]='abcef'
echo $a[0]

a[0]='abcef'
echo ${a[0]}
--------------------
[siomizu@cluster ~]$ ./test.sh
abcef[0]
abcef
39login:Penguin:2008/05/31(土) 16:10:17 ID:qUj8kkoX
uniqはUTFには対応していないでしょうか?
たとえば、以下2行がある場合にuniqすると承のみになってしまいます。

承 <- 0xE689BF
良 <- 0xE889Af

環境はdebianのcoreutils 6.10-6、改行コードはLFを使用しています。
よろしくお願いします。
40login:Penguin:2008/05/31(土) 16:22:33 ID:q3zltHwi
再現できるスクリプトを書いてください
4139:2008/05/31(土) 16:33:59 ID:qUj8kkoX
>>40
私でしょうか?
単に以下の2行を書いたファイルを用意してuniqです。




あ、「<-」以降は単にUTF8でこんなバイナリになるというのを示しただけです。
失礼しました。
42login:Penguin:2008/05/31(土) 16:36:28 ID:q3zltHwi
私の環境では再現できませんので。
$ printf "\xe6\x89\xbf\n\xe8\x89\xaf\n" | uniq

4339:2008/05/31(土) 16:46:52 ID:qUj8kkoX
>>42
そうですか・・・
うちでは
% printf "\xe6\x89\xbf\n\xe8\x89\xaf\n" | uniq | hexdump -C
00000000 e6 89 bf 0a e8 89 af 0a |........|
00000008

でした。参考までにディストリとLC_ALL何にしているか教えていただけませんか?
4439:2008/05/31(土) 17:01:51 ID:qUj8kkoX
すいません 43でできてるじゃないかorz

LC_ALLをUTFにした状態だとうまくいきました。
uniqはロケール見るのか・・・

ありがとうございました
45login:Penguin:2008/06/01(日) 19:54:58 ID:3xisQkfz
オライリの入門bash難しいよ・・・
これホントに入門なの・・・?
46login:Penguin:2008/06/01(日) 21:38:04 ID:EWKpU6i4
オライリーは全般的に中級者が読む本だ
47login:Penguin:2008/06/02(月) 18:36:56 ID:GT1ocSub
すみません。くだ質から誘導されてきました。よろしくお願いします。
bangou.txtには

123123
123123
100000


というように数値が入っています。(▲は空白ですが改行コードがはいってます)
この場合、1行目と3行目を比較して3行目に数値が入っている場合のみ2行目の値を別表に表示する
スクリプトを作りたいと思って色々調べて以下のようなスクリプトを作ってみましたけど
うまく動きません。(空白は空白として認識してくれないと行がずれるのでそれも認識したいです)


#!/bin/bash
for iii in `cat bangou.txt`
do
jjj=`sed -n '2p' bangou.txt`
export jjj
kkk=`sed -n '3p' bangou.txt`
export kkk
if [ "$iii" = -n ]
then
echo "$kkk>/dev/null
else
echo "$jjj > jjj.txt
paste jjj.txt toku.txt >> toku2.txt
rm -rf jjj.txt
fi
done

どこか間違ってるんでしょうか?よろしくお願いします。
48login:Penguin:2008/06/02(月) 19:03:36 ID:X93+nxzv
>>47
やりたいことがよくわからん。
toku.txt の内容と、
実行後に toku2.txt がどういう内容になってればいいのかを書いてくれ。
49login:Penguin:2008/06/02(月) 19:28:58 ID:GT1ocSub
>>48さん
返信ありがとうございます。
toku.txtは住所録です。
それをとりあえず一旦、toku2.txtにbangou.txtと組み合わせたものを
書き出しているだけなのでtoku2.txtには特に何も入っていません。
toku.txtは

東京都
東京都
東京都
東京都
東京都

愛知県
みたいな感じです。(▲は空白です)
これをそのままpasteでbangou.txtと結合すると
▲▲
123123 東京都
123123 東京都
100000 東京都
▲ 東京都
▲ 東京都
となってしまうのでこれを
▲▲
123123 東京都
123123 東京都
100000 東京都
100000 東京都
100000 東京都
というようにしたいんです。空白の行に一番最後の
番号を割り当てたいんです。わかりにくくてすみません。宜しくお願いします。
50login:Penguin:2008/06/02(月) 19:35:12 ID:GT1ocSub
ごめんなさい。「▲は空白」と書きましたけど実際は改行コードが入っているだけです。
すみません。ごめんなさい。
51login:Penguin:2008/06/02(月) 19:44:36 ID:X93+nxzv
いまいちよくわからんな。
>>47
> この場合、1行目と3行目を比較して3行目に数値が入っている場合のみ2行目の値を別表に表示する
っていう話もどうなったのやら。

シェルスクリプトでがんばるより perl あたりで書いちゃった方が早そう。
52login:Penguin:2008/06/02(月) 19:54:09 ID:GT1ocSub
>>47の書き方が悪かったかもしれないです。ごめんなさい。
実際には>>49のような処理をしたいんです。
perlでもいいです。一旦処理できればいいんで。お願いします。
53login:Penguin:2008/06/02(月) 20:01:01 ID:6RTLtbwy
pasteコマンドで結合して処理すればいいんじゃないの?
54login:Penguin:2008/06/02(月) 20:07:59 ID:GT1ocSub
>>53さん
ご指導ありがとうございます。pasteで結合しただけだと
bangou.txtで空白の部分があるので >>49 のように
▲▲
123123 東京都
123123 東京都
100000 東京都
▲ 東京都
▲ 東京都
となってしまうので困ってます。
これを
123123 東京都
123123 東京都
100000 東京都
100000 東京都←空白が上の行と同じ番号
100000 東京都←空白が上の行と同じ番号
という風にしたいんです。お願いします。
55login:Penguin:2008/06/02(月) 20:09:26 ID:6RTLtbwy
100000 でいいならsedで置換するだけじゃん。
56login:Penguin:2008/06/02(月) 20:11:48 ID:GT1ocSub
>>55さん
お返事ありがとうございます。
数値は「10000」ではないんです。
上にある行の数値が欲しいんです。
わかりにくい説明ですみません。
宜しくお願いします。
57login:Penguin:2008/06/02(月) 21:14:50 ID:W+U/n8+A
paste bangou.txt toku.txt | awk '{printf( "%s %s\n", (NF>1)? $1: onaji, $NF );
onaji=$1}'
とかかな?
でも、番号の1行目が空白のときはどうするのだろう。
58login:Penguin:2008/06/03(火) 00:37:37 ID:xzQHL5F2
>>57さん
ありがとうございます!
明日早速試してみます。ありがとうございます。
59login:Penguin:2008/06/03(火) 16:14:01 ID:CIWG+PQ4

あのスレ住人(特にdebユーザ)に、お願いなんだが、テンブレにあるし絶対ダメだとかいわんけど
書き込むとき、せめてシェルスクリプトと他のperlなんかのスクリプト言語は
意識して区別してくれまいか?ここ、「シェルスクリプトスレ」だから。

(上で「特にdebユーザ」と言ったのは、批判じゃなくて、前スレで発覚したんだが
 debはディストリレベルでコマンドとperlスクリプトなんかが混在になってるらしく
 ユーザ自身が区別しない慣習のようだから。でも、それって一般的じゃないし混乱のもとだよね?)

sedでもawkでもperlでもいいけど(ここら辺までは普通にシェルで使うだろけど、
perlで複雑なことやりこんだり)なんでもありありなら、わたしゃpythonやzenityや
織り込んでGUIやgtkベースの話はじめちゃうぞw

60login:Penguin:2008/06/03(火) 16:16:16 ID:8f1erIVq
「テンブレ」?
「ディストリレベルで混在」?
どういう意味?
61login:Penguin:2008/06/03(火) 16:43:03 ID:CIWG+PQ4
>>60
テンプレつーのは、つーか、>1に
>perlやらPythonやらの話が混ざっても良いんでない?
とあるし、>2-4にスクリプト言語のリンクも張ってある。

混在つーのは、具体例では、debではrenameコマンドがperlスクリプトprenameに置き換えてあるし
どうやらシェル上のパスの通し方なんぞが、perlなどを使いやすいように拡張されてるようだ。
ま、debユーザじゃないので詳しいところまではわからないけどね。

一応断っておくけどdeb批判じゃないよ。
62login:Penguin:2008/06/03(火) 16:56:54 ID:8f1erIVq
「テンプレ」を「テンブレ」と書いていたことには気付いているのだろうか。

>>61
> 混在つーのは、具体例では、debではrenameコマンドがperlスクリプトprenameに置き換えてあるし
これは特殊かつ些細な例でしょ。
他に何かある?

> どうやらシェル上のパスの通し方なんぞが、perlなどを使いやすいように拡張されてるようだ。
そんな事実はないよ。
63login:Penguin:2008/06/03(火) 17:08:25 ID:CIWG+PQ4
うわぁ、やっぱりdeb信者は・・・ごめんなさいね。趣旨だけ理解してちょ。
64login:Penguin:2008/06/03(火) 17:10:02 ID:GEyZQq+8
これだけで信者扱いする君もそうとうなものだと思うぞ。
65login:Penguin:2008/06/03(火) 17:11:57 ID:CIWG+PQ4
はいはい、ごめんなさい、ごめんなさい。あんたが大将。
66login:Penguin:2008/06/03(火) 17:23:16 ID:8f1erIVq
信者って決めつけられてもな。
Debian も使ってるし他のディストリも使ってるし。
よく知りもしないのにいいかげんなこと言うな、ってだけ。
67login:Penguin:2008/06/03(火) 17:46:57 ID:L2QLzXUM
ちんこ
68login:Penguin:2008/06/03(火) 20:26:13 ID:UQvQZC/E
>>59
分界点が判らない。
69login:Penguin:2008/06/03(火) 20:51:52 ID:+2Z+EheD
>>68
分界線という言葉ならあるが
70login:Penguin:2008/06/03(火) 22:24:45 ID:4bIEot6Q
Debianではっつうか、そいつの問題だろう。
シェルスクリプトかperlスクリプトか見てわからないような奴は他の鳥使ったってわかるようにならない。
71login:Penguin:2008/06/03(火) 22:25:09 ID:meWc8EbG
>>59
> debはディストリレベルでコマンドとperlスクリプトなんかが混在になってる

デブな人だけどなんのこっちゃ?
まさかPerlスクリプトなら*.plになるとか言ってるわけじゃないよな?
72login:Penguin:2008/06/03(火) 22:31:11 ID:/nacTMrw
というか、俺も言ってる意味が分からない
とくにディストリレベルっていう言葉
ディストリレベルってのはどのレベル?
73login:Penguin:2008/06/03(火) 22:41:59 ID:8iXvkF35
#/bin/sh
perl -e printf( "hello world\n" );

だと、>>59基準でOKか否かが分かんない。
74login:Penguin:2008/06/03(火) 22:48:40 ID:513yN16/
例えばls って打つと ls.pl が起動されるって事だと読み取った。
Debian系は使っていないので真実は知らない。
75login:Penguin:2008/06/03(火) 22:49:50 ID:OcnJ3se+
#!/bin/sh

perl sh.pl
ruby sh.rb
php sh.php

system("hoge.sh",$ret);
exec("hoge.sh",$ret);

exec("sed 's/B/A/g' $current > $tmp",$ret);
exec("rm $current",$ret);
system("mv $tmp $current",$ret);

もう人生バラ色です
76login:Penguin:2008/06/03(火) 23:39:04 ID:/nacTMrw
俺の人生はルビー色
77login:Penguin:2008/06/03(火) 23:48:22 ID:J2hvNDuq
質問です。

$ ls "a"
file1  file2
$ echo ls \"a\"
ls "a"
$ `echo ls \"a\"`
ls: cannot access "p": No such file or directory

三つめでエラーになるのはなんででしょう?
こういう時はどう書くのが正しいのですか?
78login:Penguin:2008/06/03(火) 23:52:30 ID:4a1SGQ4Q
$ ls "a"
ls: a: No such file or directory
$ echo ls \"a\"
ls "a"
$ `echo ls \"a\"`
ls: "a": No such file or directory
$
79login:Penguin:2008/06/03(火) 23:53:03 ID:wxT19Ovz
eval `echo ls \"a\"`
8077:2008/06/03(火) 23:55:16 ID:J2hvNDuq
>>79
おお!早速ありがとうございました。
81login:Penguin:2008/06/04(水) 10:36:15 ID:bCIXok9Z
bashの/dev/nullについて質問します。
lsの表示結果でエラー出力だけは表示させずに
標準出力のみtest.txtファイルに出力したいのですが
自分の理解では以下に書いた2になりますが、表示結果
では1でないと通りません。どのようにイメージしたら宜しいのでしょうか?

1: ls /home/ > /dev/null 2>&1 > test.txt
2: ls /home/ > test.txt > /dev/null 2>&1
82login:Penguin:2008/06/04(水) 10:42:14 ID:jifIrR2s
>>81
「bash のリダイレクトについて」だろ。
/dev/null は bash の問題ではない。

ls /home/ >/dev/null 2>test.txt
で OK。
83login:Penguin:2008/06/04(水) 11:04:40 ID:bCIXok9Z
>>82
すいません、リダイレクトについてでした。回答有難うございます。
ls /home/ >/dev/null 2>test.txtについての流れで確認を
して頂きたいのですが宜しくお願い致します。

上記の標準出力1の状態について、lsの結果が/dev/nullに行く。
(ここでデータは破棄されてしまうという考えなのですが)
そして、エラー出力2はtest.txtになってますよね?

1の状態 /dev/null
2の状態 test.txt
84login:Penguin:2008/06/04(水) 11:52:58 ID:3E+PCnl7
>>81
> 1: ls /home/ > /dev/null 2>&1 > test.txt

1) /dev/null を標準出力の出力先に指定
2) 標準出力の出力先をエラー出力の出力先に指定
3) test.txt を標準出力の出力先に指定

結果
標準出力: test.txt
エラー出力: /dev/null


> 2: ls /home/ > test.txt > /dev/null 2>&1

1) test.txt を標準出力の出力先に指定
2) /dev/null を標準出力の出力先に指定
3) 標準出力の出力先をエラー出力の出力先に指定

結果
標準出力: /dev/null
エラー出力: /dev/null
85login:Penguin:2008/06/04(水) 11:59:59 ID:jifIrR2s
>>81
1: でほんとにうまく行ってる?
86login:Penguin:2008/06/04(水) 16:29:28 ID:bCIXok9Z
>>84
リダイレクトは出力先を決めるだけなのですか。
解説して頂いた通りで色々パターンを考えてみましたら
出来るようになりました、有難うございます

>>85
一応処理結果では正常な雰囲気なのですが、>>81ですと
理解しずらいので、変えようか考えています。

レス遅れましたが皆さんありがとうございました
87login:Penguin:2008/06/04(水) 22:17:21 ID:T1bDhlj1
>>86
シェルどころか日本語まで・・・
88login:Penguin:2008/06/05(木) 00:21:00 ID:lO8RLUCT
与えられたパスを絶対パスに正規化したいのですがどうすればよいですか?
単に相対->絶対の変換をするだけじゃなくて
.とか..も適切に変換してくれるとうれしいのですが。
89login:Penguin:2008/06/05(木) 00:23:58 ID:qyhUQGl8
>>88
`pwd`/$1
90login:Penguin:2008/06/05(木) 00:32:17 ID:brEG0pS6
realpathだっけ?
91login:Penguin:2008/06/05(木) 06:27:50 ID:Ysl4yLMq
ここはLinux板だからreadlink -fでどうか
92login:Penguin:2008/06/07(土) 17:03:59 ID:lYfLA/cT
スレ違いのような気もしますが・・・
lsの出力が端末だとスペース区切りなのにパイプやリダイレクトすると改行になるのはどういう仕組みですか?
93login:Penguin:2008/06/07(土) 17:10:19 ID:6DqLCPKX
isatty(3)
9492:2008/06/07(土) 17:13:39 ID:lYfLA/cT
なるほど、lsのほうで端末かどうかみてるんですね…
納得しました。どうもありがとうございます。
95login:Penguin:2008/06/08(日) 00:25:14 ID:z0g0MNBT
スレ違いだと思うならくだ質に行きなさい。
96login:Penguin:2008/06/08(日) 14:37:28 ID:w3H8z2Sk
シェルスクリプト中で、リダイレクトでファイルを生成するとファイル名が文字化けしてしまうのですが
一体何が悪いんでしょうか。
↓みたいなことになります。

$ echo $LANG
ja_JP.UTF-8
$ cat test.sh
echo a > "$1"
$ echo hoge > "あいうえお.hoge" ; ls
test.sh あいうえお.hoge
$ sh test.sh "あいうえお.hoga” ; ls
??????????.hoga test.sh あいうえお.hoge

touchとかなら文字化けしないようなのですが。
9796:2008/06/08(日) 14:54:23 ID:w3H8z2Sk
補足です。

$ ls | hexdump -C
00000000 e3 82 e3 84 e3 86 e3 88 e3 8a 2e 68 6f 67 61 0a |...........hoga.|
00000010 74 65 73 74 2e 73 68 0a e3 81 82 e3 81 84 e3 81 |test.sh.........|
00000020 86 e3 81 88 e3 81 8a 2e 68 6f 67 65 0a |........hoge.|
0000002d
98login:Penguin:2008/06/08(日) 21:58:48 ID:cpZuCikO
ls --show-control-chars
99login:Penguin:2008/06/09(月) 19:55:01 ID:Dt/jCYdy
100login:Penguin:2008/06/09(月) 20:44:39 ID:19yx0Oqh
注文スクリプトを作りました、ってこと?
101login:Penguin:2008/06/09(月) 20:52:39 ID:1XPLtUDQ
日本でもオンライン注文のピザ屋があれば出来そうね。
映画ジュラシックパークの中でプログラマーがデブでピザ食べていたけど、
この動画もその皮肉?
102login:Penguin:2008/06/09(月) 20:56:56 ID:zrUasBao
シェルスクリプトじゃないけど。
http://e8y.net/blog/2006/07/25/p126.html
103login:Penguin:2008/06/09(月) 21:02:45 ID:zrUasBao
>>101
hacker の食べ物といえば
ピザと Jolt Cola と相場が決まっておる。
104login:Penguin:2008/06/10(火) 00:00:50 ID:Uz5XyeDf
105login:Penguin:2008/06/10(火) 13:27:23 ID:Gys5ZtGT
2037→1048→2481207→↓
2037→1048→2481207→↓
20311→1056→2481211→↓
20320→1114→2481218→↓
20320→1114→2481218→↓
20326→1155→2481211→↓
20326→1155→2481211→↓
→ →2481211→
→ →2481211→↓
tomo.txtの中身はこうなっています。(→はタブ、↓は改行コードです)
これで2列目に何も文字列が入っていない場合は3列目も何も文字列を
入れないようにしたいです。(上のtxtの場合だと下の2行が対象になります)
sedとcutでなんとかなるかと思ったんですけどなかなかうまくいきません。
誰かいいスクリプトを教えて下さい。宜しくお願いします。
106login:Penguin:2008/06/10(火) 14:03:41 ID:rnP/TIGa
これでどう?

awk '{if (length($2) != 0) print;}' tomo.txt
107105:2008/06/10(火) 15:27:43 ID:Gys5ZtGT
早速のレスありがとうございます。でもうまく動かないです。。。
試しにlengthの値を変えてみたりしたんですが何も変化がないです。。
108login:Penguin:2008/06/10(火) 16:24:40 ID:mINSOvv3
>107
もっと具体的に目的を書かないとどういう結果が欲しいのか解らんよ。
>105の下から2行目は改行が入ってないの?
それとなにも列に入っていないと言いつつ全角スペースが入っているのは何故?
まあ、やりたいことを推測して例を出せばこんな感じか?
cat tomo.txt | while read LINE;do set -- $LINE; if [ $# = 3 ]; then echo "$LINE"; fi; done
109105:2008/06/10(火) 19:02:47 ID:CM93IypP
>>108さん
ご回答ありがとうございます。
すみません。
>105の下から2行目は改行が入ってないの?
入ってます。
>それとなにも列に入っていないと言いつつ全角スペースが入っているのは何故?
実際には入っていません。
ですから正確にはtomo.txtはこうなってます。
2037→1048→2481207→↓
2037→1048→2481207→↓
20311→1056→2481211→↓
20320→1114→2481218→↓
20320→1114→2481218→↓
20326→1155→2481211→↓
20326→1155→2481211→↓
→→2481211→↓
→→2481211→↓
110105:2008/06/10(火) 19:05:04 ID:CM93IypP
それを以下の下2行の2列目に文字列がない場合は
削除したいので以下のような結果を出して欲しいんです。
2037→1048→2481207→↓
2037→1048→2481207→↓
20311→1056→2481211→↓
20320→1114→2481218→↓
20320→1114→2481218→↓
20326→1155→2481211→↓
20326→1155→2481211→↓
→→→↓
→→→↓

何度もすみません。よろしくお願いします。
111105:2008/06/10(火) 19:19:42 ID:CM93IypP
cat tomo.txt | while read LINE;do set -- $LINE; if [ $# = 3 ]; then echo "$LINE"; fi; done
を試してみましたけどやはり何も変化はありませんでした。
すみません。お願いします。
112login:Penguin:2008/06/10(火) 19:35:16 ID:gcco3DVH
よくわからんけど、タブが2回続いたらタブ3個だけの行に置き換えるとかじゃだめなの?
やり方は知りません
113login:Penguin:2008/06/10(火) 21:34:41 ID:39ga6S1g
これはどうだ?

awk -F '¥t' '{if ($2 == "") { $3 = ""}; print}' < tomo.txt

awkのデフォの列識別はタブじゃないから-Fで指定してね。
114105:2008/06/11(水) 03:27:04 ID:bnnOzDXT
>>113
ありがとうございます。今日はこんな時間なので明日試してみます。
'\t'の部分がうまく識別してくれたらいけそうな感じがします。
115105:2008/06/11(水) 05:10:34 ID:bnnOzDXT
おはようございます。
今試してみたらうまく動きました。ありがとうございました。
116login:Penguin:2008/06/11(水) 05:47:46 ID:wK/2Md+f
>>114 >>115
明日ってw 
117105:2008/06/11(水) 08:14:21 ID:sVHDZWwZ
あっーーー!よくみたら
2037→1048→2481207→↓
2037→1048→2481207→↓
20311→1056→2481211→↓
20320→1114→2481218→↓
20320→1114→2481218→↓
20326→1155→2481211→↓
20326→1155→2481211→↓


って感じで最後の2行のタブが全部消えてました。。。
これは消えると困るんです。再度お願いします。。。
118login:Penguin:2008/06/11(水) 08:47:58 ID:uz75y6lZ
難問が…
119login:Penguin:2008/06/11(水) 10:00:16 ID:NnMk6hEw
>112でいけるだろ
sed -e 's/\t\t[^\t][^\t]*/\t\t/' tomo.txt
\tが使えなかったらタブで置きかえる。
120login:Penguin:2008/06/11(水) 10:14:39 ID:tvbxZjG7
>>117

あり? $2 = ""をしない行はちゃんとタブで分けたまま出力してるのに
置き換えをした行はスペースが出力区切り文字になっちゃうな。

じゃ、無理矢理修正

awk -F '¥t' -v OFS='¥t' '{if ($2 == "") { $3 = ""}; print}' < tomo.txt

OFS はoutput field separator

121105:2008/06/11(水) 11:52:44 ID:sVHDZWwZ
ありがとうございます!
今度こそ大丈夫です!本当にありがとうございます!
122login:Penguin:2008/06/11(水) 22:25:09 ID:8Wsl19+C
Open Foundation Software じゃないのか。
123login:Penguin:2008/06/12(木) 00:10:41 ID:JqmZrOtu
>>122
OSFですがw Open Software Foundation
124login:Penguin:2008/06/12(木) 11:24:21 ID:irJT+vdW
誰かピザハット対応ピザ注文コマンド作ってくれないものか。
125login:Penguin:2008/06/12(木) 11:52:43 ID:3DTOjPry
>>124
出前館にあるみたいだから、>>102 をいじれば作れるんじゃない?
126login:Penguin:2008/06/12(木) 12:44:22 ID:Y4yiWWC/
#xxx.txtの1行目を変数iに代入します
for i in `cat xxx.txt`
do
#xxx.txtの2行目を$jに入れます
j=`sed -n '2p'
export j
#変数eeeにxxx.txtの2行目から15行目を代入します
eee=`sed -n '2-15p'
export eee
#pasteで結合できるように変数をtxtファイルに入れます
echo $i > i.txt
echo \t > ccc.txt
echo $eee > eee.txt
if
#xxx.txtの行の先頭が20から始まる場合
then test $j = "^20"
#結合します
paste i.txt ccc.txt eee.txt
else
#何もしない
fi
done

初心者です。こんなスクリプトを作ったんですけどうまく動きません。
修正していただけるとありがたいです。お願いします。
127126:2008/06/12(木) 12:55:44 ID:Y4yiWWC/
#xxx.txtの1行目を変数iに代入します
for i in `cat xxx.txt`
do
#xxx.txtの2列目を$jに入れます
j=`sed -n '2p'
export j
#pasteで結合できるように変数をtxtファイルに入れます
echo $i > i.txt
echo \t > ccc.txt
if
#xxx.txtの行の先頭が20から始まる場合
then test $j = "^20"
#結合します
paste i.txt ccc.txt eee.txt
else
#何もしない
fi
done

間違えました。eee.txtは別途作りますので上記のような感じです。
128login:Penguin:2008/06/12(木) 14:03:25 ID:Y4yiWWC/
意味不明ですみません。会社から回りの人の目を盗みながら
こそこそと2ちゃんねるやってるんで・・・
これでお願いします。
#変数aaaにxxx.txtの1行目を代入します
for aaa in `cat xxx.txt`
do
#変数bbbにxxx.txtの2行目を代入します
bbb=`sed -n '2p'
export=bbb
#変数cccに$iの1列目を代入します
ccc=`cat $i | cut -f1`
export=ccc
#変数dddに$iの2から14列目を代入します
ddd=`cat $i | cut -f2-14`
exprot=ddd
if
#xxx.txtの2行目の先頭行が20の場合は切り出したファイルを結合します
then test $aaa = "^20"
paste ccc.txt tab.txt ddd.txt
elsei
#それ以外の場合はその列をそのままファイルに書き出します
echo aaa.txt
fi
done
129login:Penguin:2008/06/12(木) 18:57:20 ID:RuYhMH5C
>>126
日本語でおk

人に説明するためにやりたいことを整理すると自然に解決したりするものよ。
130login:Penguin:2008/06/12(木) 19:11:00 ID:3DTOjPry
最初に for を持ち出したところからすでに意図がわからん。
131login:Penguin:2008/06/12(木) 19:16:11 ID:kPFkNEQb
perlでやればいいと思うよ
132126:2008/06/12(木) 19:28:24 ID:TxRWHMwb
>>129
ありがとうございます。でもなかなかうまくいかないんです。
>>130
すみません。for文の処理がうまくいかないんで抜粋しました。
>>131
perlは全然わかんないんでなんとかシェルでやりたいです。
133login:Penguin:2008/06/12(木) 20:00:58 ID:48VJya+Z
任意の時間を入力し、それをUTC時間に変換することは可能でしょうか?
dateコマンドだとカレントタイムを変換してしまうので。。
134login:Penguin:2008/06/12(木) 20:55:58 ID:JwqUhAVV
date -u
じゃダメなのかな
135login:Penguin:2008/06/12(木) 21:14:33 ID:lC+5xa2L
それに -d オプションを付けたいんじゃないのかな。

$ date -u -d '2001/5/20 13:33:35 JST'
136login:Penguin:2008/06/12(木) 21:41:49 ID:JqmZrOtu
>>133
awkにあるmktime, strftime関数を使うのが一番手軽かな。
137133:2008/06/12(木) 23:39:42 ID:mOwz8//t
>>134-136
実現できました!
即レス助かりました。ありがとうございます。
138login:Penguin:2008/06/13(金) 08:03:49 ID:TrNV+QBw
>>126 は解決したのだろうか。
俺には意図が解らなかったが。
139126:2008/06/13(金) 09:47:03 ID:j8pwVaea
>>138
心配していただきありがとうございます。まだ未解決です。
簡単にいうと
aaa.txtが
[100]
201
202
203

[200]
301
302
303
となっている場合に
[100] 201
[100] 202
[100] 203

[200] 301
[200] 302
[200] 303
としたいんです。(スペースのところはタブ区切りを入れたいです)
お願いします。
140login:Penguin:2008/06/13(金) 10:12:43 ID:+c/4qhZ/
#!/usr/bin/perl
my $i = '';
while (<>) {
chomp;
if ($_ eq '') {
$i = '';
print "\n";
} elsif ($i eq '') {
$i = $_;
} else {
print "$i\t$_\n";
}
}
141126:2008/06/13(金) 10:25:54 ID:j8pwVaea
>>140
それを今試してみたら
[100]
[100] 201
[100] 202
[100] 203
[100]
[100] 301
[100] 302
[100] 303
みたいになっちゃいました。
せっかくコードを書いていただいたのですがちょっと
結果が違いました。すみません。
142login:Penguin:2008/06/13(金) 10:28:27 ID:5MIbjJC0
> 126

awk 'BEGIN {OFS = "\t";}; $0 != "" {if ($0 ~ /^\[/) section = $1; else print section, $1}' aaa.txt

多分もっと格好よくできるはずなんだけどなぁ
143login:Penguin:2008/06/13(金) 10:38:47 ID:obeusV/U
>>139
gawk '{if(match($0,/^\[[0-9][0-9]*\]$/))t=$0;else{if(length)$0=t "\t" $0;print;}}' aaa.txt

sed -e '/^\[[0-9][0-9]*\]$/{h;d}/^..*/{x;G;s/\n/\t/;p;s/\t.*//;h;d}' aaa.txt

まだ短くならないかな。
144login:Penguin:2008/06/13(金) 10:43:39 ID:+c/4qhZ/
>>141
203 の次の行は空行じゃないの?
145login:Penguin:2008/06/13(金) 10:45:41 ID:+c/4qhZ/
>>126
> #変数eeeにxxx.txtの2行目から15行目を代入します
> #xxx.txtの行の先頭が20から始まる場合
最初と言ってることぜんぜん違うじゃねーか。
146126:2008/06/13(金) 11:04:27 ID:j8pwVaea
>>142
おおおっ。すごいです。ありがとうございます。
で、あまりにも簡単に説明しすぎたせいで少し動作が違いました。
実際にはaaa.txtは複数の列でできています。
[100]
201 100 200
202 100 200
203 100 200
""

[200]
301 100 300
302 100 300
303 100 300
""

あと先頭が数字では始まらないけど文字列が入っている場合もあります。
その列は何も処理をしたくないんです。もちろん空白の列にも何も処理をしたくないです。
説明が不足していてすみません。お願いします。
147login:Penguin:2008/06/13(金) 11:08:06 ID:+c/4qhZ/
どんどん条件変わるな。
もう付き合いきれん。
148login:Penguin:2008/06/13(金) 11:09:51 ID:+c/4qhZ/
>>140 を好きに改造して使ってくれ。
149login:Penguin:2008/06/13(金) 11:57:53 ID:5MIbjJC0
>>126

#!/usr/bin/awk

BEGIN {
OFS = "\t"
}

{
if ($1 ~ /^\[.+\]$/) {
section = $1
} else if ($1 ~ /^[0-9]/ ) {
sub(FS, OFS) # これがいるかどうか分からない
print section, $0
} else {
print
}
}

まぁ暇だし,自分の勉強にもなるしな
150126:2008/06/13(金) 12:12:09 ID:j8pwVaea
>>147
ごめんなさいごめんなさい。許して下さい。
>>148
ありがとうございます。今から試してみます。感謝してます。
151126:2008/06/13(金) 12:24:52 ID:j8pwVaea
>>149
^ syntac error
^ 正規表現が終端がされていません
って出ます。
そのコードを2.awkとして保存してchmod 755 で
./2.awk < aaa.txt > bbb.txt
としたんですけど僕のやりかたが悪かったんでしょうか。
もうちょっと試してみます。すみません。
152login:Penguin:2008/06/13(金) 13:34:55 ID:frtx8yVp
シェルとかプログラミング言語よりも,ちゃんと説明できる日本語を習得するのが先だとしみじみ思う.
153126:2008/06/13(金) 13:45:24 ID:j8pwVaea
awk -f ./2.awk < aaa.txt > bbb.txt で実行できました。すみません。
でも結果としては数字のところにタブが挿入されただけでうまくいきませんでした。
また時間がある時にで結構ですので教えてくださると助かります。よろしくお願いします。
154126:2008/06/13(金) 14:31:16 ID:j8pwVaea
あれれ。すみません。aaa.txtを作って試してみたらうまく動作してました。
元データのほうに何か問題があるようです。確認してみます。
155126:2008/06/13(金) 14:57:25 ID:j8pwVaea
>>149
ありがとうございます。感謝感謝です。
if ($1 ~ /^\[.+\]$/) {

if ($1 ~ /^\[.+\]*$/) {
にして無事動作しました。[]の後ろに文字列が入っているのが原因でした。
本当にありがとうございます。
156login:Penguin:2008/06/15(日) 03:39:35 ID:sc6xQlic
#!/bin/sh
n=`cat text.txt`

で読み込んだ$nに対して
一行ずつ処理を行いたいのですがどうしたらよいでしょうか

for a in $n

を使おうと思ったのですが、スペースでも分割されてしまい
理想の動作をさせることができません
よろしくお願いします
157login:Penguin:2008/06/15(日) 04:58:13 ID:wo2EqLas
cat text.txt | while read line;
do
echo "$line";
done

while read line;
do
echo "$line";
done < text.txt

ダブルクオート
158login:Penguin:2008/06/15(日) 07:24:02 ID:Wqtu/af2
done < text.txt はbash依存だったような
159login:Penguin:2008/06/15(日) 09:18:42 ID:sc6xQlic
>>157
できましたありがとうございます!
whileの中でreadを再び使えば同時に何行まとめて、という処理が出来るんですね
160login:Penguin:2008/06/15(日) 09:44:47 ID:riPFD/ci
>>158
Linux板的にはいいんでないの。 Unix板だったら気にしたほうがいいかもしれんが。
161login:Penguin:2008/06/15(日) 10:19:04 ID:+vOR/R57
>>158
/bin/shでも動くからおk
162login:Penguin:2008/06/15(日) 10:47:11 ID:Wqtu/af2
dashもOKだから、まぁいいのか
163login:Penguin:2008/06/15(日) 12:04:09 ID:MYPOmB3X
そのあたりってPOSIXでちゃんと規定されてるものなの?
単にbashをまねて取り込んだshなのか、真のshからサポートする機能か
どうしたら見分けつけられるのかよくわからない。
164login:Penguin:2008/06/15(日) 12:33:26 ID:+vOR/R57
165login:Penguin:2008/06/15(日) 12:43:50 ID:cU/mpVoU
bash や dash があるなら、cash もあるのかな。
Csh-Again SHell とか。
166login:Penguin:2008/06/15(日) 12:53:50 ID:MYPOmB3X
>>165
生まれ変わらなくていい。そのまま墓場で寝ててくれ>*csh
167login:Penguin:2008/06/15(日) 12:56:31 ID:MYPOmB3X
>>164
トン。$(command)とか$((expr))って標準だったんだとか色々勉強になるな。


168login:Penguin:2008/06/15(日) 18:20:40 ID:ue0hzIrD
bashで文字列の最後尾が / にあたるものをヒットさせたいのですが、どのようにしたら宜しいでしょうか?
169login:Penguin:2008/06/15(日) 18:49:35 ID:LSl6/nZ+
bashにそんな機能はない
170login:Penguin:2008/06/15(日) 18:53:49 ID:aTr7Cyki
bash()笑
171login:Penguin:2008/06/15(日) 18:54:17 ID:2ND6A6mz
grepで$を使うって話?
172login:Penguin:2008/06/15(日) 19:14:12 ID:AOTtbX65
エスケプすればなんとでも。
173login:Penguin:2008/06/15(日) 19:23:37 ID:lWrIWsAm
>>168
case "$str" in
*/)
  echo "match."
  ;;
*)
  echo "unmatch."
  ;;
esac
174login:Penguin:2008/06/16(月) 02:02:05 ID:irk9chgy
>>168です。仕事が入ってしまいレス遅れました、すいません。
bashにそのような機能はありませんか・・・。
grepでは無く条件式で文字列の末尾を判定させたかったのですが
何も知らない自分としては>>173さんの書いて頂いたのを参考に
しようかと思います。助かりました、有難うございます。
175login:Penguin:2008/06/16(月) 08:11:50 ID:JECOF4SI
>>169に対する皮肉としか読めない。
176login:Penguin:2008/06/16(月) 11:27:24 ID:1Ms3xCVR
#!/bin/csh -f

set s=$1
set t=$2
set f=$3

cat $f | tail +$s | head -$t

exit 0
echo ------------------

以上を改良しろ、と言われました。みなさんならどうしますか?どなたか教えて下さい。
177login:Penguin:2008/06/16(月) 11:28:31 ID:/AfhYEBu
>>176
*csh を使うのをやめる。まずそれからだ。
178login:Penguin:2008/06/16(月) 12:44:56 ID:qvjZYD3V
>>176
速度面で改善ならアセンブリで書き直してやれ
179login:Penguin:2008/06/16(月) 13:59:17 ID:6AAfiJB4
>>176
とりあえずマルチをやめること
180login:Penguin:2008/06/16(月) 23:26:05 ID:gSPrzSdg
>>176
次に日本語を勉強すること
181login:Penguin:2008/06/17(火) 07:40:56 ID:AmqP2Db0
abc
bcd
cde
<abc> hoge hoge
(スペースはタブです)
となっている場合、<abc>の列を削除したい場合
sed 's/\t//g' | sed "s/<abc>*//g" > hoge
だとうまくいかないんですけどどこかおかしいんでしょうか。
ご指摘お願いします。
182login:Penguin:2008/06/17(火) 08:11:56 ID:+a7Qx5aV
>>181
sed 's/^<abc>.*//'

* は「前のものの0回以上の繰り返し」。
シェルの glob と違って「任意の文字列」ではない。
183login:Penguin:2008/06/17(火) 08:57:44 ID:AmqP2Db0
>>182
ありがとうございます。試してみます。
184login:Penguin:2008/06/17(火) 10:01:29 ID:AmqP2Db0
先程はありがとうございました。今度はまた問題が出ました。
aaa
bbb
ccc
ddd
eee
となっているファイルに例えばcccの行にだけ行頭にタブを二ついれたいんですけど
どうすればいいでしょうか。検索してみたんですけどそんなことをする例がないので
わからないです。お願いします。
185login:Penguin:2008/06/17(火) 10:12:39 ID:+a7Qx5aV
>>184
sed 's/^ccc$/\t\tccc/'
186login:Penguin:2008/06/17(火) 11:07:44 ID:AmqP2Db0
>>185
ありがとうございます。
でも僕の例の出しかたが悪かったです。正確には英語じゃなくて日本語なんです。
あああ
いいい
ううう
えええ
おおお
となってて「ううう」の先頭行に処理をしたいんです。
本当にすみません。
187login:Penguin:2008/06/17(火) 20:22:32 ID:RyDH/vmA
同じ人が、ここ10日ぐらい似たような質問を繰り返しているような気がしてならない。
188login:Penguin:2008/06/17(火) 21:23:10 ID:yjVz7+7h
>>187
わわわ
たたた
ししし
ももも
そそそ
ううう
おおお
ももも
いいい
ままま
すすす
189login:Penguin:2008/06/18(水) 07:36:46 ID:U0oDy3CU
>>186

$ cat aiueo.txt
あああ
いいい
ううう
えええ
おおお

$ sed 's/^ううう/\t\tううう/' aiueo
あああ
いいい
ううう
えええ
おおお

>>185の例と全く同じにできるんだが、お前は試しもせずに文句ばっかりたれとんのか。
いい加減にしろデコスケ!
190login:Penguin:2008/06/18(水) 21:41:14 ID:wntHkGxD
>>189
うっせえよ秋葉原殺傷事件予備軍。
191login:Penguin:2008/06/18(水) 22:06:13 ID:POz9Y1nl
Debian etch使ってるんだが初期設定のスクリプトって作れたりする?

例えば・・
/etc/apt/sources.list
OS全体のフォント設定
必要なツールなどインスコ

などなど・・

複数台にインスコするのはいいけど初期設定がマンドイ・・
192login:Penguin:2008/06/19(木) 00:14:33 ID:syeq8gZ9
>>191
やれば作れるんじゃね?
がんばれ。
193login:Penguin:2008/06/19(木) 01:01:28 ID:x+K2/T6V
>>191
一番簡単なのはapache走っているサーバーにディレクトリ作り、そこの設定ファイルのテンプレとかを
置いておく。 そして新しいシステムの基本インスコをしてネットに繋がったら:

wget http://hoge/~me/install-etch
./install-etch

で、そのスクリプトの中でapt-getしたり設定ファイルを書き換えたり、必要なファイルをwgetで持って来て
置き直したりとかごちゃごちゃ書いておく。

RH系だったらkickstartがお薦め。 sargeでdebianのカスタムインストーラー作りも一時したけど
えらくめんどくさかった。 最近はもっと優しくなったのかな?
194login:Penguin:2008/06/19(木) 01:15:35 ID:ETqS5qxr
>>192
おう

>>193
ようはコマンドラインを書けばいいわけだよね。とりあえずこれやってみる。
Kickstartをググってみたら簡単そうだけどローカル鯖必要そうだね。

どうもでした。
195login:Penguin:2008/06/19(木) 01:32:21 ID:JFsnEc1J
すいません エスケープの使い方で質問させて下さい。
下みたいなスクリプトで

#!/bin/sh
A=tama
B=mike
for i in $A $B
do
tmp=`eval perl -e \'\$\a \= \"$i\"\; if \( \$\a \=\~ \/\^\\\S\+\(\\\S\{1\}\)\$\/ \) \{ print \"s\$\{ 1 \}x_player\" \}\'`
echo "$tmp"
done
exit 0

一応こうすれば動くのですが、
perlの行のところにあるエスケープを減らしてすっきりさせたいのです。
良い方法を教えて下さい。
196login:Penguin:2008/06/19(木) 01:45:49 ID:syeq8gZ9
>>195
perl スクリプトを別ファイルに追い出す。
197login:Penguin:2008/06/19(木) 08:19:04 ID:k7GKeo3u
シェルに評価されてはいけない部分をシングルクォートする。
i=tama
perl -e 'printf( "%s: nya-\n", '"$i"' )'
198login:Penguin:2008/06/19(木) 17:34:35 ID:qZMvy29K
shの質問です
スクリプトがCtrl+Cなどで終了させられた時に特定の動作を持たせたいのですが
どのようにすれば実装できるでしょうか?
199login:Penguin:2008/06/19(木) 17:37:01 ID:syeq8gZ9
>>198
trap
200login:Penguin:2008/06/19(木) 18:08:53 ID:qZMvy29K
>>199
ありがとうございますm(_ _)m
201login:Penguin:2008/06/19(木) 23:30:35 ID:JFsnEc1J
>>196
 なるべく一つのファイルにまとめたいんで。。。アドバイスありがとうございます。
>>197
197さんのアドバイスを参考にして、perlの行を下のように書くと動きました。
tmp=`perl -e '$a = "'"$i"'"; if ( $a=~ /^\S+(\S{1})$/ ) { print "s${ 1 }x_player" }'`

 しかし、こう書くと$aの前のシングルクォーテーションがバッククォーテーションで
perlを実行した時に消えると思うのですが、sh -x で確認して見ると消えてません。
これで正しく書けているんでしょうか?勉強不足ですみませんがよろしくお願い致します。
202login:Penguin:2008/06/20(金) 08:28:49 ID:PYgL06kk
evalに渡すと消えるという意味なら。

tmp=`eval perl -e "'"'$a = "'"'""$i""'"'"; if ( $a=~  /^\S+(\S{1})$/ ) { print "s${ 1 }x_player" }'"'"`
203login:Penguin:2008/06/20(金) 09:48:11 ID:mQhh6bQc
tmp=$(perl -e 'print "s${1}x_player" if $ARGV[0]=~/^\S+(\S{1})$/' "$i")
204login:Penguin:2008/06/21(土) 01:08:40 ID:lACEyUp0
shでスクリプトを走らせている時に
スクリプト内でスーパーユーザの権限を得るにはどうやったらいいのでしょうか

スクリプトにsuを埋め込むとスクリプトが止まってしまって
exitしてから再びスクリプトが動き出すのですが
権限だけ持たせてスクリプトをそのまま走らせたいと思っています
何か手は無いでしょうか
205login:Penguin:2008/06/21(土) 01:11:38 ID:4k/SNXDG
>>204
sudo
206login:Penguin:2008/06/21(土) 01:42:03 ID:EyYhn7dK
リサ
207login:Penguin:2008/06/21(土) 01:49:53 ID:lACEyUp0
>>205
ありがとうございます

(自分にとっては)有用なスクリプトが組めましたm(_ _)m
感謝の極みです
208login:Penguin:2008/06/21(土) 12:58:15 ID:9C5PYE0l
ふとした疑問だが、スクリプト内でスーパー・ユーザにスイッチするのと、スクリプト自体をスーパー・ユーザ専用にするのと、どちらが安全なのだろう。
209login:Penguin:2008/06/21(土) 13:28:05 ID:ESYd9xh6
>>208
運用の仕方によって変わるでしょ。
一概にどちらが安全とか言えないよ。
210login:Penguin:2008/06/22(日) 13:34:22 ID:IsXP6W78
標準出力は標準出力のままで標準エラーだけをパイプしたいのですが
どのようにすればよいですか?(sh)
211login:Penguin:2008/06/22(日) 13:38:00 ID:aBc+5bz2
exec 3>&1
(echo stdout; echo stderr >&2) 2>&1 1>&3 | rev
212210:2008/06/22(日) 13:59:15 ID:IsXP6W78
>>211
どうもありがとうございました。
213login:Penguin:2008/06/22(日) 16:57:49 ID:3HpeFvyL
あれ?更新されてない
214login:Penguin:2008/06/22(日) 17:03:12 ID:3HpeFvyL
rsyncをあえてつかわずローカルでのWEBサイトの更新を別のPCへFTP(put)
したいのですが混乱してきましたどなたかわかりますでしょうか?
#!bin/sh
#pukiwiki内のファイルで更新のあったファイルのあぶりだし。
echo = "`ls --full-time -F`" > fulltime
awk '{print $6$7}' /var/www/html/pukiwiki/fulltime
awk '{print $6$7}' /var/www/html/pukiwikibk/fulltime2
diff=diff /var/www/html/pukiwiki/fulltime /var/www/html/pukiwikibk/fulltime2
#diffの中身が空なら抜ける
if [ "$diff"-eq /dev/null ];then
logout
#diffの内容がディレクトリなら再度中身のファイルの更新がないかを確認。
#diffの中から$10のファイル名を取り出す
215login:Penguin:2008/06/22(日) 17:04:18 ID:G5GD5xl+
>>214
lftp使え。
216login:Penguin:2008/06/22(日) 17:13:28 ID:3HpeFvyL
わかりました。ありがとうございます。lftp調べてみます。
217login:Penguin:2008/06/22(日) 17:19:23 ID:3HpeFvyL
ローカルになく、リモートにのみあるファイルを削除したいときは
mirror -R -e

mirror -e
などできるみたいですが、
ローカルで更新されたファイルのみアップといったこともできるのでしょうか?
218login:Penguin:2008/06/22(日) 17:47:05 ID:3HpeFvyL
#!/bin/sh

cd /var/www/html/pukiwiki
lftp -e "mirror -e -vvv pukiwiki; bye" ftp:XX.XX.XX.XX/var/www/html/pukiwiki

これだけでいけますでしょうか?
219login:Penguin:2008/06/22(日) 18:16:38 ID:7nMjRrut
n 更新されたのみ

mirror -Rn
220login:Penguin:2008/06/22(日) 22:21:11 ID:R/kAIh0A
ubuntu初心者スレから誘導されました。

成形した時刻の文字列をクリップボードにコピーするシェルスクリプトを作りたいのですが
まずdateで時刻を取得出来ることがわかりました。それで日付や時間を成形してみました。
で、その取得した時刻をクリップボードにコピーさせる方法が分かりません。

ubnutuは8.04です。よろしくお願いします。
221login:Penguin:2008/06/22(日) 22:29:53 ID:G5GD5xl+
>>220
xclip が使える。ただし日本語が通らない。
ruby がクリップボード操作できるみたい。
222login:Penguin:2008/06/22(日) 23:37:38 ID:MIeLc8tv
シェルスクリプトで正規表現使いたいのですが、
末尾が .jp のものだけマッチさせたい場合は
$\.jp
でよろしいのでしょうか?
223login:Penguin:2008/06/22(日) 23:55:19 ID:iLaxDbCt
シェルだけで正規表現って扱えるの?
224login:Penguin:2008/06/23(月) 00:09:49 ID:xSXSaj7v
>>223
[[ 'www.example.jp' =~ '\.jp$' ]] && echo OK
225login:Penguin:2008/06/23(月) 00:26:20 ID:bFQcdw6C
>>223
man expr
226login:Penguin:2008/06/23(月) 07:14:57 ID:xSXSaj7v
>>225
expr は外部コマンドじゃね?
227login:Penguin:2008/06/23(月) 07:23:33 ID:/dfygF5Q
bash 3.2.33だが>>224だとOKと表示されない件について
228login:Penguin:2008/06/23(月) 07:55:06 ID:xSXSaj7v
quote しちゃだめになったのか。

[[ 'www.example.jp' =~ \.jp$ ]] && echo OK
229login:Penguin:2008/06/23(月) 08:04:56 ID:E3xyu4wD
>>221
そうですか。日本語通らないですか。
rubyがいけるならPythonもいけるのかな。探してみます。ありがとうございます。
230login:Penguin:2008/06/23(月) 13:11:35 ID:R4pyjC2R
>>229
xselでおk
231login:Penguin:2008/06/23(月) 20:44:19 ID:E3xyu4wD
>>230
さっそく入れて使ってみました。
中クリックで文字列を選択した内容をそのまま貼り付けれてものすごく便利でした!
いいものを知りました。ありがとうございます。

で本題
スクリプトはこんな感じまで書きました。
#!/bin/bash

y=`date +%Y`
m=`date +%m`
d=`date +%d`
t=`date +%T`
DATE= $y/$m/$d/" "$t
echo $DATE

これで、chmod -x で権限を与えて実行すると、現在の時間を返してくれるようになりました。
が、xselを使って$DATEをクリップボード(かプライマリ)にコピーする方法が分かりませんでした。--inputは変数が代入出来ないようですし。
xsel -p  < $DATE ではうまくいきませんでした(ファイルじゃないので当たり前ですか)
232login:Penguin:2008/06/23(月) 20:57:33 ID:II3EglSV
>>231
>xsel -p �< $DATE ではうまくいきませんでした

echo $DATE > xsel -p
233login:Penguin:2008/06/23(月) 21:41:12 ID:t++FsyID
echo $DATE | xsel -i
234login:Penguin:2008/06/23(月) 21:51:30 ID:E3xyu4wD
>>232
どうもうまくいきませんでした。
修正したものを実行すると、〜.shと同じディレクトリに xsel という中身が"-p"の入ったファイルが作成されてました。
235login:Penguin:2008/06/23(月) 21:54:47 ID:eV6dG77Y
>>234 look asap >>233
236login:Penguin:2008/06/23(月) 22:05:35 ID:E3xyu4wD
>>233
こちらもうまくいきませんでした。

実行すると、以下の結果が表示されました。

./date_clipboard.sh: 7: 2008/06/23/ 21:52:49: not found

/が入っていると、ディレクトリと認識してしまうのではないかと思って、/を外して数字だけ並んだものも作って見ましたが、だめでした。 同じく echoで$DATEの中身とnot foundと出されました。

>>235
こういうことでしょうか?

#!/bin/bash

y=`date +%Y`
m=`date +%m`
d=`date +%d`
t=`date +%T`
DATE= $y/$m/$d/" "$t
look asap
echo $DATE | xsel -i

これを実行しても、同じく、echoで$DATEの中身とnot foundと出ました。
237login:Penguin:2008/06/23(月) 22:18:40 ID:t++FsyID
#!/bin/sh
date "+%Y/%m/%d %T" | xsel -i
238login:Penguin:2008/06/23(月) 22:26:25 ID:E3xyu4wD
>>237
おお! 見事に表示されました。
dateごと渡してやればよかったのですね。勉強になりました。
ありがとうございました。
239232:2008/06/23(月) 22:40:24 ID:7JKTU8Gt
ごめん! (汗)
240login:Penguin:2008/06/23(月) 22:50:21 ID:xSXSaj7v
>>238
> dateごと渡してやればよかったのですね。
別に echo $DATE | xsel -i でもいいよ。
241login:Penguin:2008/06/23(月) 22:51:35 ID:xSXSaj7v
>>236
> DATE= $y/$m/$d/" "$t
問題はここだ。
= の後の空白が余分。

むしろ
DATE="$y/$m/$d/ $t"
と書くべき。
242login:Penguin:2008/06/24(火) 08:29:39 ID:/ei8InYp
>>239
いえいえ。

>>240-241
空白がまずかったのですね。気がつきませんでしたorz
ダブルクオーテーションでくくると文字列がそのまま出てくる気がして、
> DATE= $y/$m/$d/" "$t の途中の" "は空白を出力したつもりでしたが、全体をくくってやってもよかったのですね。実行して確認しました。

#!/bin/sh

y=`date +%Y`
m=`date +%m`
d=`date +%d`
t=`date +%T`
DATE="$y/$m/$d/ $t"
echo $DATE | xsel -b -i

(xsei -b -iでクリップボードにもコピー出来るようにしてあります。xsel -pでも動きました。)
見え栄は>>237のほうがいいですねw

勉強になりました。ありがとうございました!

243login:Penguin:2008/06/24(火) 08:33:49 ID:/ei8InYp
一部ミスりました

× ダブルクオーテーションでくくると文字列がそのまま出てくる気がして、
○ ダブルクオーテーションでくくると文字列がそのまま出てくる気がして、 全体をくくらずにしていました。
244login:Penguin:2008/06/24(火) 09:36:52 ID:7q12wxxB
>>242
> ダブルクオーテーションでくくると文字列がそのまま出てくる気がして、
http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html#lbAQ

YEAR=2008
echo "$YEAR"
echo '$YEAR'
245login:Penguin:2008/06/24(火) 10:37:39 ID:/ei8InYp
>>244
そうだったのですか、シングルクオーテーションは文字として出てきて、ダブルクオーテーションでは、$も例外として、$が機能すると言うことですか。
いやはや知らないことだらけでした。勉強になります。ありがとうございます。
246login:Penguin:2008/06/24(火) 19:18:26 ID:GHnoP+if
初心者の書くスクリプトは、むしろダブルクォートを忘れて
インジェクション的な事故多発なわけですがw

if [ x"$HOGE" == x"DQN" ] ; then

ちゃんとこういう風にまで保護されているスクリプトは稀。
247login:Penguin:2008/06/24(火) 19:36:34 ID:RnXDPQy/
俺さ、その x が何のためにあるのか、以前から不思議なんだ。

if [ "${HOGE}"="DQN" ] ; then

との違いは何?
248login:Penguin:2008/06/24(火) 19:40:10 ID:y8G0f9r3
$HOGEが未定義の場合どうなるんだ?
249login:Penguin:2008/06/24(火) 19:41:45 ID:7q12wxxB
>>247
= と == は違う。
== の前後に空白が必要。

その上で、$HOGE が空文字列の場合にエラーになるのを回避するため。
250login:Penguin:2008/06/24(火) 19:50:56 ID:GHnoP+if
>>247 の = は == の typo でしょうw

で、"${HOGE}" == "DQN" だったら $HOGE が未定義でもエラーにならない。
x"$HOGE" == x"DQN" との違いは漏れは知らん。ジジイ仕様の /bin/sh とかが
あって "${HOGE}" できない場合があるんじゃない?

× export HOGE="DQN"
○ HOGE="DQN"; export HOGE

こんな環境もあるぐらいだからなぁ・・・・・・
251login:Penguin:2008/06/24(火) 20:00:18 ID:7q12wxxB
>>250
> で、"${HOGE}" == "DQN" だったら $HOGE が未定義でもエラーにならない。
bash はそうだけど、エラーになるシェルもある。
Solaris の /bin/sh とか。
252login:Penguin:2008/06/24(火) 20:07:28 ID:GHnoP+if
やはり Solaris かw そんな気はしていた。

普段は Linux 使ってるから必然と bash になっちゃうんだよね。sh で出来たっけ?
とか結構記憶が曖昧になってしまって鬱。場合にもよるけど、ポータビリティを
意識してなーんとなく昔ながらの書き方を守ってる漏れ・・・・・

あえて #!/bin/bash って書くべき?w
253login:Penguin:2008/06/25(水) 02:03:39 ID:QRiAgjkv
Solarisの古いshなんて無視していいだろ。
POSIX shell (ash, bash, ksh, ...) で動けばいいよ
254login:Penguin:2008/06/25(水) 03:24:07 ID:CH5fnn3k
実際 そんなに拡張されてないし でしょw
#!/bin/bash
でいいよね。
255login:Penguin:2008/06/25(水) 03:42:02 ID:r4HiK5gk
>>254
スクリプト動かすのに重量級のbashなんか使わないだろ。
#!/bin/sh
で十分。
256login:Penguin:2008/06/25(水) 04:07:08 ID:CZiflGY7
>>255
先生!うちの環境では
file /bin/sh
/bin/sh: symbolic link to `bash'
です.どうすればいいですか?
257login:Penguin:2008/06/25(水) 04:46:49 ID:N+m64wV+
>>255 i486SX/16MHz
258login:Penguin:2008/06/25(水) 04:59:00 ID:CH5fnn3k
だから もう 手じかな環境では
/bin/shはないでしょ。
/bin/shと書けばいちおー 互換モードで動くってだけで。
259login:Penguin:2008/06/25(水) 10:58:55 ID:NWVIKvCl
FreeBSDの事もあるしshで書いておこうってだけじゃね
260login:Penguin:2008/06/25(水) 11:25:51 ID:r4HiK5gk
debian 系だと
$ file /bin/sh
/bin/sh: symbolic link to `dash'

~$ ls -l /bin/bash /bin/dash
-rwxr-xr-x 1 root root 686K 2008-05-13 03:33 /bin/bash*
-rwxr-xr-x 1 root root 79K 2008-03-12 20:22 /bin/dash*

サイズが全然違う。
261login:Penguin:2008/06/25(水) 11:46:13 ID:e3mj3BLL
別にどっちかに決める必要なんてない。
portabiltiy が必要なスクリプトは protable に書く。
そうでなければ bash 依存な書き方をしてもいい。
それだけのこと。
262login:Penguin:2008/06/25(水) 12:06:01 ID:foNddTWJ
>>256
ぶっちゃけbashはzshよりも遅い。軽量のashなんかとは比べるべくもなく。

ログインシェルとしてなら使い勝手云々ってのがあるけど、
/bin/shをbashにしておくメリットはあんまないよ。
263login:Penguin:2008/06/25(水) 12:36:18 ID:Qkn+OwYP
なんかもっともらしいウソが垂れ流されてるぞ。

>>251
>> で、"${HOGE}" == "DQN" だったら $HOGE が未定義でもエラーにならない。
>bash はそうだけど、エラーになるシェルもある。
>Solaris の /bin/sh とか。

solaris ではたしかにエラーになるけど、それは $HOGE が未定義だからではない。
== という演算子自体がないため。
互換性を考えると文字列の比較には == ではなく = を使う。
= なら $HOGE が未定義でもエラーにならない。

x"$HOGE" のようにするのは、$HOGE が -f とか ! のような文字列だったときに
別の意味に解釈されないようにする対策。
264login:Penguin:2008/06/25(水) 17:32:32 ID:PrRjFF/A
マジッスカ
ちょっとコンビニで Soliras 買ってくる><
265login:Penguin:2008/06/25(水) 20:22:07 ID:g812rZ0o
>>251
Sun4 で試したら、未定義でもエラーにならんかったよ。

$ cat test.sh
uname -rvs
VAR="VAL"
[ "${VAR}" = "VAL" ] && 'true'
[ x"${VAR}" = x"VAL" ] && 'true'

unset VAR
[ "${VAR}" = "VAL" ] && 'true'
[ x"${VAR}" = x"VAL" ] && 'true'
$ /bin/sh -x test.sh
+ uname -rvs
SunOS 4.1.4-JL 2
VAR=VAL
+ [ VAL = VAL ]
+ true
+ [ xVAL = xVAL ]
+ true
+ unset VAR
+ [  = VAL ]
+ [ x = xVAL ]
266login:Penguin:2008/06/26(木) 15:09:48 ID:ZojLTS6b
お邪魔します。

シェルスクリプトを走らせて、あるシェルスクリプトを起動させるようにするにはどういう書き方したらよいですか。
また、そのシェルスクリプトを走らせた結果を変数にぶちゅっと入れる書き方はどうしたらいいですか。
267login:Penguin:2008/06/26(木) 15:35:52 ID:ZojLTS6b
事故解決しますた。すいません。
268login:Penguin:2008/06/26(木) 22:18:06 ID:ZPxwXTvf
ぶちゅっ
269login:Penguin:2008/06/28(土) 20:17:43 ID:/ZK60QF9
シェルでエロゲをつくるためにはどうしたらいいですか
270login:Penguin:2008/06/28(土) 21:21:44 ID:MDU5A1fa
エロゲって何ですか
271login:Penguin:2008/06/28(土) 22:52:16 ID:/ZK60QF9
linuxがwindowsに唯一負けてるのがエロゲです
272login:Penguin:2008/06/28(土) 23:29:11 ID:fs03Gty7
だとすれば、sh スクリプトでなく、BAT ファイルで作ると良いのではないでしょうか
273login:Penguin:2008/06/28(土) 23:48:10 ID:ZJYzC1iZ
windowsに対抗するため、Linuxにエロゲを導入します
また、複数のplayerがエロゲサーバにtelnetしてplayすることを想定としているため
GUIではなくCUIで行いたいと思っています
274login:Penguin:2008/06/29(日) 00:53:49 ID:nwf205tS
>>273
CUIでいかにエロさを出すかが問題だ

絵もない本当のノベルゲームでいいっていうなら、
ひたすらechoとifとかwhileとかcaseを駆使すればできる気がするけど

今どきtelnetってのもツッコミどころだけどな
275login:Penguin:2008/06/29(日) 01:02:35 ID:wXyVSJIl
Nethackはエロゲ
異論は認める
276login:Penguin:2008/06/29(日) 01:16:19 ID:4XAvfgBl
NetHackを2ch-AA拡張すればエロくなる。

主人公:( 'A`)
ヒロイン:J( 'ー`)し

てな具合。そんでもって濡れ場ではフルスクリーンAAでアニメーションするの。
277login:Penguin:2008/06/29(日) 02:09:45 ID:O4g3tYWz
エロゲの話はこっちで。

Linuxで動くオープンソースエロゲを作ろう!2
http://pc11.2ch.net/test/read.cgi/linux/1178690729/
278login:Penguin:2008/06/30(月) 18:35:41 ID:Y3MWGahT
Linux + Darwin Streaming Server で自分専用の放送局を何チャンネルも建てて
どこでも自分のコレクションした音楽を聞けるようにして楽しんでいるのですが、
面倒くさいのは、メタファイルを用意せねばならない点。
例えばマイケル・ジャクソンだけを集めた専門局を作るとします。これを
1). http://www.example.com/michael.pls
2). http://www.example.com/michael.m3u
などといったメタファイルに、以下のような内容を記述しておいてやらねばなりません。
1). [playlist]
File1=http://www.example.com:8000/michael
Title1=nina
Length1=-1
NumberOfEntries=1
Version=2
2). http://www.example.com:8000/michael
ま、大した量じゃないので、今まではいちいち手作業で cp して vi で編集していたのですが、
これを、例えば
$ mkpls michael
などと言った変数 $streaming_name を与えれば、
自動的にファイル内の特定の部分も書き換えて、
かつ、.pls .m3u それぞれのストリーミング用メタファイルも
まとめて生成してくれるようなスクリプトがあれば便利なのに、
と思っているのですが、どう書けばいいのかサッパリ解りません。
基本は、単に変数を含んだひな形を用意し、ひな形を複製、与えられた変数を代入して、
変数の名前+拡張子で保存、というだけのことだと思うんですが。。。。orz
279login:Penguin:2008/06/30(月) 22:16:41 ID:mYyaCshH
超入門者です。下記内容のシェルを作成しなければならないのですが、参考書を見てもよく分からず
知り合いにも分かる人間がおりません。。ごめんなさい、どなたかご教授頂けないでしょうか?

・/var/log/mailを解析して特定のユーザに関する調査を実施して結果をファイル出力する。
(条件)
 ・スクリプトの実行形式は「スクリプト名 ログファイル名 メールアドレス」
 ・受信メール数と送信メール数を集計する。
 ・調査をするユーザは引数として与える。
 ・調査をするユーザは[email protected]
どのような記述にすれば良いのか、参考となる情報を何でも構いませんのでお願いいたしますm(__)m
280login:Penguin:2008/06/30(月) 22:19:25 ID:LfTOpvVG
>>279
grep $2 $1 | wc -l

さっさと学校辞めて派遣労働者にでもなってしまえ。
その方が親孝行だ。
281login:Penguin:2008/06/30(月) 22:51:24 ID:LE+io00E
シェルからwindowsにrshのような感じでコマンドを打ちたいんですが、
telnetを使ったりしてどうにかならんでしょうか?
282login:Penguin:2008/06/30(月) 22:51:47 ID:LfTOpvVG
>>281
expect
283login:Penguin:2008/06/30(月) 22:55:37 ID:pVpnujlR
>>279
スクリプト以前にひょっとしてシェルプロンプトで何も叩いた事がないほど初心者?
284login:Penguin:2008/06/30(月) 23:08:10 ID:mYyaCshH
279です。
>>280
その言葉真摯に受け止めます。ですが今後努力する所存です。
すいません。諸事情で時間がない中でしたのでこちらで質問させて頂きました。
参考情報ありがとうございます。
>>283
簡単なコマンドなら叩いたことはありますがシェルは全くの初心者です。
どうか宜しくお願い致しますm(__)m
285login:Penguin:2008/06/30(月) 23:13:41 ID:LE+io00E
>>282
家のfedoraでインストールして試してみてexpectすげーと思ったけど、業務用のredhat 3 には多分入ってないです・・・
ありがたいですけど、他にないですか?
286login:Penguin:2008/06/30(月) 23:35:01 ID:EeC8VQhU
>>285
Expect.pmとかopen3.rbとか・・・
最悪openptyで相当品を書けばいい。tccで書けばそれでもスクリプト。
287login:Penguin:2008/06/30(月) 23:41:54 ID:pVpnujlR
>>284
それじゃまずgrepを使ってあるユーザーの受信メールの行と送信メールをどうやったら切り出せるか
試行錯誤し、それが出来たらwc。 ひっかかったらgrepのmanページでまず回答を探す努力を。
awkとかのほうが色々柔軟性があるけどたぶん使った事無いでしょう。

あと>>3のリンク先をいくつかながめるといいと思う。
288login:Penguin:2008/06/30(月) 23:48:15 ID:hskJhfYi
初心者です。お願いします。

cutコマンドはファイルのみ使えますか?
変数にも使えるでしょうか。
変数に格納してある文字列からcut.grepを使いたいんですが。
289login:Penguin:2008/06/30(月) 23:49:01 ID:mYyaCshH
>>287
ご教示いただいた方法にて調べてみます。本当にありがとうございますm(__)m
290login:Penguin:2008/06/30(月) 23:54:15 ID:LE+io00E
>>286
それらはアプリでしょうか?
インストールが必要なのはNGなんです。
標準的なコマンドで実装できれば・・
291login:Penguin:2008/07/01(火) 00:23:35 ID:7AvBIvdb
>>278
plsとm3uは多くのプレイヤーが使ってる形式のようですから
お使いのプレイヤーにその機能がないか確認してはいかがでしょう。
プレイヤーをお使いでないならこういうものもあります。
ttp://freshmeat.net/projects/fapg/
ビルドにuriparserを求められますがconfigureに--disable-xspfを
つけると要らなくなります。
292login:Penguin:2008/07/01(火) 00:37:40 ID:F/ZP/0+B
>>278
外してるかもしれないのですがこれだけで十分ですかね

#!/bin/sh
streaming_name=$1

cat <<END >$streaming_name.pls
[playlist]
File1=http://www.example.com:8000/$streaming_name
Title1=nina
Length1=-1
NumberOfEntries=1
Version=2
END

cat <<END >$streaming_name.m3u
http://www.example.com:8000/$streaming_name
END
293login:Penguin:2008/07/01(火) 01:20:48 ID:DL3owd7E
>>288
$echo 1111 bbbbbb | cut -f1 -d ' '
で1111と表示できるからcutにパイプして
echo $var | cut -fx
で出来る

変数にファイル名を入れてる場合なら
cut -fx < $filename
でおk

あとはエスパーじゃないんで分からん
294login:Penguin:2008/07/01(火) 07:30:47 ID:/iSyGj3E
>>288
echoしてリダイレクト。基本。
295login:Penguin:2008/07/01(火) 10:01:29 ID:ckhBGtgF
質問です。
変数の中に=があったらそれまでの文字を出力したいんですが、

例)$1に abc=defg -> abcのみ出力
  $2に abcdefgh -> 何もせず

こういった場合、abcを取り出す(=の前までCUT?)事はできますか?
if(( grep '=' $1 ))
then
cut〜
みたいになるんでしょうか。お願いします。
296login:Penguin:2008/07/01(火) 10:12:23 ID:wSJ46Tmn
>>295
case "$1" in
*"="*) echo "$1" | sed 's/=.*//' ;;
esac
297login:Penguin:2008/07/01(火) 10:25:43 ID:sgtpdcHD
bashで
x=$1
p=${x%=*}
[ $x = $p ] || echo $p
298login:Penguin:2008/07/01(火) 10:28:44 ID:ckhBGtgF
>>296
即レス有難うございます!お陰様で出来ました^^
299login:Penguin:2008/07/01(火) 10:37:02 ID:wSJ46Tmn
>>297
それだと $1 が「/tm*/=xx」とかのときうまくいかない。
300login:Penguin:2008/07/01(火) 10:58:55 ID:HD46/kcy
>>295
>(=の前までCUT?)

>>296 で sed の例が出てるけど
cut -d "=" -f 1
とか
awk -F "=" '{print $1}'
とかでもできる。
301login:Penguin:2008/07/01(火) 11:57:13 ID:ckhBGtgF
>>296,>>297,>>300の皆さん有難うございます!
302login:Penguin:2008/07/01(火) 12:12:55 ID:ckhBGtgF
すみません、力を貸して下さい。
今やらなければならないのが、lsuser ALL を叩いて、
出力結果を見出し付で出力する(体裁を整える)です。

現在見出しの部分でつまずいています。

bin id=2 pgrp=bin groups=bin,sys,adm home=/bin
guest id=100 pgrp=usr groups=usr home=/home/guest
などを

user_name id pgrp groups

bin 2 bin bin,sys,adm
guest 100 usr usr

と言った感じです。=の前後でCUTし、前部分を見出しに、
後部分を見出しの下に出したいです。難しいのが、既に見出しにidがあるのに
また見出しにidが追加されてしまうんです。
どなたかサンプルを作っていただく、またはアドバイスを頂けますでしょうか。
よろしくお願いします。長文・乱文すいません。
303login:Penguin:2008/07/01(火) 12:33:08 ID:wSJ46Tmn
>>302
perl か何かで書いた方が早いと思う。
304login:Penguin:2008/07/01(火) 12:44:02 ID:ckhBGtgF
>>302
アドバイス有難うございます。調べてみます!
書き忘れたんですが、KORNシェルです。
305login:Penguin:2008/07/01(火) 12:46:37 ID:EG1sJMbp
実用的な答が欲しいならもう少し環境を書くべきだ.
bash,sed,awk,perlなどが使えるのかどうかとか.
それともシェルだけでアクロバティックにこなしたいのか?
306login:Penguin:2008/07/01(火) 12:50:08 ID:wSJ46Tmn
そもそも使ってる OS は何よ。
307login:Penguin:2008/07/01(火) 13:03:02 ID:Arg2/vlJ
>>292
ありがとうございます。バッチリでした。
いやー楽になった。っていうか勉強になりました。
みなさん、どういうところで構文を学んでいらっしゃるんでしょう?
この手のことについては完全に無学なもので、
どこからどう手をつけていいやら分かりません。
308login:Penguin:2008/07/01(火) 13:21:36 ID:wSJ46Tmn
>>307
テンプレくらい読め。
309login:Penguin:2008/07/01(火) 13:31:41 ID:ckhBGtgF
302です。環境はUNIX AIXです。そしてKORNシェルです。
310login:Penguin:2008/07/01(火) 13:39:10 ID:wSJ46Tmn
>>309
なら板違い。
311login:Penguin:2008/07/01(火) 13:42:53 ID:F/ZP/0+B
IFSに=を加えて行ごとにsetすると簡単
312login:Penguin:2008/07/01(火) 13:48:38 ID:ckhBGtgF
>>310さん すいません板違いでしたか。移動します。

>>311さん やってみます。有難うございます。
313login:Penguin:2008/07/01(火) 17:29:52 ID:0HA3LMf0
今日の宿題スレッドはここですか?
314login:Penguin:2008/07/01(火) 20:13:34 ID:sk7tfsLb
>>309
そういえばIBMのTivoli agent for Linuxをインスコしようとしたら
インストーラーがkshを必要としやがった。
315login:Penguin:2008/07/02(水) 07:58:38 ID:kAlrwjxr
>>302
俺には難しかった・・orz
誰か見本よろ
316login:Penguin:2008/07/02(水) 11:59:47 ID:t4E6Zbe3
>>302
#!/bin/sh
st=true
while read s
do
    rctop=null
    rc=null
    for n in $s ;do
        if [ $st = true -a "$rctop" = "null" ] ;then
            rctop=user_name
        fi
        if [ "$rc" = "null" ] ;then
            rc=$n
        else
            if [ $st = true ] ;then
                rctopadd=`echo -n $n | cut -d '=' -f 1`
                rctop=`echo $rctop $rctopadd`
            fi
            rcadd=`echo -n $n | cut -d '=' -f 2`
            rc=`echo $rc $rcadd`
        fi
    done
    if [ $st = true ] ;then
        echo $rctop
        st=false
    fi
    echo $rc
done
$./shellscript.sh < n.data

理想の動作じゃないだろうが
フォーマットをこっちが指定するやり方として…あとは整形の仕方だな
317login:Penguin:2008/07/02(水) 12:18:34 ID:15uy4jBz
>>312 で移動するって言ってるんだから
もうここで言ってもしょうがないんでは。
318login:Penguin:2008/07/02(水) 13:02:11 ID:t4E6Zbe3
('A`)スマソ
319login:Penguin:2008/07/02(水) 15:26:35 ID:BlTL/xTh
>>316>>317>>318
どこに行っていいかわからなくて、ちょくちょく覗いてましたw
>>316を参考にしたら、思ったとおりの動きをしてくれました。
本当に有難いっす。
320login:Penguin:2008/07/02(水) 15:29:18 ID:15uy4jBz
さっさと消えろ。

シェルスクリプト総合 その11
http://pc11.2ch.net/test/read.cgi/unix/1211284684/
321login:Penguin:2008/07/02(水) 18:57:00 ID:iGIzjxTr
質問です。

たとえば、
cat test
1
2
3
4
5

と表示されるシェルスクリプトがあったとして、それを
5
4
3
2
1

と表示させるにはどうしたらいいでしょうか?
322login:Penguin:2008/07/02(水) 18:59:10 ID:15uy4jBz
>>321
tac test
323login:Penguin:2008/07/02(水) 19:12:45 ID:iGIzjxTr
>>322
即答ありがとうございますっ
324login:Penguin:2008/07/02(水) 23:09:21 ID:tYZaCcmU
>>322
しっ、知らなかった... なんつー冗談ネーミング。 いつからあるの? 発祥はgnuかな。 Wikipediaにも
載ってない。
325login:Penguin:2008/07/02(水) 23:11:36 ID:tYZaCcmU
>>324
あ、あったわ。 tac(Unix)であった。
326login:Penguin:2008/07/03(木) 07:56:36 ID:HJXPhQch
Terrible-monster Attacking Crew
327login:Penguin:2008/07/04(金) 00:23:17 ID:Z8+RYNGO
cat tac
most more less
head tail
cut paste
pgp gpg
mail nail

言葉遊び系のコマンドペアって案外少ないんだな。
328login:Penguin:2008/07/04(金) 01:21:52 ID:7gcupJvt
if fi case esac

#ここはコマンド以前にシェルスクリプト スレだよな
329login:Penguin:2008/07/04(金) 01:24:49 ID:9pO2naUI
esac にはびっくりしたなーもー
330login:Penguin:2008/07/04(金) 05:28:59 ID:AeTu0vqB
逆文字でネストを表現するのはお手本となる言語があった気がする
331login:Penguin:2008/07/04(金) 08:23:27 ID:jR7hqKfT
プロセスをkillするシェルを作成しましたが、そのシェルそのものも引っかかってしまいます。

下記を実行すると、test のプロセスはKillされますが、
./kill_test.sh: line 6: kill: (17914) - No such process
と、エラーが出ちゃいます。
どのようにすれば、そのシェルそのものを検知しなくできますでしょうか。


例えば、test というプロセスをKillするプログラム

#!/bin/bash
# kill_test.sh
ID=ps axo pid,cmd | grep test | awk '{print $1}'`

if [ -n "$ID" ]; then
kill $ID
fi


実行結果
test のプロセスはKillされますが、エラーも出る
./kill_test.sh: line 6: kill: (17914) - No such process

332login:Penguin:2008/07/04(金) 08:32:51 ID:dZZeWoZr
>>331
pkill test
333login:Penguin:2008/07/04(金) 08:55:04 ID:jR7hqKfT
ありがとうございます。

プロセスはKillされますが こんどは Terminated と出ちゃいますが...


#!/bin/bash
# kill_test.sh

pkill test


334login:Penguin:2008/07/04(金) 16:17:24 ID:8eslOrWY
>>331
grep -v $$ とかやって
シェルスクリプトの pid を除く。

grep -v grep とか grep [t]est とかやって
grep の pid を除く。
335login:Penguin:2008/07/04(金) 23:59:25 ID:/fP/UZlP
most なんて初めて知ったよ。
ttp://www.jedsoft.org/most/
336login:Penguin:2008/07/05(土) 05:45:46 ID:zldIi++e
>>335
同じく
support multiple windowsの意味がわからんwww
337331:2008/07/05(土) 08:21:10 ID:f1ZF3ker

ps axo pid,cmd | grep test| grep -v ' grep' | awk '{print $1}'

で、できました。 m(._.*)mペコッ

 pkill 知りませんでした。pgrepも知ることができ感謝です 
338login:Penguin:2008/07/05(土) 15:47:51 ID:9A3h5Tdb
>>335
漏れも漏れも
can scroll left and rightの意味がわからん。
339login:Penguin:2008/07/05(土) 16:46:32 ID:QzBtt5r9
文字どおり左右にもスクロールできる、ってことじゃないのか
複数のファイルが見られるとか書いてあるし
ttp://www.slackbook.org/html/file-commands-pagers.html
340login:Penguin:2008/07/05(土) 19:44:37 ID:wIp47NAo
perlとかrubyとかpythonとかはシェルスクリプトよりも確かに優れてる面もたくさんあるけど、
classpathの設定とかで混乱する手間と暇を総合的に考えると、単純なシェルスクリプトの範囲内で
問題を解決する能力がある人のほうが貴重。
341login:Penguin:2008/07/06(日) 00:07:36 ID:H+bXS9E7
>>340
めんどいからさっさと結論を出すと、適材適所だな。

次の方どうぞ。
342login:Penguin:2008/07/06(日) 00:17:49 ID:KiLBqQPD
>>340
> classpathの設定とかで混乱する手間と暇
ちょっとまてw。perlとかrubyとかpython使ったことないだろ?
java男ご乱心。
343login:Penguin:2008/07/06(日) 00:19:29 ID:H+bXS9E7
>>342
例えばperlとかには@INCとかあるから、その辺のことを話したいんだろうと理解。

行間くらい読んでやれ。
344login:Penguin:2008/07/06(日) 00:29:37 ID:KiLBqQPD
>>343 行間読んでJython,Jrubyみたいな話かとおもた。あんなキモいもん認めん。
345login:Penguin:2008/07/06(日) 00:31:39 ID:fSJWsnfA
作るスクリプトが動かされる環境を予測できて,ちゃんと互換性をもたせる能力があればperlでもgnu依存でもなんでもいいよ.
346login:Penguin:2008/07/06(日) 00:33:14 ID:KiLBqQPD
それでもjavaライブラリ依存は認めない。
347login:Penguin:2008/07/06(日) 20:32:11 ID:Bp8Wp40b
テキスト処理について質問させてください
SQLを格納した以下のようなログファイルがあります。

select * from table1 where 名前='田中'
select * from table1 where 名前='佐藤' and 年齢 > 20
select * from table1 where 名前='鈴木'

これの条件部分('田中'とか'佐藤'の部分)を'*'に一括で変更する方法はありますか?
環境としてbash、awk、sedは使えますがperlは使えません。
よろしくお願いします
348login:Penguin:2008/07/06(日) 21:12:08 ID:9FSHXxTH
$sed "s/名前='.*'/名前='*'/g" hoge > foo
$mv foo hoge
349login:Penguin:2008/07/06(日) 21:36:34 ID:7sKhRIVr
>>348
$ sed -i "s/名前='.*'/名前='*'/g" hoge
350login:Penguin:2008/07/06(日) 21:42:16 ID:9FSHXxTH
そのオプションマニュアルに載ってないな、初めて知った勉強になりました
351login:Penguin:2008/07/06(日) 22:12:09 ID:ksmXqbT3
再起動(shutdown -r now)後、
数分後に指定シェルを起動させたいのですが、
何か良い方法ないでしょうか?
centos4で、
/etc/rc.local
に記述すると即時起動は可能なのですが、
時間指定ができないため悩んでおります。

再起動を行うのが一定時刻ではないので
atも使えません。

どなたかお助けくださいませ。
352login:Penguin:2008/07/06(日) 22:14:33 ID:fSYsy/u2
>>351
sleep
353login:Penguin:2008/07/06(日) 22:21:54 ID:WvrNzaWB
>>348-349
ありがとう
354login:Penguin:2008/07/06(日) 22:28:07 ID:fMUp8CRa
>>351
at now + 数 minutes
などと /etc/rc.local に書いたらどうだろう。
355351:2008/07/06(日) 22:45:55 ID:ksmXqbT3
>>352
>>354
サンクスコです!!
試してみます!!
356login:Penguin:2008/07/07(月) 21:33:14 ID:pcTeT086
uClinux2.6上のBusyBoxのmshというシェルで質問です。
BusyBoxのバージョンは以下です。
BusyBox v1.4.1 (2008-06-02 10:22:52 CST) Built-in shell (msh)

mshでループ処理をさせていると、いつのまにか
Shell input nested too deeply
というエラーになり、スクリプトのプロセスが死んでしまうのですが、
何か良いやり方はあるでしょうか。

やりたい事は、アプリケーションの裏方で、1秒毎にサーバに
pingを打つなどしてネットワークが見えているかを確認し、
通じないならリカバリをするポーリング処理です。
autorun.sh内からsrvwatch.sh &として起動しています。

srvwatch.sh
--------
#!/bin/sh
server=192.168.0.1
while [ 継続条件 ]
do
ping $server -c 1
if [ $? != 0 ]; then
# ( pingが通じない時の処理 )
fi
sleep 1
done

最悪、他のシェルが使えない事もないのですが、mshで解決できれば
それに越したことはないので、よろしくお願いします。
357login:Penguin:2008/07/07(月) 21:34:48 ID:2WJ5nXyr
>>356
キリの良いところで別のスクリプトにして子プロセスとして動かせば?
358login:Penguin:2008/07/07(月) 21:44:55 ID:pcTeT086
>>357
なるほど。
例えばアプリケーション内のループをトリガにできれば問題を回避できそうですね。
その方向で検討してみます。
359login:Penguin:2008/07/13(日) 16:02:53 ID:XKteJijz
quotaのedquotaだとテキスト形式でエディタで編集しなきゃいけないですが、
コマンドのみで指定ユーザを指定容量に変更、ってどうすればできるでしょうか?

360login:Penguin:2008/07/13(日) 18:28:58 ID:Ixz1lkH8
実は、ここは「シェルスクリプト総合」スレ。
361login:Penguin:2008/07/13(日) 23:41:37 ID:2nzKAI8F
a,1
a,2
b,3
c,1
d,15
d,1
d,1
e,3

こんな感じのファイルを、1カラム目でユニークにして、2カラム目は1カラム目の値ごとに合計を出したい
という場合なんですが、シェルではむずいですか?

a,3
b,3
c,1
d,17
e,3

この結果を求めてます
362login:Penguin:2008/07/14(月) 00:16:50 ID:pAKMtVeu
いいえ 容易です
363login:Penguin:2008/07/14(月) 08:20:36 ID:Nv/tP5Or
>>361
cutとsort、uniqでキーのリストを作る。
grepとcutでキーごとの値を得る。
それをexpr
364login:Penguin:2008/07/14(月) 16:52:54 ID:6AUtGr7x
>>361
awk 使えば〜
365login:Penguin:2008/07/14(月) 18:28:30 ID:Mh/R7fAz
>>361
awk -F, '{dat[$1]+=$2}END{for(i in dat) print i","dat[i]}' hoge
366login:Penguin:2008/07/17(木) 15:31:48 ID:8xNJ++Yc
指定した変数の中に、ある文字列があれば〜
という条件式、どのように書けばいいですか。
367login:Penguin:2008/07/17(木) 15:59:24 ID:RxW1jeOx
#!/bin/sh

hoge=$1
hogehoge=$2

if [ `echo $hoge | grep $hogehoge` ]; then
echo "$hogehoge exist in $hoge"
fi
exit 0
368login:Penguin:2008/07/17(木) 16:09:53 ID:RxW1jeOx
と思ったけど >>228 のほうがいいな
369login:Penguin:2008/07/17(木) 20:02:22 ID:8xNJ++Yc
>>367
ども
ですが、ひとつ質問です

たとえばhogeにunko is
hogehogeにu

とした場合、ちゃんと動かないですがこれはどう扱えばいいですか。
370login:Penguin:2008/07/17(木) 20:35:02 ID:IIv1XTjU
よろしくおねがいします

bkfile=$dest/$2.$timestamp.tar.gz

tar cpzf $bkfile $1 >/dev/null 2>&1

if [ $? != 0 -o ! -e $bkfile ];

ここのでの
if [ $? != 0 -o ! -e $bkfile ];

意味を教えて下さい、エロイヒト
371login:Penguin:2008/07/17(木) 20:49:36 ID:wB0Vu+2C
372login:Penguin:2008/07/17(木) 21:05:28 ID:6zoBsCIm
それも、変数に 'unko is' を入れられない糞スクリプトだね。
373login:Penguin:2008/07/17(木) 21:10:39 ID:IIv1XTjU
$? != 0 -o
は終了ステータス
! -e $bkfile
はファイルで無い場合
すなわち
終了ステータスがO以外、且つ、bkfileがファイルの場合
ということでok?
374login:Penguin:2008/07/17(木) 21:14:48 ID:ZrSZoUoY
>>372
unkoは入れるものじゃなくて出すものだからな

#/bin/sh

hoge=$1
hogehoge=$2

if [ "`echo $hoge | grep $hogehoge`" = "$hoge" ]; then
echo "$hogehoge exist in $hoge"
fi
375login:Penguin:2008/07/17(木) 21:21:49 ID:wB0Vu+2C
>>373
終了ステータスが0以外、もしくは、$bkfileファイルが存在しない場合
376login:Penguin:2008/07/17(木) 21:27:09 ID:IIv1XTjU
>>375thx
if [ $? != 0 -o ! -e $bkfile ];
[ $? != 0 ]且つ [-o ! -e $bkfile ]
-oの意味と
[ $? != 0 -o ! -e $bkfile ]; スクリプトの区切り方がわかんらんのですが・・・
面倒かけてスマソ
よろしくお願いします
377login:Penguin:2008/07/18(金) 00:26:56 ID:djfoTRoL
>>374
助かりましたどうもです。
378login:Penguin:2008/07/18(金) 00:47:41 ID:JinxhkI+
>>376
man test で -o を探せ。
379login:Penguin:2008/07/23(水) 12:37:01 ID:AKylUJRP
「あるディレクトリにAA.bbというファイルがなかったら
 AA.ccというファイルを削除する」
これをどう書いたらいいか教えてください
380login:Penguin:2008/07/23(水) 12:42:19 ID:XuVewefN
[ ! -f AA.bb ]
rm AA.cc
381login:Penguin:2008/07/23(水) 12:43:53 ID:x1Crms/C
宿題は自分でやりなさい。
382379:2008/07/23(水) 21:51:48 ID:AKylUJRP
>>380
ありがとうございます!できました。


別件でもう一つ教えてください。
「m2eという拡張子のものをコンバート(m2t化)、成功したらm2eを削除する」
というスクリプトを書きました。

#!/bin/sh
for file in *.m2e
do
/usr/local/bin/b25 $file ${file%m2e}m2t
EXITCODE=$?
if [ 0! = $EXITCODE ]; then
rm -f $file
fi
done

m2eファイルは複数あるんですが、4行目でありったけのm2eを処理し終わらないと
5行目以降の処理に進まないようで、
m2eを削除することなくばんばんm2tができていきます。

これを、1ファイルごとの処理にするにはどこを変えたら良いでしょうか・・・?
383login:Penguin:2008/07/23(水) 21:59:02 ID:XuVewefN
>>382
>381

in `ls *.m2e`
384login:Penguin:2008/07/23(水) 22:18:42 ID:jePbQOfG
分からない時は変数を出力してみるといいよ!
385login:Penguin:2008/07/23(水) 22:22:18 ID:Ec8ZyKSx
終了判定の if文がおかしいから、rm行が実行されないのでは?
sh -x script
してデバッグしてちょ。
386379:2008/07/23(水) 23:27:36 ID:AKylUJRP
皆さんほんとありがとうございます。
sh -x すら知りませんでした。超便利ですねこれ…。
で、b25コマンドが成否に関わらず終了コード0を返していました。
成功したら1を返すだろうという先入観が敗因でした。

今日教わったことを踏まえ以下のとおりにしたら成功しました。

#!/bin/sh
for file in `ls *.m2e`
do
/usr/local/bin/b25 $file ${file%m2e}m2t
if [ -f ${file%m2e}m2t ]; then
echo complete
rm -f $file
else
echo fail
fi
done

初めて書くシェルスクリプトですが、おかげさまで思ったとおりできました。
どうもありがとうございました。
387login:Penguin:2008/07/23(水) 23:30:38 ID:bXJC8PaP
>>383
ls する必要あるか?
388login:Penguin:2008/07/23(水) 23:31:06 ID:HicxYVC5
>>386
蛇足かもしれんが、成功したときの終了コードは0だ。
389login:Penguin:2008/07/24(木) 01:05:36 ID:cIOzBtbq
空白を含んだファイル名の処理がおかしくなるので,ls しない方がベター。
元の
> for file in *.m2e
のままでよい。

>>382
= の否定は != ね。
! と = の間に空白を入れてはいけないよ。
390login:Penguin:2008/07/24(木) 08:32:37 ID:BJInmIaX
>>387-389
遅いよおまいら。
遅刻の罰として、5分毎にこのスレの新規書き込みをチェックするスクリプトを上げること。
bashの内部コマンド以外は使ってはいけません。
391login:Penguin:2008/07/24(木) 10:40:03 ID:jtU4rAt4
curlも使っちゃいかんのかい・・・
392login:Penguin:2008/07/24(木) 20:20:13 ID:Hhban5lk
あきまへん。bashのソケットで。
393login:Penguin:2008/07/24(木) 22:02:07 ID:pIyY20xI
wgetは認められるはず。
なんせ左手だけで入力できるんだぜ?
394login:Penguin:2008/07/24(木) 23:00:05 ID:yNUWiOQr
>>392
詳しくは知らないけど/dev/tcp/host/portじゃダメかな?
395login:Penguin:2008/07/25(金) 08:02:37 ID:5wHuLUjg
ええのではないでしょうか
bashでcurlを代替するには、それで双方向ソケットを実現するしか多分ないだろうから。
396login:Penguin:2008/07/30(水) 16:48:07 ID:JUVwIDuC
あるファイルの、ファイル名を先頭から10文字分取得してOSの変数に入れたいのですが
拡張子もない日時そのままのファイル名(080730151530 とか)なので
for文すら書けずにいます。
どう書いたらいいですかと聞ける段階にもないのですが、
こういったファイル名の扱い、前方一致のさせ方について
参考になりそうなサイトなどないでしょうか?
397login:Penguin:2008/07/30(水) 17:37:14 ID:8Rj3UHKM
まずは正規表現について学ばれるといいと思います
398login:Penguin:2008/07/30(水) 17:47:11 ID:sE7Hyt0D
#!/bin/sh
tmp="9999444422228888"

for file in ${tmp}; do
#先頭から8文字目まで切り出し
echo ${file} | cut -c 1-8;
done

プロトタイプつくって、色々試してみるといいかもよ
あとは、tmpをどのように持っていくか

find使いたかったら
tmp=`find -tpe f`
とかだろうし
色々やってるうちに、スペースが入ったファイル名とかで疑問もでてくるだろうし
399login:Penguin:2008/07/31(木) 02:05:26 ID:kxeNsmhd
目的のファイルがあるディレクトリで(そのディレクトリに cd して)
スクリプトを実行するという前提で、、、

for FILE in *
で、そのディレクトリにある隠しファイル以外のファイルの名前が順に変数 FILE に入る。
拡張子のあるなしは関係ない。

もし、日時そのままのファイル名(数字12文字のみからなる?)以外のファイルが
ディレクトリ内に存在する場合には、以下のような if 文で弾く。
if echo $FILE | grep '^[0-9]\{12\}$' > /dev/null

あとは>>398のを組み合わせて全体はこんな感じ。


#!/bin/sh

for FILE in *
do
    if echo $FILE | grep '^[0-9]\{12\}$' > /dev/null
    then
        echo $FILE | cut -c 1-10
    fi
done
400login:Penguin:2008/07/31(木) 10:18:05 ID:JpgVGgaY
そもそも CUI 環境の UNIX, Linux に拡張子という概念は無いと思われます。
401login:Penguin:2008/07/31(木) 14:53:26 ID:a31/vqCD
概念という言葉が適切かどうか。
402login:Penguin:2008/07/31(木) 15:54:04 ID:SAvKwoDD
kakutyou.c
403login:Penguin:2008/07/31(木) 16:54:35 ID:CDeZt19d
>CUI 環境の UNIX, Linux に拡張子
CUIと拡張子に何の関連があるんだ。
MS-DOS時代には拡張子が無かったという主張なのか。
404login:Penguin:2008/07/31(木) 17:22:53 ID:JpgVGgaY
>>403
文字通りの意味だよ
KDEなど使用したX環境では拡張子を判断してプログラム動作を変えるものが一部にあるからね

もう一度言うが、「文字通りの意味」だ
そんなに解らん日本語だったかね
405login:Penguin:2008/07/31(木) 17:24:39 ID:FFTlQwAQ
mailcapはあるけど
406login:Penguin:2008/07/31(木) 17:26:02 ID:+AWBOmCl
拡張子ではなく suffix だ、とかそういう話じゃなかったのか。
407login:Penguin:2008/07/31(木) 17:29:51 ID:6oedF87g
>>404
胸張って屁理屈言ってどうするかね。

大人気なく反例を提示するなら、CUIで動く代表的なプログラムであるgccは拡張子を見て呼ぶコンパイラを変えたりするが、見解を求む。
408login:Penguin:2008/07/31(木) 17:35:59 ID:JpgVGgaY
>>407
めんどい
409login:Penguin:2008/07/31(木) 18:09:02 ID:RztDzhJY
>>407
座布団あげる。
柔軟だというだけだよね。
410login:Penguin:2008/07/31(木) 18:18:49 ID:6oedF87g
gzipも拡張子見るなw
411login:Penguin:2008/07/31(木) 18:21:00 ID:9ySiTva1
make !! , make !!
412login:Penguin:2008/07/31(木) 20:26:30 ID:54icAPXL
ID:JpgVGgaY 恥ずかしいなw
全部言い返されてやんの
413login:Penguin:2008/07/31(木) 22:03:49 ID:zM7TOaQk
>>406
拡張子でなく接尾辞だという点には誰も異論だ無いんじゃないか。

>KDEなど使用したX環境では拡張子を判断してプログラム動作を変えるものが一部にあるからね
などと強弁してるのを皆に笑われているだけで。
414login:Penguin:2008/07/31(木) 23:00:46 ID:XBLFfbqE
hoge.gz.20080101 を gunzip しようとしたら怒られましたよ
415login:Penguin:2008/07/31(木) 23:27:25 ID:9ySiTva1
>>413
gcc も gunzip も manページの表現は接尾子でもsuffixでもなく、「拡張子」ですな。
416login:Penguin:2008/07/31(木) 23:30:11 ID:F09gGQyB
もう いじめはやめましょうw
417login:Penguin:2008/07/31(木) 23:43:03 ID:W0fu7NON
>>415
そら、まあ
C:\>gzip.exe -dc < hoge.gz > hoge
なんてときの .gz は拡張子だもの。
というか、実のところ「拡張子」という呼称が既に人口に膾炙してるから、そう表現してるんじゃないかな。
たぶん、>>406の言ってることはもっと厳格で、FAT(だっけ?)には8文字のファイル名と3文字の拡張子を入れる覧があるが、inodeにはファイル名覧しか無いといったことだと思うよ。

あっと、俺は ID:JpgVGgaY ではないよ。話をたどれば分かると思うが。
418login:Penguin:2008/07/31(木) 23:50:25 ID:9ySiTva1

>>417
>>417≠ ID:JpgVGgaYは了解しています。直接レスつけるのは忍びなかったので。
あとsuffixつーとドメインネーム則なんかのジャンルも含む気がして
ちょっと拡張子とはニュアンスが違うと思いました。
419login:Penguin:2008/08/01(金) 00:09:05 ID:Z+D1IjNX
>>415
suffix って表現もあるじゃん。
extension と混在してる。
420login:Penguin:2008/08/01(金) 07:18:11 ID:K/umwhS+
まぁまぁ、404のオモシロ発言でもたどって和んで。
>>400
  そもそも CUI 環境の UNIX, Linux に拡張子という概念は無いと思われます。
>>403
  >CUI 環境の UNIX, Linux に拡張子
  CUIと拡張子に何の関連があるんだ。
  MS-DOS時代には拡張子が無かったという主張なのか。
>>404
  >>403
  文字通りの意味だよ
  KDEなど使用したX環境では拡張子を判断してプログラム動作を変えるものが一部にあるからね
421login:Penguin:2008/08/01(金) 09:33:44 ID:9ncfYug9
人口に膾炙←読めない
422login:Penguin:2008/08/03(日) 20:26:52 ID:z2v8StjQ
ループか?
ループスレなのか?うひょーーーーーーーーーー
423login:Penguin:2008/08/05(火) 09:41:49 ID:GjmRcMaB
拡張子はファイル名の接尾辞として使われるっていう、ただそれだけの話。
424login:Penguin:2008/08/05(火) 11:31:30 ID:P4vieYD2
*.bak と *~ で見た目は違うが用途はほぼ同じなんだけど
*.1 *.2 … はlogとmanで意味合いが変わるもんな
425login:Penguin:2008/08/10(日) 15:12:11 ID:3WlJmUth
bash の配列の話です。
添え字を付けて定義すれば要素がかけた配列を作れますよね?

x=(a b c)
x[4]=e
x[6]=g

こんな風に定義すると要素の数 ${#x[@]} は 5 を返しますが
実際には x[6] まで定義されているわけです。

こういう歯抜けの配列から添え字と要素をセットで全て取り出す方法
何かありませんか?

for i in ${x[@]} ; do echo $i ...
だと添え字がわかりません。

for (( i=0 ; i < ${#x[@]} ; i++ )) ; do echo ${x[i]} ...
だとかけた部分に対応できません。

bash の配列処理が貧弱なのは知っていますが
何か知恵がありそうな気もするんです。
426login:Penguin:2008/08/10(日) 16:39:06 ID:YtTqhIm8
>こんな風に定義すると要素の数 ${#x[@]} は 5 を返しますが
うちでは 6 になる。
$ set
x=(a b c e '' g)
なので、
x[5]が空だからきっと代入されなかったんだろう
という判断しか思い付かない。
427426:2008/08/10(日) 19:20:40 ID:OrrhkboJ
読み返すと我ながらバカな日本語でイヤになった。式で書く

for ((i=1; i <= ${#x[@]}; i++))
do
 if [ "${x[i]}" != "" ]; then echo "$i ${x[i]}"
という判断文を付け加えることぐらいしか思い付かない。
428login:Penguin:2008/08/10(日) 21:22:42 ID:3WlJmUth
>>426
>> こんな風に定義すると要素の数 ${#x[@]} は 5 を返しますが
> うちでは 6 になる。

あれ?自分の環境 (bash 2.05b @ debian) では 5 なんだけどな。
そちらの環境を教えてくれますか?
429login:Penguin:2008/08/10(日) 21:51:14 ID:uOwkyJaM
あ、ごめん。zsh でやっていた。

bash で set すると、
$ set
x=([0]="a" [1]="b" [2]="c" [4]="e" [6]="g")
で、添え字と要素がセットでズバり出るじゃないですか。
430login:Penguin:2008/08/10(日) 23:04:19 ID:3WlJmUth
>>429
ああ、そうでした。確かに表示されますね。

[] とか = とか変な文字が要素に入らないという前提なら
そこから添え字のみを取り出せればいけそうですね。
431login:Penguin:2008/08/14(木) 21:23:54 ID:6SkumsSk
基本的なことで、すいまん
bashで、たとえば
# login : root
# passwd : foo
なんて場合、シェルからの問い合わせに対して、スクリプト側で
rootやfooを自動的に入力したいのですが、どのように書いたらいいのでしょうか?
432login:Penguin:2008/08/14(木) 21:24:45 ID:6SkumsSk
BATU 基本的なことで、すいまん
MARU 基本的なことで、すいません
433login:Penguin:2008/08/14(木) 21:44:42 ID:Q5H0d7m9
>>431
expect
434login:Penguin:2008/08/14(木) 21:52:17 ID:6SkumsSk
>>433

イクスペクトですか、ありがとう
435login:Penguin:2008/08/17(日) 13:04:54 ID:id1iDBNz
>>433
bashで
436login:Penguin:2008/08/18(月) 22:17:27 ID:P4gPyZDt
グループ sumo が存在するか? を調べる方法が思いつかない。
ユーザ hakuho の存在を調べるのは、
id hakuho
などとやろうと思うが、グループの方をhelp!!
grep /etc/group はやりたくない。
437login:Penguin:2008/08/18(月) 23:25:02 ID:Wi4hQzW9
>>436
くだらねえ質問はここに書き込め! Part166
http://pc11.2ch.net/test/read.cgi/linux/1217051698/
438login:Penguin:2008/08/18(月) 23:35:20 ID:tdXNnNro
LANG=C chgrp hakuho / 2>&1 | grep -q '^chgro: invalid group' || echo ok
439login:Penguin:2008/08/19(火) 08:01:52 ID:GbBy+Szp
chgrpされたら困るやん。
440login:Penguin:2008/08/19(火) 08:17:46 ID:yV2lM3C5
root じゃなきゃ大丈夫でしょ。
441login:Penguin:2008/08/19(火) 11:14:23 ID:i/uDMj66
んな罠みたいなスクリプトはちょっと。
442login:Penguin:2008/08/19(火) 11:19:47 ID:yV2lM3C5
他に思いつかないんだよな。
素直に /etc/group を grep するのが一番だと思う。
443login:Penguin:2008/08/19(火) 11:30:56 ID:Z4idUwk9
grep /etc/group はやりたくないそうだから仕方ない
444login:Penguin:2008/08/19(火) 11:31:37 ID:yV2lM3C5
NIS とか LDAP とか使ってるなら
perl あたりで getgrnam とか。
445login:Penguin:2008/08/19(火) 22:33:06 ID:/3aOZv4D
NISもLDAPも使ってないが、これは良いかもしれない。ありがとう。
$ perl -e '($n, $p, $g, $m) = getgrnam 'lp'; printf "%s\n", $g'
7
446login:Penguin:2008/08/21(木) 00:34:13 ID:uS1Qpazh
bash使ってるのですが
lsすると何も返ってこないです

set +mするとかえってきます
何が悪いのかさっぱりわかりません
447login:Penguin:2008/08/21(木) 02:06:11 ID:hLnB3a+h
>>446
type ls するとどう出る?
448login:Penguin:2008/08/25(月) 22:22:20 ID:q8+dK05f
echo $"Starting XXXX daemon..."

という一文の「$」の意味を解しかねてるんだども…
449login:Penguin:2008/08/25(月) 22:30:19 ID:TaEIkWlk
% echo $"Starting XXXX daemon..."
$Starting XXXX daemon...
% echo "$Starting XXXX daemon..."
XXXX daemon...
%
450login:Penguin:2008/08/25(月) 22:34:16 ID:i+OsnagO
>>448
ja.po とか作るときに
$" " で囲んだところが
翻訳の対象として切り出される。

メッセージ カタログ化
とかでググれ。
451login:Penguin:2008/08/25(月) 23:32:42 ID:w1+LX6rA
これすか…
bash(1)
> --dump-po-strings
> Equivalent to -D, but the output is in the GNU gettext po (portable object) file format.

試しに /usr/share/locale/ja/LC_MESSAGES/XXXX.mo を作ってみたが、日本語にならない。
あうあう。。。
「$」はぶった切ることにします。
452login:Penguin:2008/08/25(月) 23:49:02 ID:i+OsnagO
>>451
急ぎじゃなかったら少し頑張ってみるといいかも。

前作ったもの見たらこんな感じで作業してたらしい。
$ xgettext -o hoge.po hoge.sh
$ gtranslator hoge.po
$ msgfmt -o hoge.mo hoge.po

hoge.sh の中にはこんなのが書いてあった。-->
if [ -z "$TEXTDOMAIN" ] ; then
TEXTDOMAIN="hoge"
TEXTDOMAINDIR="/usr/share/locale"
fi
<--

TEXTDOMAIN="hoge.sh" じゃなくて
TEXTDOMAIN="hoge" にしてあるのは
hoge.sh をインストール時に /usr/bin/hoge に改名(hoge.sh から hoge に)するため。
453login:Penguin:2008/08/26(火) 23:01:28 ID:JsSv3XDz
gtranslator てのが無かったので、
$ sh --dump-po-strings XXXX > ~/XXXX.po
とし、msgfmt 以降同様にすると日本語になりました。
どうもありがとう。
454login:Penguin:2008/08/31(日) 15:42:27 ID:aoYJcwTK
?$
455login:Penguin:2008/09/01(月) 09:58:54 ID:LEXE4Xrt
C言語でいう
for (float a=0.1;a<1.5;a+=0.1){
}
の様なループはどのように書けばよいのでしょうか?
456login:Penguin:2008/09/01(月) 10:38:54 ID:zLmvj5ED
>>455
小数とか使いたいなら
もっとまともな言語使った方がいいよ。
457login:Penguin:2008/09/01(月) 12:17:57 ID:qt+GSvTX
for i in `seq 1 20`
do
i=`echo "scale=1; $i / 10" | bc`
echo $i
done
458login:Penguin:2008/09/01(月) 17:56:42 ID:gt+0kg/y
やっぱループ変数は整数だよな。
少数は気持ち悪い。
459login:Penguin:2008/09/01(月) 23:52:23 ID:yMJ8hMF5
$ cat aso
killall fukuda
460login:Penguin:2008/09/02(火) 01:01:15 ID:iTMiNYXN
>>458
気持ち悪いどころか、有害。
for(float a=0;a<=1.0;a+=0.1){printf("%g ",a);}
⇒ 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
461login:Penguin:2008/09/02(火) 02:16:22 ID:NrY9TL/o
>>460
勉強になります。
使った事ないし、使う場合はテストするのでだいじょぶだけど。
でも絶対やらんよねw Cやってるやつは。
すれち
462login:Penguin:2008/09/02(火) 04:38:59 ID:dzMMfnry
bcで計算させたとき、0以下の小数は最初の0を抜いた.2のように表示されますが、 
0.2の様な表示にはできませんか? 
463login:Penguin:2008/09/02(火) 09:52:47 ID:bHR8SDTE
0 ≧ .2 なのか。
464login:Penguin:2008/09/03(水) 00:04:05 ID:aqC4nv+U
>>463
浮動小数点の比較を工夫なく行う奴はアホ。
465login:Penguin:2008/09/05(金) 21:49:46 ID:eUOT1mPo
sed を | で つなぐんじゃだめ?
466login:Penguin:2008/09/06(土) 00:00:19 ID:x4tIq2Vd
#!/bin/sh
echo '%A4%A2' | tr % = | nkf -emQ

「あ」と表示させたいのですが、「、」」と表示されてしまいます。
正しい書き方を教えてください。
467login:Penguin:2008/09/06(土) 05:03:55 ID:/FPWBzOe
うち(EUC環境)では「あ」と表示される。
468login:Penguin:2008/09/06(土) 08:59:05 ID:6Sr65r/p
>>466
テキストに落とすとEUCで「あ」に見える
469login:Penguin:2008/09/06(土) 23:40:32 ID:O24UR7Eo
>>466 の環境がUTF-8なら
#!/bin/sh
echo '%A4%A2' | tr % = | nkf -wmQ
470login:Penguin:2008/09/08(月) 22:09:56 ID:tYV0ghqH
引数 output-file input-file1 input-file2 ...
を受け取ってinput-fileN に some-dir/ を付加したコマンド引数を他のプログラムの引数として与えたいのです。

つまり、
 foo yaruo.out vip.txt vipper.txt vippest.txt
でfooを実行して、そのfoo内では
 bar yaruo.out www/vip.txt www/vipper.txt www/vippest.txt
を実行するということがしたいのです。

こんなスクリプトを作成するには、fooをどのように記述すればいいのでしょうか。
よろしくお願いします。
471login:Penguin:2008/09/08(月) 22:27:43 ID:UFg0tXoN
もう宿題の季節なのか?一箇所直してから使ってくれ。

#!/bin/bash
org=www; ARG1=${1}; shift; echo bar ${ARG1} ${@/#/${org}/}
472login:Penguin:2008/09/08(月) 22:50:15 ID:4IH3dQd+
>>470
あのね、
宿題を出す先生は、このスレもチェックしてるからね、
>>471 のを出しても 0 点だからwww

ゆっくり 0 点にしてってね!
473login:Penguin:2008/09/08(月) 22:54:09 ID:tYV0ghqH
>>471
残念ながら宿題ではないのです〜

ありがとうございました。
474login:Penguin:2008/09/08(月) 23:03:49 ID:QeMmaTeA
うちの大学の先生はプログラム板も見ていた
475login:Penguin:2008/09/08(月) 23:09:05 ID:/XLojU6V
先生も激務だな
476login:Penguin:2008/09/08(月) 23:45:08 ID:lCRZh05X
悪いな、おいらは数学板だけでなく、
日本語のあらゆる数学質問掲示板を巡回している。
必ず学生が質問をしやがるから。

レポートを返すときに、そのスレおよび掲示板のコピーを添付して、念のため確認をとる。
初めから正直に引用したと書いてあるものについては、改めて口頭で説明させている。
477login:Penguin:2008/09/09(火) 08:43:21 ID:7p63VvoV
院生にやらせそうな案件だな
478login:Penguin:2008/09/11(木) 23:43:43 ID:6JSrg1Nn
実際に教授がやってたら笑いものだな。
そこまで熱心にありがとうございます、と学生ながらに思うべきか。

ただ、ねぇ・・・
479login:Penguin:2008/09/12(金) 01:07:51 ID:Hfrl7+Fx
>>478
いや、日本だけってわけでなく海外でも今や引用元チェックとか行っているよ。
480login:Penguin:2008/09/12(金) 18:08:43 ID:9WCeRGBW
へー
481login:Penguin:2008/09/12(金) 21:11:04 ID:lKrrIxw4
3年前ほどにアメリカのテレビドラマで高校の先生がエッセイの宿題を返す場面を見た。
ある学生に返しながら、「素晴らしいエッセイだったわ。 essay.com(のような感じ)ね?
月曜までに自分で書いて来てね」
482login:Penguin:2008/09/13(土) 02:57:01 ID:+1Gk57wR
問題も自分で作ってね
483login:Penguin:2008/09/19(金) 18:18:28 ID:0H1973GE
>>479
手作業じゃないよね。日本語を解析できるツールはまだできてないよ。
484login:Penguin:2008/09/25(木) 00:19:59 ID:t0y6Jov+
fdisk /dev/sdb
n
p
1
w

↑こんな感じで、入力させていきたいのですが、
方法がわかりません。キーボード 入力 シェル スクリプト
あたりでぐぐると、キーボードからの入力を受け付ける、しか見つかりませんでした。

方法を教えてください。
485login:Penguin:2008/09/25(木) 01:43:59 ID:Khd+tIc7
>>484
expect
486login:Penguin:2008/09/25(木) 09:57:28 ID:fRZ/kmS9
>>484
sfdisk
487login:Penguin:2008/09/25(木) 19:47:43 ID:wpIij73K
>>484
>> EOF
488login:Penguin:2008/09/25(木) 19:55:28 ID:oa1dgrD9
( echo n; echo p; echo 1; echo w ) | fdisk /dev/sdb

入力が端末かどうかちゃんとチェックしてるようなモノだと動かないが、
fdisk はそんなことしてなかったはずなので、ふつーに標準入力からつっこめばよし。
489login:Penguin:2008/09/27(土) 00:45:11 ID:9WMmgXah
ゴミ箱スクリプト使ってるひといる?
490login:Penguin:2008/09/27(土) 01:12:09 ID:s/QKRkEt
あい。
491login:Penguin:2008/09/28(日) 03:42:58 ID:yjLf4XT+
ゴミ箱に入ってるファイルを復元させるやつなら使ってる
492login:Penguin:2008/09/29(月) 04:13:28 ID:nMbRNXLX
ティルダ(~)展開について質問。

#!/bin/bash

ls ~/

directory="~/"
ls $directory

上側のように直接書いたものは展開されますが、下側のように変数に入れたものは展開されません。
変数に入った「~」を展開するにはどうすればいいのでしょうか。
493login:Penguin:2008/09/29(月) 04:17:44 ID:dNtmh/2+
directory=~/
494492:2008/09/29(月) 08:48:30 ID:dqlgrzbc
うわ、そんなことだったのか。ありがとうございます。

では、read directory; などでファイルから読んだ場合はどうすればいいんでしょう。
495492:2008/09/29(月) 10:56:52 ID:dqlgrzbc
あ、わかりました。eval 使えばいいんですね。
ファイルからティルダ(チルダ)含んだパスを読み込むことなんかよくあると思うんだけど、
そういったシチュエーションでの展開は解説されてませんねえ。
基本的な展開の話ばかりで。
496login:Penguin:2008/09/29(月) 11:06:17 ID:6KBzfDQe
eval
って書こうとしたら自己解決してたか。

>ファイルからティルダ(チルダ)含んだパスを読み込むこと

俺は経験無いけど、良くあることなの?
497login:Penguin:2008/09/29(月) 12:14:07 ID:PrjYZQYT
> 俺は経験無いけど、良くあることなの?

んー、俺もそもそもスクリプトはあんまり書かないんだけど、
ちょっと今回必要があって、とあるファイルにつらつらと書かれたパスに対して
順番に処理かけていくスクリプトを組んだ。

よくあるかと思ったのは単なる想像。使ったスクリプトが悪かったかな?
498login:Penguin:2008/09/29(月) 12:15:02 ID:PrjYZQYT
アレ、ID 変わってる。
>>495 です。
499login:Penguin:2008/09/29(月) 13:09:37 ID:M1tw2hRO
むしろ勝手に解釈されたら困ることの方が多そう。
500login:Penguin:2008/09/29(月) 17:00:59 ID:DE65cKXI
$HOMEの方がいいと思う
501login:Penguin:2008/10/14(火) 23:13:02 ID:IUh0ZsYq
16進数がずらーっと並んでいるテキストファイルを手で入力しています。

手入力なのでうっかり16進数の[0-9a-f]以外の文字がはいってしまうこと
があるのですが、「このファイルには[0-9a-f]以外がはいってる」ということ
を検出するいい方法はないでしょうか。
502login:Penguin:2008/10/14(火) 23:18:11 ID:peqExbxa
とりあえず grep -v '[0-9a-f]' みたいな
503login:Penguin:2008/10/14(火) 23:55:57 ID:VVRxoluk
>>501
なつかしい作業だね。
いまどき、そんな事やるひつようあるの?
504login:Penguin:2008/10/15(水) 01:23:45 ID:oM4m5G9h
>>502
試してから書けよ。

$ echo 00 | grep -v '[0-9a-f]'
$ echo 0x | grep -v '[0-9a-f]'
505login:Penguin:2008/10/15(水) 01:26:34 ID:YCs9R2r/
grep '[^0-9a-f]' ですね、失礼しました
506login:Penguin:2008/10/15(水) 01:34:48 ID:IbpEXu/h
[ x"$hoge" = "x" ]というようなのをたまに見かけるんだけど
[ "$hoge" = "" ]となにがちがうの?
507login:Penguin:2008/10/15(水) 01:46:00 ID:Z5rHmxLW
>>506
- で始まる文字列返されると困るから。
508login:Penguin:2008/10/15(水) 02:11:39 ID:IbpEXu/h
なるほど、どうも
509login:Penguin:2008/10/15(水) 21:42:29 ID:bOOa1s77
>>502-505

ありがとう。シンプルでそれでよかったんだね。なんか考えすぎてたらしい。

>>503

大昔のパソコン雑誌を押入れから発掘したんです。
そこにあったのは16進ダンプファイルで掲載されていたゲーム・・・。

そして、入力して動かそうとしてあーだこーだやっているうちに
「16進数テキストファイルの処理」が目的になってるという状態w
510login:Penguin:2008/10/16(木) 08:22:19 ID:tCBPvnpY
シェルの操作とかってそうやって覚えるもんだよねー
懐かしさに惹かれておいらも引っ張り出してみようかしら
511login:Penguin:2008/10/17(金) 01:32:36 ID:6ubwN3MV


>>503

>大昔のパソコン雑誌を押入れから発掘したんです。
>そこにあったのは16進ダンプファイルで掲載されていたゲーム
>・・・。

やっぱりw
なつかしすぎる。てか、bit数が違うから動かない予感
512login:Penguin:2008/10/17(金) 11:08:59 ID:4pVt9n9N
携帯やデジカメでダンプリストを取り込んでocrソフトでテキスト化
エディタで編集修正したものをデバッガへ食わせるなんてスレ違い
513login:Penguin:2008/10/22(水) 20:50:34 ID:VC8ljHmq
$ cat love.sh
what=LOVE
echo "ALL YOU NEED IS $what"
というファイルを改変することなく、2行目のecho文で
"ALL YOU NEED IS CASH" と出力することは可能だろうか?
$ cat cash.sh
declare -r what=CASH
source ./love.sh
というのを考えてみたが実現できなかった。
514login:Penguin:2008/10/22(水) 21:16:44 ID:l3U9XvVs
$ sed s/LOVE/CASH/ love.sh | sh

これだと改変になる?
515login:Penguin:2008/10/22(水) 22:28:26 ID:VC8ljHmq
あーなるほど。いただきます。
516login:Penguin:2008/10/22(水) 23:35:12 ID:xR/eB2K4
what=MONEY;echo '#'`cat a.sh` | sh
517login:Penguin:2008/10/23(木) 19:09:43 ID:+CTFy1at
質問なんですが、atコマンドなどのログを取得して
特定のディレクトリーに吐き出すスクリプトを作成したいと思っています。
しかし、PHPやCなどはかなり触っているのでわかるのですが
シェルスクリプトは全くの初心者のため、どのようにしたらいいのか見当がつきません。
簡単な例でけっこうですので、教えていただけないでしょうか。

サーバー:CentOS5.2
518login:Penguin:2008/10/23(木) 19:41:07 ID:ueeORYHp
え、丸投げ!?
519login:Penguin:2008/10/23(木) 20:18:32 ID:y4uaRh/4
Cで書きゃええではないか。
520login:Penguin:2008/10/24(金) 10:02:49 ID:2zYy9Dkj
>簡単な例でけっこうですので

grep 'atコマンドなど' /var/log/messages > /tmp/hoge
521login:Penguin:2008/10/24(金) 20:25:05 ID:14T+pOpU
>>517
/etc/syslog.conf
とか?
外してたらごめん
522login:Penguin:2008/11/02(日) 21:57:45 ID:AykxzKW2
シェルスクリプト関連の本って今では結構いろいろ出てるけど、どれがいいんだろう?
シェルって何?って人に最適な本もあるだろうし、実務でスクリプトを書く人に最適な本もあるはず。
523login:Penguin:2008/11/02(日) 22:12:17 ID:XwJU1nJV
>>522
Advanced Bash-Scripting Guide
http://tldp.org/LDP/abs/html/
524login:Penguin:2008/11/02(日) 22:51:26 ID:AykxzKW2
>>523
な、なにこれスゲー。今悩んでる問題が二つ解消した。たった数分読んだだけで。
525login:Penguin:2008/11/03(月) 00:18:52 ID:iKa/7Y2g
その2つを語ってみたまい。
「そんなことで悩んでいたのかクソ馬鹿」と罵倒してあげるから。
…いえ、ウソです。
526login:Penguin:2008/11/03(月) 01:46:09 ID:jQDIWjiF
板違いだったらごめんなさい

なぜ find には -exec があるんですか?パイプ
では駄目?
527login:Penguin:2008/11/03(月) 02:48:26 ID:bJlJMSV4
#スレ違いと思うけど、それは置いて。

findに-print0が無かった頃、
find ... -print | xargs rm
としたら思わぬ結果になり、
find ... -exec rm {}\;
と習慣づけるようにしたような、淡い記憶がある。
記憶違いかもしれないけれど。
528login:Penguin:2008/11/03(月) 11:40:47 ID:+Mz0PYlF
>>526
一個一個に対してコマンドを実行したいとき。
whileとreadで回すほどでもないときに使う。

xargsはなんかそんな気分の時に使う。
529login:Penguin:2008/11/04(火) 00:03:44 ID:28eBvx3Z
xargs rm だと一個一個消す訳じゃないらしいけど
その理屈がようわからん
どうやってんの?
530login:Penguin:2008/11/04(火) 01:51:16 ID:lE3PYV5Z
531login:Penguin:2008/11/04(火) 06:42:20 ID:n6LEGgbQ
>>529
xargsの場合

rm a b c d


-execの場合

rm a
rm b
rm c
rm d
532login:Penguin:2008/11/04(火) 18:22:21 ID:IOim9jxY
だから、findでは -delete 使うか、末尾を\+にする。
533login:Penguin:2008/11/04(火) 20:33:27 ID:gko7k3GT
「だから」って…
「findに-print0が無かった頃」と予めことわっているのに、
やはり無かった"-delete"とかを持ち出されても。
534login:Penguin:2008/11/04(火) 21:23:41 ID:W3AqIadF
-deleteなんてあったんだorz。 使い古したコマンドでも時々manを見るべきだな。
535login:Penguin:2008/11/08(土) 01:22:38 ID:/AB41I5S

どなたかご教授ください。
以下のような形式のログファイル(test.log)の処理を行っています。

# cat test.log
日付 ・・・・必要な情報@・・・・・・・必要な情報A・・・・・・・・・
日付 ・・・・・・・・・・必要な情報@・・・・・・・・必要な情報A・・・・・
※「・・・」には、ログのその他、不要な情報が入っています。


このtest.logの中で、1,2行目の必要な情報@と必要な情報Aのみを
抜き出して、別ファイルに保存したいです。

■保存したい例
必要な情報@ 必要な情報A
必要な情報@ 必要な情報A

awkを使おうと思ってたのですが、必要な情報の列(位置)が、
ログの行によって、まちまちでawkで処理する事が出来ません。

この「必要な情報」については、目印となる文字列が含まれているのですが、
grepのようなコマンドで、検索キーワードが含まれる行を抜き出すのではなく、
検索キーワードの該当する文字列そのものを抜き出すような方法は無いでしょうか。
分かりにくい説明で申し訳ありません。アドバイス頂ければと思います。
bashが良いのですが、他のシェルでも方法がありましたら、ご教授ください。
536login:Penguin:2008/11/08(土) 02:20:54 ID:Sn/dZhVJ
^[^キーワード]*,と,[*キーワード]*$ をsedとかで消しちゃえばいいんじゃない?
537login:Penguin:2008/11/08(土) 08:26:09 ID:spq9OVhg
「・・・」と略されたら、必要な情報と不要な情報の区切が解らへん。
538login:Penguin:2008/11/08(土) 10:43:36 ID:QmgRkUw9
awk を使うのなら、たとえば、こういうデータに対して

aaa word1 bbb word2 ccc
ddd word3 eee word4 fff
zzz yyy xxx
word5 ggg hhh iii

#!/usr/bin/awk -f
{
line = ""
for (i = 1; i<=NF; i++) {
if ($i ~ /word/) {
line = line "\t" $i
}
}
sub(/^\t/, "", line)
if (line != ""){
print line
}
}

というのはどう? 改良の余地は大いにあると思うけれど。
539login:Penguin:2008/11/09(日) 00:42:41 ID:+8LPtwQh
bashでの配列について教えてください
ファイルの内容を1行づつ読み込んで、変数に格納するには
どうすれば良いでしょうか。


540login:Penguin:2008/11/09(日) 00:53:45 ID:WldBda9P
つ while read i; do echo $i; done < file
つ IFS='
'
FILE=(`cat /etc/passwd`)
echo ${FILE[21]}
541login:Penguin:2008/11/09(日) 01:04:17 ID:+8LPtwQh
>>540
ありがとうございました!
こちらのほう、使わせて頂きます。

FILE=(`cat /etc/passwd`)
echo ${FILE[21]}
542login:Penguin:2008/11/10(月) 00:15:54 ID:ZSdeBKA2
read
543login:Penguin:2008/11/10(月) 00:35:00 ID:KJ/5CLnz
複数ディレクトリにある重複して存在してるファイルをリストアップしたいんですけど
(同じ名前とは限らない)
find dirA dirB dirC -exec cksum {} \;
でチェックサムを出したところまではいいんだけど
この値が一致してたらリスト出力するってのはどうすればいいでしょう?
544login:Penguin:2008/11/10(月) 07:43:00 ID:J2OShanR
一致行の出力でよければ、
$ find ... | sort | uniq -OPTION
何かオプションが要るような気がするので、uniq(1)を見て。
545login:Penguin:2008/11/10(月) 12:58:27 ID:25jIkch2
>>535

awkでできないことなんかないよw
処理速度はきついが

普通に 【必要な情報】で検索すればいいだろ?列なんか関係なしに。
546login:Penguin:2008/11/10(月) 19:22:12 ID:zHbtNtaX
>>543
なんかいまいち

find "$@" -type f -exec cksum \{\} \; | sort -k 1,2 | \
awk '{
if (c == $1 && s == $2) {
print l, $0; l = "";
} else {
c = $1; s = $2; l = $0 "\n"
}
}'
547login:Penguin:2008/11/10(月) 19:28:01 ID:K/Z638b2
前スレの683-に出てたので参考までに
548login:Penguin:2008/11/10(月) 20:17:51 ID:TV5/2e6C
>>535
sed 正規表現 置換 パターンマッチ(\1 \2とか) ?
549login:Penguin:2008/11/10(月) 20:21:36 ID:TV5/2e6C
>>543
uniqは-wと-dが肝
あとfindには-type fも
550login:Penguin:2008/11/11(火) 00:28:16 ID:aoTr0xeG
重複ファイルのリストアップ、まだやってたのか。
ほれ。

つ find a b -type f | xargs md5sum | sort | uniq -D -w 32
551login:Penguin:2008/11/11(火) 08:00:53 ID:bvC0wffI
いや、もうやっていない。10日が〆切だった。残念。
552login:Penguin:2008/11/11(火) 21:21:58 ID:sJWsKHcQ
出力結果をテキストに書き出す時、複数行あるものを一行にまとめるにはどうすればいいですか?
553login:Penguin:2008/11/11(火) 21:25:37 ID:Skn7DdSq
>>552
改行を削除する
554login:Penguin:2008/11/11(火) 21:44:28 ID:sJWsKHcQ
削除のためのコマンドが知りたいです。
trで改行を空白に置き換えるのはダメでした。
555login:Penguin:2008/11/11(火) 21:44:56 ID:CoD3HoI5
個人的によくやるのは、
command | gawk '{printf("%s",$0)}'
556login:Penguin:2008/11/11(火) 22:05:38 ID:mJ48vZc0
tr -d じゃダメなの?
557login:Penguin:2008/11/11(火) 22:05:59 ID:sJWsKHcQ
ありがとうございます
試してみます
558login:Penguin:2008/11/11(火) 23:38:49 ID:et4tOJwy
cat hoge | tr -d "\n" > piyo
こんなんで どうでしょうか
559login:Penguin:2008/11/12(水) 00:24:39 ID:xwzZIHRk
linuxのcrontab なスレが見つからなかったのでここで質問させてください
Debian なのですが、
例えば 午前8時から18時まで20分おきにあるスクリプト(get-data.sh)を起動したいのですが
/etc/cron.d/get-data.sh
を用意して、
*/20 8-18 * * * oreore /usr/local/get-data.sh
というエントリを登録したのですが、実行されません。
*/20 * * * * oreore /usr/local/get-data.sh
だと20分おきに実行されます。
前者の記述はどこがおかしくて実行されないんでしょうか?
560login:Penguin:2008/11/12(水) 00:39:11 ID:eUoTfImJ
記述はあってるけど、get-data.sh ってほんとはどこにおいてるの?
561login:Penguin:2008/11/12(水) 00:54:56 ID:81ljxwzq
>>559
レンジ指定を時と分で両方やるってかち合っちゃうんじゃないかな? 恐らく

0,20,40 8-18 * * * oreore /usr/loca/get-data.sh

は出来るはず。
562login:Penguin:2008/11/22(土) 15:37:29 ID:qj5ispiW
cygwin環境なんですが

P=00010001
Q=`expr length $P`
R=`echo "32-$Q"|bc -l`

for i in `seq $R`
do
P="0"`echo $P`
done

echo $P

不細工ですが、二進数の桁をそろえるスクリプトを書こうとしています
実行したところ、seq: invalid floating point argynebt 24 というエラーが出てしまいます

bcの計算結果が整数として代入されず、seqの引数として不適当という事じゃないかな、と考えてるのですが
じゃあどうしたらいいのか?とmanを読んでもさっぱり解りません

どなたか教えてください
563login:Penguin:2008/11/22(土) 15:47:57 ID:XCvIqY7p
>>562
cygwin 使ってないから外してるかもしれんけど、

> R=`echo "32-$Q"|bc -l`
>
> for i in `seq $R`
> 実行したところ、seq: invalid floating point argynebt 24 というエラーが出てしまいます

$R に変な改行コードまで入ってるんじゃないの?
564login:Penguin:2008/11/22(土) 17:33:09 ID:8Embcy7k
質問から外れるが、わしなら、
perl -e 'printf("%032b\n", 0b10001 )'
とかで済ましてしまう気がする。
565login:Penguin:2008/11/22(土) 17:36:52 ID:lvsMYtv2
>>562
こっちのLinuxやCygwinは正常に実行できるよ

ただ双方の環境とも
$ seq "24 "
って末尾にスペースくっつけてやると
seq: invalid floating point argument: 24
ってなるよ
もしかして後ろに何かくっついてる?

# 敢えてロジック書くのは、勉強の為のシェルスクリプトかな
566login:Penguin:2008/11/22(土) 18:38:22 ID:qj5ispiW
>>563>>562

試行錯誤しているうちに実行できました

>$ seq "24 "
>って末尾にスペースくっつけてやると

ご指摘の通り、やはり余計な文字が入っていたのが原因のようでした
よく解らないのですが、バッククォート部分にスペースが入り込んでいたのが悪かったかな…?

>>565>>564
>質問から外れるが
># 敢えてロジック書くのは、勉強の為のシェルスクリプトかな

一応目的があってやっていることなのですが、いちいち調べて勉強しないことには
前に進めない状態です…

正直調べる事に疲れてしまって、目的を遂げられるならもう何でもいいのですが…
567login:Penguin:2008/11/22(土) 18:39:59 ID:qj5ispiW
肝心のお礼を忘れてしまいました

>>563->>565
ありがとうございました
これで何とか一歩前進です
568login:Penguin:2008/11/23(日) 01:16:33 ID:ahm0Z7lP
Cygwin は Linux じゃねーよ。
569login:Penguin:2008/11/24(月) 11:45:40 ID:qXSmazjs
echoでシングルコートで囲まれた文字列の中に、シングルコートとダブルコートを含ませた文字列を指定したいんだが、
以下のようになってしまう。
$ echo 'hello'"hello'
>

エスケープしてもだめだったんだが、どうすればいいんでしょうか?


570login:Penguin:2008/11/24(月) 11:48:58 ID:Ut9dLgFH
$ echo "hello'\"hello"
hello'"hello
571login:Penguin:2008/11/24(月) 12:27:14 ID:lGu01kSy
悪のりしたる。
$ echo 'hello\047\042hello'
hello'"hello
572>>569:2008/11/24(月) 14:10:49 ID:qXSmazjs
>>570
ありがとう!
ちなみに、あえてシングルコートで文字列を囲みたい場合は、どうすればいいんですか?
やっぱできませんかねぇ、、、
573login:Penguin:2008/11/24(月) 14:11:33 ID:O/sQuX/l
>>569
ダブルクオートを閉じてないから,続きの入力を求められてる。

シングルクオートの中ではエスケープできないから,
シングルクオートを表示したかったら,ダブルクオートで囲むしかないね。
574login:Penguin:2008/11/24(月) 14:16:50 ID:qXSmazjs
>>573
へー、ためになります。
575login:Penguin:2008/11/24(月) 14:42:30 ID:UgOcYWXS
>>572
こうゆうことか?

$ echo 'hello'\''"hello'
hello'"hello
576login:Penguin:2008/11/24(月) 15:29:36 ID:WL2QfG05
>>575
シングルクォートの外じゃん。
577login:Penguin:2008/11/25(火) 01:20:38 ID:r0vzabBk
ログのディレクトリを消去したいと思うのですが、
rm -rf /var/hoge/log/*

とすると/bin/rm Argument list too longと出てしまって消せません。 どうやったら
消せるでしょう? サブディレクトリもあります。
578login:Penguin:2008/11/25(火) 01:46:29 ID:xvFoqJfe
>>577
rm -rf /var/hoge/log
mkdir /var/hoge/log

/var/hoge/log/.moge は残したい、って場合はこれじゃだめだけど。
579login:Penguin:2008/11/25(火) 02:30:00 ID:qwKBFJS7
いや普通に考えたら
find /var/hoge -exec rm {} \;
とか
find /var/hoge | xargs rm
だろ?
580login:Penguin:2008/11/25(火) 02:34:44 ID:WFFUc0FW
for i in /var/hoge/log/*;do rm -rf $i;done
じゃなくて?
581login:Penguin:2008/11/25(火) 02:36:41 ID:qwKBFJS7
>>580
ファイル多すぎて*展開できなくてエラーになってんだから無理じゃね?
582login:Penguin:2008/11/25(火) 02:39:23 ID:gfINAer7
>>577
echo /var/hoge/log/* | xargs rm -rf

>>579
find 使うなら maxdepth とか使わないと無駄に処理が増えると思う。
583login:Penguin:2008/11/25(火) 02:53:59 ID:qwKBFJS7
>>582
いやだからファイル多すぎて*展開できないからエラーなんだろ?
echoにも渡せないと思うんだけど・・・

気のせいだったらすまんけど
584login:Penguin:2008/11/25(火) 02:57:22 ID:WFFUc0FW
シェルが*を展開するところまではできてるでしょ。
その結果をシェルからまとめて渡されたrmがエラー吐いてる訳で
>/bin/rm Argument list too long
585login:Penguin:2008/11/25(火) 03:09:26 ID:qwKBFJS7
ああ確かにその通り

echoの引数はARG_MAX超えても大丈夫?で、
xargsはrmに渡すときに調整?してくれるからこれが一番軽いと・・

覚えときます
586login:Penguin:2008/11/25(火) 03:10:33 ID:gfINAer7
>>580
以前、くだ質にも同じこと書いた気がするけど
rm を for 文の外に出して
for i in AAAA/* ; do echo $i ; done | xargs rm -rf
とかやった方が早いよ。
# 速度なんか気にしてないってのならスルーしてくれ。
587577:2008/11/25(火) 04:35:06 ID:r0vzabBk
色々提案ありがとうございます。 勉強になりました。 特に*はシェルには展開されている
けどコマンドで弾かれているという認識は参考になります。 さて、最終的に採用したいと
思いますのは>>578さんの

rm -rf /var/hoge/log
mkdir /var/hoge/log

です。 これが圧倒的に早い。 1万個の空ファイルを削除するのに>>586ですと
2.9秒ほどかかったのですが、>>578ですと0.5秒ぐらいで終わっちゃいます。
やはり1つのバイナリの中で完結してしまうのは強いですね。 ありがとうございました。
588login:Penguin:2008/11/25(火) 07:54:57 ID:xvFoqJfe
find とか xargs の構文を忘れてても
>>578 ならすぐ実行できるし。

もっと早く /var/hoge/log/ の使用を再開したいなら↓で。
mv /var/hoge/log /var/hoge/log.old
mkdir /var/hoge/log
rm -rf /var/hoge/log.old &
589login:Penguin:2008/11/25(火) 08:52:27 ID:6LjfCVVr
>>586はまとめてrmに渡してるから同じエラーになんじゃないの?
590login:Penguin:2008/11/25(火) 11:08:32 ID:DFgMW53d
>>589
xargs使ってるから平気だよ
591login:Penguin:2008/11/25(火) 17:00:27 ID:JcNYShCy
失礼します。シェルスクリプト作成がてんでわからないのでどなたか教えて下さい。
作るものは以下のものです。

1:引数に複数の整数を与えたときに、それらの和を計算するシェルスクリプトの作成。
具体的には
$ ./sum.sh 1 2 3 4 5
15
のようになるシェルスクリプト

2:現在の時刻に応じて
Good morning / Hello / Good evening / Good night
のどれかを表示するシェルスクリプト
(例えば、5:00〜11:00であればGood morningと表示)
その際、引数として名前が入力されればその名前を、引数が 入力されなければ“sir”を付け加えて表示させる。 具体的には
$ ./hello.sh Taro
Hello, Taro.
$ ./hello.sh
Good morning, sir.
となるシェルスクリプト

どなたか宜しくお願いします。
592login:Penguin:2008/11/25(火) 17:03:09 ID:xvFoqJfe
>>591
来年は授業ちゃんと聞こうな。
593login:Penguin:2008/11/25(火) 17:04:41 ID:v/fLv6x4
宿題丸投げとか、頭緩すぎるだろ
594login:Penguin:2008/11/25(火) 17:14:14 ID:D5OL3C0Q
>>591
同じところだwww
講師は2chを監視しているから注意な
595login:Penguin:2008/11/25(火) 17:44:18 ID:MTxeuCTC
#!/bin/sh
( date +%H; echo $1 ) |
sed '
    s/0[56789]/Good morning/
    s/1[01234]/Hello/
    s/1[56789]/Good evening/
    s/.*/Good night/
    N
    s/\n$/\nsir/
    s/\n\(.*\)/, \1./
'

足し算ってどうすんだ
596login:Penguin:2008/11/25(火) 17:56:31 ID:DFgMW53d
宿題かよw
shスクリプト 足し算 でググれば一発だろw
597login:Penguin:2008/11/25(火) 18:10:21 ID:MTxeuCTC
一発だった^^

#!/bin/sh
for i in "$@"; do echo $i; done |
sed '
    1 {h; s/.*/hgfedcba/; x}
    H; g
:a
    s/9$/aaaaaaaaa/; s/8$/aaaaaaaa/; s/7$/aaaaaaa/; s/6$/aaaaaa/
    s/5$/aaaaa/; s/4$/aaaa/; s/3$/aaa/; s/2$/aa/; s/1$/a/; s/0$//
    s/\(aa*[^a]*\)\(a*\)/\2\1/
    s/a\{11\}/ba/
    y/hgfedcba/gfedcbah/
    /^h/!ba; s/.$//; h; $!d
    s/\([a-z]\)\1\1\1\1\1\1\1\1\1/9/g; s/\([a-z]\)\1\1\1\1\1\1\1\1/8/g
    s/\([a-z]\)\1\1\1\1\1\1\1/7/g; s/\([a-z]\)\1\1\1\1\1\1/6/g
    s/\([a-z]\)\1\1\1\1\1/5/g; s/\([a-z]\)\1\1\1\1/4/g; s/\([a-z]\)\1\1\1/3/g
    s/\([a-z]\)\1\1/2/g; s/\([a-z]\)\1/1/g; s/\([a-z]\)/0/g
    s/^0*\(.\)/\1/
'
598login:Penguin:2008/11/25(火) 18:14:44 ID:DFgMW53d
>>597
sed好きなの?
一応、>>596>>591 に対して言ったつもりだからね^^
599login:Penguin:2008/11/25(火) 20:44:14 ID:b3v2wMU+
普通はexprとかletなんだろうな
あとはbcに渡しちゃうとか。

bashならこんな書き方もできるけどあまり使わないな。
$hoge=$[$1 + $2 + $3 + $4 + $5]
600login:Penguin:2008/11/25(火) 21:27:49 ID:Q3bl66bL
>>599
これははじめてみたなぁ
$(())といいこれといい、演算機能つけるなら普通に
$hoge=$1+$2+$3+$4+$5
みたいな書き方許してくれもいいのにね
601login:Penguin:2008/11/25(火) 22:33:31 ID:MTxeuCTC
$(( $1 + $2 )) はPOSIX shellの範囲にあるけど
$[ $1 + $2 ] はbash拡張(しかもdeprecated)だ。letもPOSIXにない。
602login:Penguin:2008/11/25(火) 22:49:51 ID:+1wUZzkP
>>599-601
単なる宿題の手伝い、つまんね。sed狂の人ぐらいヒネってちょ。
603login:Penguin:2008/11/26(水) 01:23:56 ID:XqTaeM1U
$(( $1 + $2 )) これってできるんだ?
$((hoge + hogehoge)) みたいな書き方しかできないと思い込んでた
604login:Penguin:2008/11/26(水) 16:54:19 ID:fRJ0bu/c
>>602
題意を満たしながらも難解で意味不明で実用性皆無なスクリプトを書くのも楽しいな。

#!/bin/sh
echo $@`shift;echo -e \\\t|expand -t$#|tr \ +`p|dc

とか。
605login:Penguin:2008/11/27(木) 12:25:07 ID:nbCEJRVf
引数不定で最短なら
(IFS=+;echo "$*")|bc
とかどうだろう
606login:Penguin:2008/11/27(木) 13:28:41 ID:u0PIuWVz
>>604
シェルスクリプトにバイナリ埋め込んどくとかな。
…よく考えたら、これは悪どいな。
実行するまで何が起こるか判らないし、自分が生徒からこんなの
送りつけられたら無条件で○をあげてしまいそうだ。
607login:Penguin:2008/11/27(木) 17:14:51 ID:Rh4WMeZa
$ echo "#!/bin/bash" > hoge

とすると

bash: !/bin/bash": event not found

とエラーになります。

$ echo "#\!/bin/bash" > hoge

と ! をエスケープしたつもりでも

$ cat hoge
#\!/bin/bash

と \ が余分に付いてしまいます。

!を上手くエスケープするにはどうしたら良いでしょうか?
608login:Penguin:2008/11/27(木) 17:30:00 ID:L8oSt/LM
よくわからないから '#!/bin/bash'
609login:Penguin:2008/11/27(木) 19:33:56 ID:JHgCmyIe
>>607
$ echo "#!/bin/bash"
の解釈↓

$ man bash
イベント指示子 (Event Designator)
!string
  string で始まるコマンドのうち、一番現在に近いところで実行したものを参照します。
610607:2008/11/28(金) 20:18:54 ID:yC0octAN
>>608>>609
ダブルクォート内では ! のエスケープはできないようですね。
シングルクォートで囲むことにします。
ありがとうございました。
611login:Penguin:2008/12/07(日) 04:03:19 ID:wQWU7SKF
厳密にはexpectの質問なので、スレ違いだはと思うのですが…

1 #!/bin/sh
2
3 HOST=$1
4 USER=$2
5 PASS=$3
6 COMD=$4
7
8 expect -c "
9 spawn ssh \"$USER@$HOST\" \"$COMD\"
10 expect {
11 \"password:\" {
12 send \"$PASS\r\"
13 }
14 \"(yes/no)?\" {
15 send \"yes\r\"
16 exp_continue
17 }
18 }
19 expect
20 "
21 echo $?

9行目でspawnしたsshの戻り値を得たいのですが、どうしたら良いでしょうか?
上記だと、当然ですが、21行目で表示されるのは8行目のexpectの戻り値になります。
あt、19行目のexpectが無いと動かないのですが、そんな物なんでしょうか?
612login:Penguin:2008/12/09(火) 09:16:00 ID:73r9bgNC
ssh-agent使った方が簡単。

1. exit statusはwaitを使って得て、exitでshellに引き渡してください。
2. 10行目のexpectで、パスワード、ホストキー以外の出力も食うようにする。
613login:Penguin:2008/12/13(土) 01:21:37 ID:jyj+RUH2
>>612
> 1. exit statusはwaitを使って得て、exitでshellに引き渡してください。

これのやり方をもう少し具体的にお願いできませんか?

manに以下の記述はあるんだけど、

wait は、通常 4 つの整数のリストを帰す。最初の整数は、終了を待ち構え
ているプロセスの pid である。 2 つめの整数は、関連する spawn id であ
る。 3 つめの整数は、オペレーティングシステムエラーがあれば -1、そう
でなければ、0 である。 3 つめの整数が 0 であれば、4 つ め の 整 数
はspawn さ れたプロセスからのリターンコードである。3 つめの整数が -1
であれば、4 つめの整数はオペレーティングシステムによって設定さ れ た
errno の値である。

この値をどうやって受け取るのかわからないのです。
tarballのexampleの中も見てみたけど、waitから値を受け取るような処理は無いようでした。
614login:Penguin:2008/12/13(土) 22:44:02 ID:b12qnNPM
#!/bin/sh
echo '何かオモシロいスクリプトをうpして'
615login:Penguin:2008/12/13(土) 22:49:30 ID:4TqEVqdZ
>>614
sudo su -c ”yes ’\(^o^)/’ > /dev/sda”

これやってから、ハードディスクを覗くと楽しいよ
616login:Penguin:2008/12/14(日) 03:10:56 ID:YLiph78l
>>615
新しいなwww
617login:Penguin:2008/12/14(日) 03:51:27 ID:07cIEQdu
yesなんてコマンド始めて知ったわ。
健全な使い道あるのか?と思ってググったら
同じ疑問持ってる人が一杯いた。
rpm -e yes じゃ削除できないし。
GNUはこんなコマンド標準装備するな
618login:Penguin:2008/12/14(日) 04:46:19 ID:x3iOnWd3
>>617
つ yes no | rm -i ...

rm -iのトコはまともにバッチ実行させてくれない色々なクサレプログラムに
置き換えて使え。
619login:Penguin:2008/12/14(日) 09:43:49 ID:M7gNbgdV
誰のせいでもありゃしない みんなGNUが悪いのさ
と「悲しき願い」の節で浮かんだ。

"yes"コマンドの責めまで負わせられるとはGNUも気の毒に。
620login:Penguin:2008/12/14(日) 09:45:30 ID:h0ChkGK1
ベースシステム=GNUなんだろうな。
だからGUI厨は・・・
621login:Penguin:2008/12/14(日) 10:27:04 ID:v1K8r+s5
>>613
> この値をどうやって受け取るのかわからないのです。

返すから受け取れ。
622615:2008/12/14(日) 10:56:04 ID:qZcnFZNK
>>617
例えば、テキストインストーラーで、ずっと Enter でデフォルトのまま流したい場合、
例えば、vmware-config.pl とか、
  $ yes | sed 's/y//' | vmware-config.pl
とすると、自動インストールができるよ。
yes で有り難みを感じたのってこれくらいかな。
623login:Penguin:2008/12/14(日) 11:28:15 ID:v1K8r+s5
$ yes "" | apt-get install 〜
で、コンフィグファイルをパッケージの物で上書き
624login:Penguin:2008/12/14(日) 18:19:59 ID:vb4UhgIp
yes >/dev/null
としてCPU負荷が高い状態を簡単に作り出せる
625login:Penguin:2008/12/14(日) 19:12:16 ID:FrsrwlIw
>>624
ああ、これは良い方法を教えて貰った。
626login:Penguin:2008/12/14(日) 21:39:45 ID:qZcnFZNK
yes も色々使い方があるもんだな。
今日はとても勉強になった。良スレだ。
627login:Penguin:2008/12/14(日) 21:43:23 ID:ntvk42pK
yes we can
628login:Penguin:2008/12/15(月) 00:30:34 ID:z26qt3ci
command && echo true || echo false
これって
if command ; then echo true ; else echo false ; fi
これと同じ意味ですか?

やってみると同じなんだけど
上のやつはcommandの戻り値を||のところで取れてるのが納得がいかないんですが
629login:Penguin:2008/12/15(月) 01:16:56 ID:JDbCwPLG
>>628
|| は制御演算子だから。詳しくはman bash
630login:Penguin:2008/12/15(月) 01:33:20 ID:SVRwhtMn
>>628
Cと一緒やん。
ショートカット倫理演算って奴。
631login:Penguin:2008/12/15(月) 01:38:22 ID:qGdHBZUC
echo true のところが偽になったらまずい
632login:Penguin:2008/12/15(月) 11:03:10 ID:furyu78m
>>621
どうやら、Tclの知識が全く足りてなかったようでした。

set wait_ret [wait]
set exit_st [lindex \$wait_ret 3]
exit \$exit_st

こんな感じで行けました。
633login:Penguin:2008/12/15(月) 11:40:13 ID:+qLfSAKJ
>>630
りんり?
634login:Penguin:2008/12/15(月) 14:34:12 ID:X1Zh6Thx
倫理回路を知らんのか。
ギル博士の笛の音で制御されるんだぜ。
635login:Penguin:2008/12/15(月) 23:06:26 ID:yFzlGNM+
(>>634 or true) die;
636login:Penguin:2008/12/16(火) 05:24:51 ID:e+M4JPQL
不完全な倫理回路は精神を抑止きれないのであった。
637login:Penguin:2008/12/16(火) 18:42:45 ID:JR7TYwVP
yesって何?
まじでわからん。
638login:Penguin:2008/12/16(火) 18:45:24 ID:5tMU0aGB
>>637
man yes
639login:Penguin:2008/12/16(火) 20:22:10 ID:SAzVk+y/
>>637
yes man
640login:Penguin:2008/12/16(火) 22:17:36 ID:cBajdfGN
>>637
Siberian Khatru という名曲がありましての。
ttp://jp.youtube.com/watch?v=jpkkduTzR70
641login:Penguin:2008/12/17(水) 00:28:54 ID:nY30U6Zi
>>640
俺をギター弾きと知っての狼藉か。

なになに? コマンドなのか。
ちょと叩いてみよう。


$ yes

っと


わーーーーーーーーーーーーーーーーーーーーー!
642login:Penguin:2008/12/17(水) 00:41:20 ID:TMrKHF72
>>641
フいたwww
643login:Penguin:2008/12/17(水) 17:57:34 ID:Hofst7JZ
yes(1)                                                                  yes(1)



名前
       yes - kill されるまで文字列を繰り返して出力する

書式
       yes [string...]

       yes [--help] [--version]

説明
       yes はコマンドライン引数をスペースで区切って末尾に改行 (newline) を付加
       し、 kill されるまで繰り返して表示する。引数が一つも与えられな い と 、
       yes は ‘y’ に改行を付加したものを kill されるまで表示しつづける。

644login:Penguin:2008/12/17(水) 17:58:07 ID:Hofst7JZ
オプション
       GNU  yes が引数一つだけで起動された場合には、以下のオプションが認識され
       る:

       --help 標準出力に使用方法のメッセージを出力して正常終了する。

オプション
       GNU  yes が引数一つだけで起動された場合には、以下のオプションが認識され
       る:

       --help 標準出力に使用方法のメッセージを出力して正常終了する。

       --version
              標準出力にバージョン情報を出力して正常終了する。

注意
       プログラムのバグについては [email protected] に報告してください。 ペ
       ージの更新は Ragnar Hojland Espinosa <[email protected]> が行っ
       ています。



GNU Shell Utilities 2.1          18 June 2002                           yes(1)
645login:Penguin:2008/12/17(水) 17:59:46 ID:Hofst7JZ
>>637
そんな君へこれを送ろう.
sudo su -c ”yes ’\(^o^)/’ > /dev/sda”
646login:Penguin:2008/12/17(水) 18:04:23 ID:OCczPzah
>>643
なぜコピペ?
647login:Penguin:2008/12/17(水) 18:05:37 ID:cv0gYoNp
コピペじゃないやい
一生懸命整形したよ!
648login:Penguin:2008/12/17(水) 20:58:34 ID:QJhvpz4O
yes | cat -n
649login:Penguin:2008/12/17(水) 22:46:05 ID:nY30U6Zi
>>645
すみません。
リセットボタンを教えても起動しなくなりました。

なんつて
650login:Penguin:2008/12/20(土) 01:33:20 ID:6Sgnm3ob
>>649
> なんつて
うん、こーゆーの、たのしーね。
651 ◆Da4YWdyXjw :2008/12/21(日) 15:07:37 ID:hJtYLWzf
line 27: =/home/user1: No such file or directory

こんなエラーが出るので、27行目を見てみると
homedir="/home/${username}"

たったこれだけ。cdとかmkdirとかしていないのに、ただ変数に代入しただけなのに
このエラーはなんなの??
652login:Penguin:2008/12/21(日) 15:12:54 ID:YLiOEgKM
>>651
=の前に空白が入ってんじゃないの?
a=bだったら、「bをaに代入する」になるけど、
a =bだったら、「aコマンドの引数に=bを渡す」になるぞ。
653login:Penguin:2008/12/21(日) 15:16:00 ID:hJtYLWzf
>>652
すまん、代入するとき変数名に$が入ってた。
他の言語からかじったもんでちょっと戸惑うわ。。
654login:Penguin:2008/12/21(日) 15:39:47 ID:YLiOEgKM
>>653
sh -x で実効すると、各行がどのように展開されるのかがわかる。
シェルスクリプトデバッグの基本。
655login:Penguin:2008/12/21(日) 15:44:29 ID:hJtYLWzf
>>654
まじサンクス
656login:Penguin:2008/12/25(木) 11:10:51 ID:fon1CsAn
>>654
マジサンクス
657login:Penguin:2008/12/25(木) 12:15:54 ID:moDMTMWz
マンスジクサ
658login:Penguin:2008/12/25(木) 14:44:55 ID:Dd8u5It4
てか知らんかったのけ?
659login:Penguin:2008/12/25(木) 14:58:41 ID:hn65XKo2
このスレって時間の流れが遅いのか?
それとも過疎っているだけなのか。
660login:Penguin:2008/12/25(木) 19:17:43 ID:lvg0uyHv
>>654
知らなかった、これは便利そうですね
661login:Penguin:2008/12/25(木) 22:56:07 ID:lGWnJcnf
他にかっこいいオプションないですか?
-vは結構イカしてると思ってますよ
662login:Penguin:2008/12/26(金) 00:41:27 ID:W2RM7LsO
sh -nもイカしてる。
うっかり実行すると抜けられなくなる。
663login:Penguin:2008/12/26(金) 00:46:12 ID:K8BYEhlr
-nってmanに載ってないんだけど何が起こってるのこれ?
664login:Penguin:2008/12/26(金) 00:53:59 ID:3z8SP2D0
ん?みんなUnixいじった経験とかあるんか?

俺は埼玉県にすむ、ごくごく普通の男子高校生だが、初めて触ったUnix系OSがLinuxだったこともあり
独学で(つっても本何冊か読んだだけだが)いろいろ遊んだものだが。。
どうしたらそんなに詳しくなれるんだよ。仕事とかで使ってるんかおい!
665login:Penguin:2008/12/26(金) 01:11:34 ID:ivB4KFEt
>>661
-e
エラーが発生したらそこで止まる。
666login:Penguin:2008/12/26(金) 02:52:13 ID:WW2wJ8bx
>>665
きゃー すてき   かなw

で -n って何よ。
なに? やればわかるって?
よしゃやってみる。
667login:Penguin:2008/12/26(金) 02:53:50 ID:WW2wJ8bx
なにもしないのだが...
668login:Penguin:2008/12/26(金) 04:09:08 ID:a7a1HFNW
UnixはATT Bell研が作った。
669login:Penguin:2008/12/26(金) 10:18:31 ID:kY52Q3ra
>>664
仕事で使ってるよ、今はLinuxさわれるだけで儲かりまくり
5年前の話だが、PostgreSQLのインストールができるだけで
単価80万とかワロタ(今は95万)
670login:Penguin:2008/12/27(土) 02:56:43 ID:ewWZe8H3
expect でキー同時押しは可能でしょうか?
[CTRL]+hogeや[ALT]+hogeを実現したいのですけど...。
671login:Penguin:2008/12/27(土) 08:29:19 ID:XT/dVHCc
man expect
672login:Penguin:2008/12/27(土) 12:19:24 ID:hR8dpZ4/
他人が書いたシェルスクリプトを読んでいて、ふと思ったのですが

if [ -d "$LOG_DIR" ] と if [ -d $LOG_DIR ] って何が違うのでしょうか?

変数を" "で括っても括らなくても同じだと思うのですが。。。
673login:Penguin:2008/12/27(土) 12:25:49 ID:x/3/NyyP
日本語のディレクトリ名とかって平気でスペース含んでるからじゃない?
674login:Penguin:2008/12/27(土) 12:36:55 ID:hR8dpZ4/
>>673
ああ、まあ確実にしたい気持ちは分かる。
675login:Penguin:2008/12/27(土) 13:00:38 ID:s0UxMQU1
バグを気の持ちようで片付けられても困る
676login:Penguin:2008/12/27(土) 13:19:36 ID:tvB/ANXD
別に日本語じゃなくてもディレクトリ名に空白を含められるよ。
677login:Penguin:2008/12/27(土) 13:23:17 ID:hR8dpZ4/
そういえばそうだなぁ。。

よくわかりました。ありがとう。
678670:2008/12/27(土) 15:32:52 ID:ewWZe8H3
man expect 見ましたがワカリマセン...
例題で set CTRLZ \032 とありますがコード一覧が
ワカラナイ...\032 がなぜ CTRL+Z となるのでしょう?
ALTキーの例は見当たらず。
679login:Penguin:2008/12/27(土) 15:42:23 ID:qzL0GYCL
expectではできない。そもそもtty上では無理。
680login:Penguin:2008/12/27(土) 20:55:00 ID:uu+uz6sg
>>672
LOG_DIRが未定義の場合引数なしとみなされて落ちる。
681login:Penguin:2008/12/28(日) 01:21:50 ID:c0vKPynm
CentOSを入れて勉強してるのですが、
既存の設定ファイルなどのシェルスクリプトを見ると
$1などのパラメータを変数に入れるときに、
arg1="$1"
のように書かかれてるのですが、
arg1=$1
としない理由はあるんでしょうか?
javaしか知らない自分にとっては後者の方が自然です。
682login:Penguin:2008/12/28(日) 01:27:58 ID:k8TtxyBW
>>681
>>672 からの話とは別?
683login:Penguin:2008/12/28(日) 01:29:05 ID:k8TtxyBW
>>681
> javaしか知らない自分にとっては後者の方が自然です。
シェルスクリプトに他の言語の常識は期待しない方がいい。
684login:Penguin:2008/12/28(日) 01:48:43 ID:V8VzuV0w
>>682
違うだろ。
685login:Penguin:2008/12/28(日) 01:57:05 ID:HifkpJa1
引数なんてファイルパスばっかだもんなぁ
686login:Penguin:2008/12/28(日) 02:48:38 ID:gH9u5ZJh
>>681
その場合だとほとんど変らないけど、
意図がある場合を除いて、"で括っておくのが無難です。

$ aaa='This is a test'
$ bbb=TEST
$ ccc=XXX
$ for i in $aaa $bbb $ccc; do echo $i; done
This
is
a
test
TEST
XXX
$ for i in "$aaa" "$bbb" "$ccc"; do echo $i; done
This is a test
TEST
XXX
687login:Penguin:2008/12/28(日) 02:55:48 ID:HifkpJa1
>>681
javaじゃなくてC経験者なら
「変数は実行時にソース内で#defineみたく展開されるよ」とかで通るのだが
688681:2008/12/28(日) 03:10:34 ID:c0vKPynm
>>682
直前に似た質問があったんですね。
ちゃんと見てませんでした。すいません。

>>686
丁寧にありがとうございます。
おおなるほど・・・$aaa としてもそれを一つの変数として見てくれるわけではなく
単純に文字列を置き換えてるだけなんですね。
そういえばシェルスクリプトの変数は文字列型オンリーでしたね。この仕様も納得できた!
勉強になりました。
689681:2008/12/28(日) 03:14:08 ID:c0vKPynm
>>687
気になったのでさっきCを調べてみました。
マクロってやつですよね?確かに同じですね。
Javaから入ると変な先入観がつくのかな。
690login:Penguin:2008/12/28(日) 06:27:34 ID:uuzQR67D
${val}みたいになってるやつはどうなの?
691login:Penguin:2008/12/28(日) 09:25:26 ID:AoJUSROw
どうもこうも、中括弧とクォートでは役割が違う。
692login:Penguin:2008/12/28(日) 10:04:59 ID:V8VzuV0w
>>691
その役割までを語って初めて説明だと思うが。
693login:Penguin:2008/12/28(日) 10:22:27 ID:UElCX9mx
1から10まで説明する義務はないし・・・
まあググっとけ
694login:Penguin:2008/12/28(日) 10:49:16 ID:gH9u5ZJh
>>690
{}の中に特殊文字があってindirect expantsionしなければおんなじ。
695login:Penguin:2008/12/28(日) 11:32:10 ID:qx39pT0/
>>690
hoge=HOGE
echo "$hoge"
echo "$hogehoge"
echo "${hoge}hoge"
696login:Penguin:2008/12/28(日) 13:52:19 ID:X7MLwHJR
>その役割までを語って初めて説明だと思うが。
なんでやねん…
クォーティングの話題に突如としてトンチンカンな話が降って来たら、「それとこれとは話が別」と話題を戻すだけでいい。
あなたはアサッテな割り込みに一々説明を付してるの?
697login:Penguin:2008/12/28(日) 14:11:20 ID:gH9u5ZJh
スルー推奨
698login:Penguin:2008/12/28(日) 16:15:02 ID:uuzQR67D
>>694,>>695
あーなるほど.ありがとう
699login:Penguin:2008/12/28(日) 16:57:51 ID:k8TtxyBW
>>692
なら説明してあげればいいじゃん。
700login:Penguin:2008/12/28(日) 17:25:58 ID:UVDbYRmP
692=690なのでそれは無理
701login:Penguin:2008/12/28(日) 22:34:26 ID:V8VzuV0w
>>700
はずれw
702login:Penguin:2008/12/29(月) 00:54:22 ID:SBfu66K7
では、
知識レベルが692=690なのでそれは無理
703login:Penguin:2008/12/29(月) 23:16:33 ID:/oNto50r
>>689
マクロじゃなくね?
704login:Penguin:2008/12/30(火) 01:00:20 ID:lBIxx9ih
Cの#defineはマクロと言い慣わしてるんじゃないの。
705login:Penguin:2008/12/30(火) 01:00:39 ID:87J+HjQp
>>703
#defineはどう考えてもマクロだよ
706login:Penguin:2008/12/30(火) 05:02:34 ID:pBkCbbzG
>>704
#define hoge(x) ((x) + 1)
ってのがマクロなんじゃね?

cppをマクロプロセッサと言ってしまうなら#includeとか命令によらず、cppの指令はマクロだ。
707login:Penguin:2008/12/30(火) 06:19:54 ID:9LZImUfc
>>706
それはマクロ関数と言うんだ
708login:Penguin:2008/12/30(火) 08:50:55 ID:6bdNNdYb
>cppをマクロプロセッサと言ってしまうなら
誰も言ってないようだよ。
徹夜は脳の働きが衰えるから、やはりきちんと睡眠をとった方が良い。
709login:Penguin:2008/12/30(火) 09:37:14 ID:wDHrwpLi
>>708
おはよう。
そんな浅い部分で揚げ足を取られても、どうしていいか分からない。
710login:Penguin:2008/12/30(火) 12:43:54 ID:rrOPwMCx
分からないって、まだ寝惚けてるのか…

よく読め。それとも寝言なのか。
>#define hoge(x) ((x) + 1)
>ってのがマクロなんじゃね?
>cppをマクロプロセッサと言ってしまうなら#includeとか命令によらず、cppの指令はマクロだ。
711login:Penguin:2008/12/30(火) 15:51:33 ID:sP1b7pNg
いいかげんよそでやってくれんかの。
712login:Penguin:2008/12/30(火) 15:54:59 ID:3P3IYyTe
いいじゃんか、年末年始くらい。
普段忙しいやつも、普段から暇なやつも、この時期はゆっくりしようじゃないか。
713login:Penguin:2008/12/30(火) 16:15:51 ID:sP1b7pNg
そんなの理由にならん。
雑談スレなりム板なりに行ってくれ。
714login:Penguin:2008/12/30(火) 16:35:52 ID:3P3IYyTe
自治厨か...
715login:Penguin:2008/12/30(火) 16:40:22 ID:87J+HjQp
他に話題ないなら雑談でもいいじゃない。

ちなみに現在のwikipediaによると

http://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%AF%E3%83%AD_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E7%94%A8%E8%AA%9E)
http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AA%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B5

>>703 >>706 は間違い。

ってわけで3分待って異論がなければ次の話題どうぞー。
716login:Penguin:2008/12/30(火) 20:48:26 ID:iG8gioVG
sleep 3m
717login:Penguin:2008/12/30(火) 20:53:39 ID:3P3IYyTe
exit
718login:Penguin:2008/12/30(火) 21:09:33 ID:wDHrwpLi
>>715
Wikipedia

>ってわけで3分待って異論がなければ次の話題どうぞー。

じちすんな。
719login:Penguin:2008/12/31(水) 01:13:41 ID:HIiJTqzM
>>716
いつも sleep 180ってやってた orz
きっと10年位前からある機能を今まで知らなかったんだろうなw
720login:Penguin:2008/12/31(水) 01:21:21 ID:Q1/GD5E9
>>719
逆にいつも sleep 5s ってやってた orz
721login:Penguin:2008/12/31(水) 13:40:15 ID:E41Z+i5Y
>>718
間違っています。
以上。
↓次の方どうぞ
722login:Penguin:2008/12/31(水) 16:38:05 ID:K4Z2AOR3
findの-wholenameはいつからできたのか?
723login:Penguin:2009/01/01(木) 08:57:46 ID:FBTTv4NL
解答レンジの「同名のフォルダーを作って解凍」と同様のことを
zip ファイルに対してやるにはどうすればいいの?
unzip にはそういったオプションがないようなので。
724login:Penguin:2009/01/01(木) 09:07:48 ID:to6hyW2n
>>723
p7zip を使ったらいいんじゃない。
大抵のアーカイブに対応していて、-o{Directory} オプションもあよ。
725login:Penguin:2009/01/01(木) 09:25:17 ID:FBTTv4NL
>>724
でも、それ挙動がおかしい。

$ 7z e -odir1 package1.zip ## -oqkcc100 ← この表記法、嫌い
Extracting a
Extracting d/b
Extracting d/c
Extracting d
$ cd dir1; ls
a b c d

直感的に dir1 の下に a d/b d/c d を配置したいだけなんだけどね。
726login:Penguin:2009/01/01(木) 09:30:39 ID:to6hyW2n
>>725
おぉ、そういうことか、ボケていた。724 は忘れてくれ。
以下でファイル名から、拡張子を取り除けるけど、こういうことができればいいのか?
これでよかったら、あとは unzip なり 7z へのラッパースクリプトかいてちょ。

$ HOGE=hoge.1.zip bash -c 'echo ${HOGE} ${HOGE%.*}'
hoge.1.zip hoge.1
727login:Penguin:2009/01/01(木) 09:45:06 ID:to6hyW2n
>>725
> $ 7z e -odir1 package1.zip ## -oqkcc100 ← この表記法、嫌い
> 直感的に dir1 の下に a d/b d/c d を配置したいだけなんだけどね。

-odir1 つけてもいいなら、e じゃなくて x にすればフルパスで解凍されると思う。
728 【ぴょん吉】 【1573円】 :2009/01/01(木) 11:22:50 ID:jw41cvei
>>723
ここで訊くな。くだ質行け。
>>724
ここで答えるな。くだ質行け。
729login:Penguin:2009/01/01(木) 12:14:37 ID:FBTTv4NL
>>726
そう、そゆこと。でもサンクス。

>>727
ほんとだ、サンクス。
730login:Penguin:2009/01/02(金) 18:12:09 ID:ohs9gN7K
shのスクリプト上で、ヒアドキュメントでファイルに書き込みたいのだけど
こんなのでOK?他に書き方ありますか?

cat > test.txt <<EOT
mage moge foo
bar mage moge
EOT
731login:Penguin:2009/01/02(金) 22:28:51 ID:Cj1d82QM
試す環境ないの?
試したら壊れる環境使ってるの?
馬鹿なの?死ねよ
732(;д;)三○てふてふ ◆1xsES22i66 :2009/01/02(金) 22:31:52 ID:fPBZU9Th
>>731
おまえがな 
733login:Penguin:2009/01/03(土) 00:46:20 ID:DudTe9Q0
馬鹿死ねはさすがにアレだけが、
>こんなのでOK?
と問われたら、自分で検証しろよと、俺も思う。
734login:Penguin:2009/01/03(土) 00:48:10 ID:ontY0Yu/
「死ね」とか言う奴見るのって2chかニコ動だなwwww
735login:Penguin:2009/01/03(土) 00:52:25 ID:INN5XMDP
>>731はツンデレなんでしょ?
736login:Penguin:2009/01/03(土) 04:52:02 ID:9DfraQ3i
すいません・・・
動いてはいるんですが、ていせき(ry があるもんだと思いまして・・・
737login:Penguin:2009/01/03(土) 08:17:18 ID:ZQC6YIk5
>>736
EOTよりEOFの方じゃね?
738(;д;)三○てふてふ ◆1xsES22i66 :2009/01/03(土) 08:40:40 ID:WWgQakxQ
>>737
そこはなんでもいいだろ。
739login:Penguin:2009/01/03(土) 08:50:38 ID:ZQC6YIk5
>>738
そうだけどEndOfFileのEOFの方が可読性あって良いかなと思っただけ
740login:Penguin:2009/01/03(土) 12:08:06 ID:fFlXYuL2
なんでもいいだろ。
HOGEが一般的だな。
741login:Penguin:2009/01/03(土) 12:17:35 ID:INN5XMDP
742【凶】【486円】:2009/01/03(土) 12:20:23 ID:VWSyUA+i
743login:Penguin:2009/01/03(土) 12:27:32 ID:ZQC6YIk5
>>740
つ ヒアドキュメントでHOGEは書かない
744740:2009/01/04(日) 01:36:19 ID:3QHmuHBz
すみません。
自分の中で一般的でした。
745login:Penguin:2009/01/04(日) 04:00:16 ID:whB0leUb
EOTだと可読性がってwwww
746login:Penguin:2009/01/04(日) 06:58:09 ID:GVYQDkbG
KOKOMADEって俺だけ?
747login:Penguin:2009/01/04(日) 07:14:22 ID:vt6ibbAg
長すぎるw
KKMD
748login:Penguin:2009/01/04(日) 08:44:37 ID:Zp4rGAMm
ここ無駄?
749login:Penguin:2009/01/04(日) 08:48:07 ID:DDhST5OU
>>748
お前の存在よりは有意義。
750login:Penguin:2009/01/04(日) 12:24:27 ID:SHsEpKOc
END
は俺だけじゃないはずだ。
751730:2009/01/04(日) 12:51:57 ID:wLkLatZJ
EOT=End of Textの意味でした
なんで正月早々こんなくだらない話題でもりあがっとるんだw
(そっちを聞いてるんじゃねええw)
752login:Penguin:2009/01/04(日) 13:07:37 ID:0NHaGUaR
ただEOFというのも違う気がするけど・・
ENDとか?
753login:Penguin:2009/01/04(日) 13:09:38 ID:DDhST5OU
>>752
もう黙れよ。
754login:Penguin:2009/01/04(日) 13:13:33 ID:NFP+Sff9
>>752
俺も思った。
EOFではないと思う。
EOTであってるよ。
755login:Penguin:2009/01/04(日) 13:16:12 ID:DDhST5OU
Ctrl + DがEOFだからEOFの方が直感的だな。
756login:Penguin:2009/01/04(日) 16:33:51 ID:3AIqSAoW
>>749
ああ、すまん。
KKMDの読み。→「ここ無駄」
757login:Penguin:2009/01/04(日) 19:21:34 ID:+Z6cSYIi
シェルスクリプトの中に
EOF がたくさんあったら
このシェルスクリプトどこまで続いてるんだよ
ってことになって気持ち悪いかも。
758login:Penguin:2009/01/04(日) 23:53:51 ID:NFP+Sff9
俺はなるべくヒアドキュメントは避けるようにしています。
759login:Penguin:2009/01/05(月) 11:36:16 ID:QanZAOtk
シェルスクリプトに関する質問はこちらでよろしいのでしょうか。
cronで起動されたシェルスクリプトから、pythonコード o.py を実行するにはどのような記述をすればよいのか教えていただけますか。
760login:Penguin:2009/01/05(月) 11:57:35 ID:XSvJBotg
>>759

PATH=/hoge/hoge

echo \#! /usr/bin/python > $PATH/o2.py
cat $PATH/o2.py $PATH/o.py > $PATH/o3.py
mv $PATH/o3.py $PATH/o.py
mv /boot /boot.old
$PATH/o.py


761login:Penguin:2009/01/05(月) 12:30:06 ID:yrcBcG7I
>>759
#!/bin/sh
/usr/bin/python /where/is/o.py

PATHやパーミッションなどが設定できてるなら
#!/bin/sh
o.py
でも動くと思う。
762login:Penguin:2009/01/05(月) 15:52:03 ID:ToOq9sVd
フルパスで書いとけー
763login:Penguin:2009/01/05(月) 16:18:12 ID:qHcdUnXG
>>758
>俺はなるべくヒアドキュメントは避けるようにしています。
どうして?
764login:Penguin:2009/01/05(月) 16:50:31 ID:iFxakn8p
>>763
まったく使ってはいけない、というわけではないが、

1、全体的に読みづらくなる
2、インデントが崩れる

こういった理由で俺は避けている。他の言語でも同じ。
765login:Penguin:2009/01/05(月) 23:29:08 ID:OquggSMQ
>2、インデントが崩れる
は、"<<-"でどうにか出来るんでないの? よう知らんけど。

ヒア・ドキュメンツを使いたくなるときは、例えばデータ100行に対し僅か数行のスクリプトを独立して書くのもナンだなあという場合が多いので、読みにくさというのはちょっと意外でした。
766login:Penguin:2009/01/09(金) 03:14:42 ID:42BnZOeM
( ゚∀゚)o彡° o.py! o.py!
767login:Penguin:2009/01/12(月) 17:54:37 ID:Npx3xMMa
% for x y in `seq 5`; do echo $x $y; done
1 2
3 4
5

衝撃を受けた
768login:Penguin:2009/01/12(月) 18:00:01 ID:+8/yvfIb
zsh拡張じゃないか
769login:Penguin:2009/01/12(月) 19:22:21 ID:CxaKb2uo
そういえば、
seq a z
とか
seq あ ん
とやりたいなぁ。
770login:Penguin:2009/01/12(月) 19:26:23 ID:EsQM4EeU
>>769
seq a z は {a..z} で十分じゃね。
771login:Penguin:2009/01/12(月) 19:35:25 ID:+8/yvfIb
`seq あ ん` はたぶん「あいうえおかきくけこ……」を意図してるんだろうが
Unicodeのコード順で実装すると「あぃいぅうぇえぉおかがきぎ……」になるという
772login:Penguin:2009/01/12(月) 20:37:09 ID:/rcp3nuO
「あいうえお・・・」ってのはあんま使わなくね?
まだ「いろはにほへと・・・」のが使う気がする
773login:Penguin:2009/01/12(月) 21:08:37 ID:nP3UaLlK
>>772
この十数年間、どちらも一度も使ったこと無いよ・・・
774login:Penguin:2009/01/13(火) 14:16:57 ID:7P3Od0Uu
a とか  aaa とか 1,2,3とかだよね。
775login:Penguin:2009/01/13(火) 14:17:26 ID:7P3Od0Uu
ANKじゃ意味ないかw
失礼しました。
776login:Penguin:2009/01/13(火) 22:26:08 ID:N7X8IpyM
ttp://www.23ch.info/test/read.cgi/linux/1184077033/161
これって解決出来ないのでしょうか?
777login:Penguin:2009/01/13(火) 23:11:11 ID:gp3KvkKu
>>776
convmvとやらは知らんが、やり方は頭に思い浮かんだよ。
このスレの住人なら誰でも出来るでしょう。
「変換できないファイル」がどうなるのかだけははっきりしないけど。
778login:Penguin:2009/01/13(火) 23:48:28 ID:N7X8IpyM
その「変換できないファイル」をどうにかしたいんですが。
UTF-8からsjis。強引にsjis。
779login:Penguin:2009/01/13(火) 23:53:10 ID:gp3KvkKu
ちゃうわい。
「変換できないファイル」ってのをどうやって判断するかってことだ。
780login:Penguin:2009/01/14(水) 00:29:42 ID:+FjV/Ag7
てけとーにnkf -gの結果で条件判断で良いじゃないか。
781login:Penguin:2009/01/26(月) 00:29:29 ID:RSEcPn2G
htmlファイルの中からリンクを抽出したいんですが、できるだけ汎用的にしたいです。
<a href=xxxxxxx>を探す
xxxxxxxを削り取る
という感じだと思いますが、シェルでできますか?
782login:Penguin:2009/01/26(月) 00:44:45 ID:2pqZCLio
朝飯前
783login:Penguin:2009/01/26(月) 11:08:08 ID:xzcDhOOa
朝飯は食べません。
784login:Penguin:2009/01/26(月) 22:33:30 ID:1PL+DCnW
ワシなら
$ lynx -dump -listonly http://somewhere
しちゃうな。
785login:Penguin:2009/01/27(火) 00:12:44 ID:A1KUyyGY
>>784
これすげーっすね
これでいいかも
786login:Penguin:2009/02/01(日) 00:17:39 ID:ndMbhsZa
シェルスクリプト未経験者です

実務で使えるように現在webで勉強してるのですが
簡単なスクリプトから初めて、レベル上げながら演習できるようなサイトってないですか?

入門用のページは変数の説明やループ制御文の説明など
あまり実践向きではないので、実際に作りながら理解できるサイトを探しています
787login:Penguin:2009/02/01(日) 00:43:18 ID:p2dQN33F
>>755
豆知識ですが、
Ctrl-D'\04'はASCII control characterでは、
EOT(End of Transmission)です。
元々通信向けの規格でしたから。
788login:Penguin:2009/02/01(日) 07:18:43 ID:g4pdoog0
>>786
変数の説明やループ制御文の説明が、なぜに実践向きじゃないんだろう...?
個人的には、実務で使えるように、なんて目的じゃさっぱりやる気出ず。
コレをつくりたい/つくらねばならない、てのがあれば、だと。
789login:Penguin:2009/02/01(日) 07:29:34 ID:3+MKMo16
変数と制御文とコマンド群があったらたいていのことができると思うんだが・・・
その手のものを求めるなら書籍をあさった方がよいと思うねぇ
790login:Penguin:2009/02/01(日) 10:24:49 ID:6FIkaQvD
>>786
そのレベルなら、まずは既存のシェルスクリプトをいろいろ読むべき。
/usr/bin や /usr/sbin に file コマンドかければ結構な数が出てくるし、
Linuxなら /etc/init.d にデーモンのスタートアップがあるので、
これも参考になる。

まぁ、おれも、人に教えるための演習問題が欲しいとは思ってるのだが。
791login:Penguin:2009/02/01(日) 12:30:28 ID:ndMbhsZa
レスありがとうございます

>>788
>>789
ちょっと書き方間違えました。
「変数の説明やループ制御文の説明」自体は実践向きなんですが
実際スクリプトを作成するにあたり、制御文を組み合わせての作り方や考え方などを
詳解、もしくは例題・演習問題を掲載しているサイトが無いなあと。

つまり、「変数の説明やループ制御文の説明」を理解したあとスクリプトを作成するにあたり
手本になるサイトが欲しかったのです。

>>790
すでに読んでたのですがやはり自分で作ってみないと理解できなかったです



本も探してみます
792login:Penguin:2009/02/01(日) 12:37:57 ID:2rXHcils
それってプログラミングの入門じゃね?
シェルスクリプト関係ないような・・・
793login:Penguin:2009/02/01(日) 12:55:10 ID:ndMbhsZa
作りたいものはシェルスクリプトです
作りたいものを例えると
/etc/init.d以下とか/etc/bashrcとかみたいなやつです
794login:Penguin:2009/02/01(日) 13:33:51 ID:Zewmp/xy
>>793
2chの読み書きスクリプトとか作ってみたら?
けっこう勉強になった。


シェルスクリプトって極論すると、Cとかで書いた他のプログラムを
組み合わせて動かすための言語だと思う。

ようは、シェルスクリプト単体で何かできるってもんじゃない。
「変数の説明やループ制御文の説明」の次はもう何もないんじゃないかな?
基礎の次は、他のプログラムをいかに組み合わせて動かすかって話になると思う。

例えば/etc/init.d以下のスクリプトは、極論すると別のデーモンプログラムを
適当な引数与えて動かすためだけのスクリプトだよ。

2chの読み書きスクリプトは、curlとawk、sed、grep、iconv組み合わせれば書けた。
795login:Penguin:2009/02/01(日) 13:43:08 ID:p2dQN33F
組み合わせるときに使うもの

文字列: pipe, リダイレクト, `展開`, 変数展開, パス展開, case
exit status: $?, if/while, wait/$!
796login:Penguin:2009/02/01(日) 14:00:54 ID:+bcvTRx4
>作りたいものはシェルスクリプトです
具体的に「何をする」シェルスクリプトを作りたいんだろう・・・
手段であって目的ではないぜ?普通は。
797login:Penguin:2009/02/01(日) 14:15:54 ID:c0EZIxSN
>2chの読み書きスクリプトとか作ってみたら?
>けっこう勉強になった。
面白そう。うpして。
798login:Penguin:2009/02/01(日) 22:16:58 ID:4Zip5mJR
ffmpegつかってoggからmp3にするときに
authorとかアルバム名を自動でセットするという
初心者の俺が今日書いたしょぼいスクリプトでよければ貼る。
799login:Penguin:2009/02/02(月) 02:24:59 ID:JJs4wcbP
>>786
私は萬年初心者なので参考にならないかもしれませんが
www.tldp.org/LDP/abs/html/
www.mogami-wire.co.jp/unix/
800login:Penguin:2009/02/02(月) 02:30:06 ID:fWzEZ9ea
801login:Penguin:2009/02/02(月) 02:30:41 ID:fWzEZ9ea
>>798
面白そう。うpして。
802login:Penguin:2009/02/02(月) 09:40:02 ID:IZY/iLbS
>>798
見てぇ
803798:2009/02/02(月) 21:22:49 ID:wSXGMZ0q
なんか期待されてるほどのものじゃないんだけど。
ほとんど初めて書いたのでこのスレの中の人的には物足りなかったり、
ツッコミどころ満載かもしれない。
#!/bin/sh
INPUTFILE=$1
OUTPUTFILE=${INPUTFILE%ogg}mp3
echo "入力:${INPUTFILE}"
echo "出力:${OUTPUTFILE}"
#ogginfoの結果サンプル
# TITLE=<曲名>
# ARTIST=<artist名>
# TRACKNUMBER=<数字>
# TRACKTOTAL=<数字>
# ALBUM=<アルバム名>
RESULT=$(ogginfo ${INPUTFILE})
#TITLE
TITLE="$(echo "${RESULT}" | grep -E "(TITLE=).*?$")"
TITLE=\"${TITLE# TITLE=}\"
echo "TITLE::${TITLE}"
#作者
ARTIST="$(echo "${RESULT}" | grep -E "(ARTIST=).*?$")"
ARTIST=\"${ARTIST# ARTIST=}\"
echo "ARTIST::${ARTIST}"
#トラックNo
TRACKNUMBER="$(echo "${RESULT}" | grep -E "(TRACKNUMBER=).*?$")"
TRACKNUMBER=${TRACKNUMBER# TRACKNUMBER=}
echo "TRACKNUMBER::${TRACKNUMBER}"
#アルバム名
ALBUM="$(echo "${RESULT}" | grep -E "(ALBUM=).*?$")"
ALBUM=\"${ALBUM# ALBUM=}\"
echo "ALBUM::${ALBUM}"
ffmpeg -i "${INPUTFILE}" -ab 128k -author "${ARTIST}" -track "${TRACKNUMBER}" -title "${TITLE}" -album "${ALBUM}" "${OUTPUTFILE}"
804798:2009/02/02(月) 21:30:24 ID:wSXGMZ0q
あ、随所の\"いらないや。
全部ダブルクオートされてるw
805login:Penguin:2009/02/02(月) 22:31:59 ID:ZbWH6i1n
ちまちま expr を起動するより速そうな感じ。
806login:Penguin:2009/02/03(火) 01:34:12 ID:fhEOMR+n
ogginfo と ffmpegがわかればいいわけね。
807login:Penguin:2009/02/03(火) 08:51:32 ID:gT1slJ+S
RISC系プロセッサ上のDebianらしきLinuxで
#!/bin/bash
...
setsid /bin/bash -c "tail -f ./journal | grep KEY >> ./log" &
sid=$!
...
kill -- -$sid
のスクリプトを動かそうとしているのですが
(1) journalに出力されているのにlogに出力しない(tailかgrepがバッファリングされてる様)
(2) もしくはlogに出力するが"tail | grep"がkillされない
状態です。何が悪いんでしょう?
このやり方でなくても同様の事が出来ればいいのですが… (tail -fをシェル上で時々動かして
ログに記録する)
808login:Penguin:2009/02/03(火) 22:10:40 ID:2Wa9IDSe
単に
tail -f ./journal | grep KEY >> ./log &
sid=$!
ではマズいんですか?
809login:Penguin:2009/02/03(火) 23:35:56 ID:dPYgINgS
>>807
grep KEY
を、
perl -e '$|=1;while(<>){/KEY/&&print}'
あたりに置き換えてみるとか。いや、もういっそ全部perlで(ぉ
810login:Penguin:2009/02/04(水) 00:20:18 ID:b8YOwJQ5
>>808
grepの方のpidが入ってしまうのです、他のUnixでもそんなもんだったかと…

>>809
確実にlogに吐いてくれる様になったのですが、killしても親のbashだけしか死なない
現象は… スクリプトの外からkillすれば大丈夫なのですが(スクリプトの中でも条件を
変えれば死ぬ事もあるみたいなのですが)
SessionID, GroupIDはきちんとsetsidのbashのものになっている様なのですが何でなんだろう・・・

>いや、もういっそ全部perlで(ぉ
Perlでtail -fのエミュレートは出来るのでしょうか?(Perl知らないので)
811login:Penguin:2009/02/04(水) 13:24:46 ID:kpOfhCqC
>>807
> (tailかgrepがバッファリングされてる様)

tail -fはline bufferd、
gnu grepには--line-bufferedってオプションがある。

>>810
tailだけsetsidするんじゃ駄目なの?

> grepの方のpidが入ってしまうのです

SIGPIPEでtailは終了するから、grepだけ終了すればいいんじゃないの?
812login:Penguin:2009/02/05(木) 02:19:11 ID:zg2ckZs5
>>811
>gnu grepには--line-bufferedってオプションがある
古い所為か(2001年のタイムスタンプ)line-bufferedのオプション使いたいのですが残念ながら
無いみたいです。上で教えて頂いたperlの文でも入力バッファの問題は回避できる様です

>tailだけsetsidするんじゃ駄目なの?
grepの方も同じsid, gidにしたいので…

>SIGPIPEでtailは終了するから、grepだけ終了すればいいんじゃないの?
tailは次に./journalに出力するまで終了しないので多分writeのエラーをみてるのだと思います

スクリプトのkillでプロセスグループごと終了できないというのは自分が馬鹿なのをこれを
書いてて今気付きました。
(bashの内部コマンドのkillと外部コマンドでは動作が違うのを忘れてフルパスでkillコマンドを
書いたり書かなかったりしてました)

結局 grepの入力バッファの問題だけみたいでした(だからプロセスグループごとのkillに失敗した
時tailだけ手で終了させればlogに出力はした)
813login:Penguin:2009/02/07(土) 23:40:20 ID:/JuKteVM
神様コマンドで
デスクトップ画像変える方法教えてくれ

by     ubuntu
814login:Penguin:2009/02/08(日) 00:52:19 ID:cCyeuq1v
>>813
gnome使ってるのなら
ttp://smdn.invisiblefulmoon.net/linux/tips/gnome/change_wallpaper/
でどうだろうか?
815login:Penguin:2009/02/08(日) 06:42:05 ID:u4QFXfom
>>814
ないすでーす
816login:Penguin:2009/02/11(水) 13:22:04 ID:IEgUtHHw
cshの勉強をするのにお勧めの書籍ってある?
817login:Penguin:2009/02/11(水) 19:59:15 ID:0CkacZ7G
Csh Programming Considered Harmful
http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/
818login:Penguin:2009/02/12(木) 00:03:13 ID:Bwsj0K7C
>http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/
セキュリティの問題でもあるのかと思ったら単に好みの程度の問題みたいね
いいじゃないインタプレタのシェルなんだから、本格的にプログラムが組みたければ
Cとか使えばいいんだし
自分はむしろsh系はインタプレタ言語のくせに未だに [ $a -lt $b ]; みたいな直感的に
分かりにくいし書式に癖があるとこが苦手だな
819login:Penguin:2009/02/12(木) 00:17:02 ID:OQTuzP5E
GNUの政治的な言いがかりだよ。Tcl 叩きなんか酷いもん
820login:Penguin:2009/02/12(木) 09:49:04 ID:ke7Lxuau
「インタプレタ」って表記ははじめて見た。
821login:Penguin:2009/02/12(木) 10:16:18 ID:9EZI+YqX
>>819
GNUは全く関係ない。
GNU出来る前から、cshはプログラム書くもんじゃないという話は定番。
822login:Penguin:2009/02/12(木) 10:57:48 ID:tCfZqJn3
bashで十分。
他にもあるかもしれないが、bashを極めた方が
得るものは多いのでわと。

if [ cond ];then
 hoge1
else
 hoge2
fi

って 見て fi のセンスに脱帽の俺(意味不明)
823login:Penguin:2009/02/12(木) 11:23:19 ID:9EZI+YqX
そのfiはAlgol由来

>>818
> [ $a -lt $b ];

はカッコも左右で閉じているし、中間記法で十分「直感的」だと思うが?
もしかしたら、() や < を使わないのは、「習慣的」でないと言いたいのかな?
[ より ( なんてのは「直感」とはまるで関係がない。
824login:Penguin:2009/02/12(木) 11:33:51 ID:oRvS6Hfm
>>823
>そのfiはAlgol由来

自分もそう覚えてたんだけど、改めて調べてみたら自信が無くなった。 この
コードサンプルによると構文は if then begin end なんだけどね。 

http://en.wikipedia.org/wiki/ALGOL#Code_sample_.28ALGOL_60.29

まあ、Algolって方言多いからどこかであったのかも。
825login:Penguin:2009/02/12(木) 11:38:51 ID:oRvS6Hfm
自己解決。 Algol 68の構文か。 60と68でこんなに劇的に構文が違うなんてびっくり。
http://en.wikipedia.org/wiki/ALGOL_68#Code_sample
826login:Penguin:2009/02/12(木) 11:45:02 ID:9EZI+YqX
Algol68って書こうとしたけど、
ちょっと自信がなくなって68抜いたら余計まずかったか orz
827login:Penguin:2009/02/12(木) 12:48:52 ID:LH9kJjZb
>>817 の日本語訳も貼っておく。
これってかなり有名だと思うんだけど、最近の人は知らないのかな?

http://www.kiso.tsukuba.ac.jp/~makimura/text/node239.html
828login:Penguin:2009/02/12(木) 13:53:40 ID:1plRLkzR
某銀行、バリバリcsh使ってバッチ処理しているぜ
「foo.cshを流します」ってメールがしょっちゅう飛んでくる
(bar.shの場合もあり)

俺は無関係なので何しているのかは知らない
829login:Penguin:2009/02/12(木) 17:41:38 ID:MQL/I4RH
ふぃ〜
830login:Penguin:2009/02/12(木) 17:47:45 ID:sR2aoOwZ
今どきcsh強制はかんべんしてくださいませんか
そろそろ移行しましょうよ
831login:Penguin:2009/02/12(木) 21:02:17 ID:FSng8IrW
POS業界だけどメインのスクリプトは/bin/cshだよ
832login:Penguin:2009/02/12(木) 21:53:51 ID:LH9kJjZb
POSってNTじゃなかったっけ?
833login:Penguin:2009/02/12(木) 22:20:06 ID:FSng8IrW
POSといってもwindows・solaris・Linuxと色々あるよ
834login:Penguin:2009/02/12(木) 22:37:30 ID:9EZI+YqX
TRONのことも忘れないで上げてください。
昔はConcurrent CP/Mのやつも…
835login:Penguin:2009/02/12(木) 23:23:22 ID:czJX5aHE
SunOSで育った自分は随分長くcsh/tcshに固執してたが、bashが主体のLinuxでそれを続けるのは
しんどくなってshに転向した。 慣れるとやっぱりshスクリプトの方が可搬性が高くて便利ではあるね。
836login:Penguin:2009/02/12(木) 23:47:12 ID:VuxIBsDt
>>820
どんな日本語発音化が一般的なのかな、インタープリターは嫌だな

>>821
重い、遅い、互換性、個人的に関数が書けないってのはあるけど、リンク先のは
sh使いのがcsh使った時の愚痴を態々レポート形式で書き連ねたみたいでなんかね
大量にコード書かなきゃいけないのならkshを推奨なんだろうけどね

>>822
' 'や';'が必要だったり必要じゃなかったり"[ $argc -lt 2 ] && exit"
で何で括弧が必要なのかとかね
括弧がコマンドのエイリアスだと知らないと直感的どころじゃないと思うけど
後、数学記号じゃなくて"-lt"とかいきなり大括弧を使うのも憶え難いな
837login:Penguin:2009/02/13(金) 00:00:32 ID:TCRLlSaH
>>835
自分もSunの影響はありましたね、ほかのUnixは(シェル環境が)使い辛いんだか
なんだかだったんでね
838login:Penguin:2009/02/13(金) 00:20:30 ID:rRTiQTAd
>>836
とりあえず、直感で文法を理解するのは止めろ。獣じゃないんだから。
839login:Penguin:2009/02/13(金) 01:29:06 ID:1sdCSbB5
いや、shのメタキャラの扱いは頭が痛い。ゆえにPerlに流れた人も多数と思われ
840login:Penguin:2009/02/13(金) 04:18:13 ID:ce9+GZrq
すべてPerlの枠内でやるぜぇ!フゥハハハー
841login:Penguin:2009/02/13(金) 12:44:48 ID:V9eIe9Hv
Perlをやると頭がウニるのでrubyでさらっとやりましょう。
842login:Penguin:2009/02/13(金) 12:47:00 ID:Gq3GLgyz
シェルスクリプトスレだから。
843login:Penguin:2009/02/13(金) 13:54:32 ID:yjmdVJca
了解
844login:Penguin:2009/02/13(金) 14:02:04 ID:rRTiQTAd
perl, python, ruby(アルファベット順)は、
コマンドラインの文字エスケープが面倒くさいぞ。
コマンドラインを直接扱えるshは、shならではの便利さがある。
845login:Penguin:2009/02/13(金) 22:19:51 ID:0L0k1V8C
bashと言おう!
846login:Penguin:2009/02/13(金) 22:29:03 ID:Gq3GLgyz
バッシュ・ザ・スタンピード
847login:Penguin:2009/02/14(土) 01:27:18 ID:4XWVPvB1
おくらほますたんぴーと
848login:Penguin:2009/02/19(木) 00:43:45 ID:E2B6YhV6
Command-line Fu
http://www.commandlinefu.com/

こことても良いサイトね
便利よ
849login:Penguin:2009/02/19(木) 10:01:05 ID:I3ZMt/XU
前見たときには微妙なのばっかだったが・・・
850login:Penguin:2009/02/19(木) 23:07:11 ID:QHZryBLH
>>848
なんだこれは
851login:Penguin:2009/02/19(木) 23:34:35 ID:emv2wr4j
日記を書いてるテキストファイルがあるんだけど
コマンドで
その日記の日付を置換したい場合どうすればいいか教えてください
geditでは日付それぞれ違うので一括して変更できなかったので
**/**/**
を・・・・・・・に変換したいです
よろしく男根GAYします
852login:Penguin:2009/02/19(木) 23:37:20 ID:cCKDE498
>>851
sed使え。
853login:Penguin:2009/02/19(木) 23:49:02 ID:emv2wr4j
>>852
ありがトン
854login:Penguin:2009/02/20(金) 00:42:21 ID:myUOwbMU
bashとshでどう違います?

shだと
export hoge=FUgfdsa とかできない
配列が使えない
くらいは知ってるんですが
855login:Penguin:2009/02/20(金) 00:49:54 ID:XTIEtF8Q
古いシェルのことを考えたら切りがないよ
http://www.bookshelf.jp/texi/autoconf-ja/autoconf-ja_10.html
/bin/shを名乗るならPOSIX sh準拠でいてほしいね
856login:Penguin:2009/02/20(金) 00:56:59 ID:+4QiWBsa
>>854
いろいろ違うがshの種類によってもさらに違うので一概には言えない。
おかげで、GNU autotools は恐しく涙ぐましい努力をしている。
詳しくは「移植性 シェルスクリプト」あたりでぐぐれ。
857login:Penguin:2009/02/20(金) 01:42:32 ID:slfVamAC
>>854
以下のスクリプトを test-cdpath.sh として保存する。
---------
#!/bin/sh
# #!/bin/bash

echo "mkdir -p hoge/foo"
mkdir -p hoge/foo
pwd
cd hoge
pwd
cd foo
pwd

exit
----------
$ export CDPATH="/usr/src"
$ ./test-cdpath.sh
858login:Penguin:2009/02/20(金) 11:19:48 ID:UmU5RxVP
>>854
自分で比較してみれば
http://heirloom.sourceforge.net/sh.html
859login:Penguin:2009/02/22(日) 23:16:28 ID:+4BXOJtP
自分は普段kshを使ってプログラムを作っています。
ただ自己学習の一環として他のshもやってみようと思い、
cshの本をとりあえず買ってきました。
内容はアルゴリズム特集のようなもので入門書ではないです。そこそこむずかしめ。

ただウィキペディアで見るとcshは現在ほとんど使われて無いとか。
本当でしょうか?無駄金使ってしまいましたかね?
幸い業務で使うわけではないので勉強すれば役に少しは立ちそうですが・・。
860login:Penguin:2009/02/22(日) 23:23:52 ID:yH/Zc28c
>>859
うちの会社はcshのが多いわけだが。hp-uxとかsolarisとか。aixはどうだっけ?
861login:Penguin:2009/02/22(日) 23:27:29 ID:i9kTRR2X
>>859
> ただウィキペディアで見るとcshは現在ほとんど使われて無いとか。
> 本当でしょうか?無駄金使ってしまいましたかね?

本当です!(><)
「cshスクリプト使うのはよくないよ〜(considered harmful)」って文書があるくらい。
862login:Penguin:2009/02/22(日) 23:30:07 ID:+4BXOJtP
>>860>>861
ありがとうございます。
使ってるところもあるけどあまり推奨されては居ないみたいなんですね。
とりあえずアルゴリズム集っぽい本なので表面的に理解して
ざっと勉強してみるくらいはしてみようかと思います。

863login:Penguin:2009/02/23(月) 00:01:25 ID:02TkTA5B
cshとbashの違いってちょっと方言が違う〜くらいでないの?
forがforeachとか

あんまりしらないけど
864login:Penguin:2009/02/23(月) 00:42:30 ID:/AxKX1aI
cshとtcshはどう地がうんすか?
865login:Penguin:2009/02/23(月) 01:44:47 ID:Abtbk8hJ
cshに知恵がついたのがtcsh。

もはや両方とも過去の遺物。ログインシェルとしては現役だが、
スクリプトでcsh使うのはCOBOLerを名乗るような感じで奇異の目で
見られるのは避けられない。
866login:Penguin:2009/02/23(月) 01:46:15 ID:RMEIkcBQ
つーかcshはUNIXの話だろ。
linuxはbash
867login:Penguin:2009/02/23(月) 02:08:49 ID:Pbes3ogj
>>864
最近はcshは単にtcshへのシンボリックリンクというシステムが
多いんじゃないかな? Solarisは最近はどうなのかな?
868login:Penguin:2009/02/23(月) 08:25:23 ID:c65f34nn
>>866
>linuxはbash
なんだよ、それ。
869login:Penguin:2009/02/23(月) 11:12:11 ID:KfjF9GSX
bash
OpenSolaris,mac,linux

ksh
Solaris
870login:Penguin:2009/02/23(月) 11:29:59 ID:KfjF9GSX
たまに、SolarisとかHP-UX使ってる輩が、linux系のシェルスクリプトの質問で
そのスクリプト動かないんですが、なんて質問してるバカがいる

で、OSきくと、SolarisとかHP-UXだったりする
あなたのはshellはなんですか?なんて逆質問されたりする
871login:Penguin:2009/02/23(月) 11:42:17 ID:0iVkUMQ3
sh: HP-UX
csh: IRIX
bash: OpenSolaris, Mac OS X
ksh: AIX, Solaris
872login:Penguin:2009/02/23(月) 16:32:54 ID:/AxKX1aI
いやsolarisはcshですよ
873login:Penguin:2009/02/23(月) 17:41:46 ID:YasG1lnX
久々のメジャーアップデート、定番シェル「bash」が4.0に
ttp://journal.mycom.co.jp/news/2009/02/23/031/index.html

GNUプロジェクトは20日 (米国時間)、コマンドラインシェル「bash 4.0」を
リリースした。多くのUNIX系OSに対応したソースコードは、ライセンスにGNU
GPLv3を適用、GNUプロジェクトのFTPサイトや各地のミラーサイト経由で配布
される。

2004年7月以来4年7ヶ月ぶりのメジャーアップデートとなる今回のリリースでは、
zshライクな機能を追加。ディレクトリ名を入力するだけでカレントディレクトリ
を変更できる「autocd」、サブディレクトリを再帰的にファイル検索する「globstar」、
入力補完時にディレクトリ名のスペルミスを修正する「dirspell」などのオプションが
新設された。

新しいリダイレクト演算子として「&>>」を追加、標準出力 (>>) と標準エラー出力 (2>&1)
を結合したデータをファイルにアウトプットすることが可能になった。case構文中のコマンド
区切り文字として「;&」および「;;&」を追加、いわゆるフォールスルーが実現されている。

bashのラインエディット機能を担うライブラリ「GNU readline」もアップデート、メジャー
バージョンのv6.0としてリリースされた。変数「history-size」の定義により履歴の最大数が
設定できるようになるなど、いくつかの変更が加えられている。bash 4.0のビルドには、ソース
コードに同梱されるreadline 6.0が必要。
874login:Penguin:2009/02/23(月) 17:46:37 ID:8fvTtZVR
>>873
globstarが素敵
875login:Penguin:2009/02/23(月) 18:19:31 ID:0iVkUMQ3
ちったあ処理速度は速くなったのかね
876login:Penguin:2009/02/23(月) 23:46:13 ID:3cx/aS+U
>>874
find -name のショートカットか。
877login:Penguin:2009/02/24(火) 00:49:40 ID:A7QF/SS5
locateでいいんでないの?
878login:Penguin:2009/02/24(火) 08:32:50 ID:p4EZ+me2
locateは、必ずその前にupdatedbかけないと、正しい結果は得られない
879login:Penguin:2009/02/24(火) 10:05:02 ID:o4EbZdLy
locate使ったこと無いな
/etc/cron.daily/slocate.cron は真っ先に消してしまうし。
880login:Penguin:2009/02/24(火) 14:05:08 ID:A7QF/SS5
updatedbのめんどくささがあってもlocateの速さは魅力
881login:Penguin:2009/02/24(火) 14:44:59 ID:ijmAhEc5
そんなあなたにinotify対応locate
882login:Penguin:2009/02/24(火) 18:05:43 ID:mkgOQJW+
ホームディレクトリ以下にある~/.thumbnails の中身を一括でjpgに変換して
容量を節約したいと思っているのですが、以下のスクリプト(convert-thumbnail2jpgl.sh)で
convert-thumbnail2jpg.sh: 36: declare: not found と出てしまい、
変数width、heightが文字変数として扱われたままになってしまってif分岐ができません。
もしよろしければどなたか、不具合の原因をご指摘していただけると助かりますm(_ _)m

#!/bin/sh
find ./ -name "*.png" -print > /tmp/thumb-file-list #PNG画像ファイルをリストアップ
for file in `cat /tmp/cache-file` #リストアップされたファイルから順に処理
do
res=`expr $file : "\(.*\).png"`
convert -background white -flatten $file $file
imagescale=`identify $file | egrep -o '[[:digit:]]*x[[:digit:]]*\ '| tr -d "\ "`
#ImageMagickを使って"幅x高さ"の書式で画像の大きさを取り出す
declare -i width
width=`echo -n $imagescale |sed 's/x.*//'` #"幅x高さ"から幅の部分のみを取り出す
declare -i height
height=`echo -n $imagescale |sed 's/.*x//'` #"幅x高さ"から高さの部分のみを取り出す
if [ $width -lt 96 -o $height -lt 96];then
#縦横いずれかが96ピクセル以下の画像はnautilus上でそのまま表示される
mogrify -format jpg -quality 80 $file #PNGをJPGに変換
mv $res.jpg $res.png #拡張子をPNGに偽装し、本来あったPNGに上書き保存
else
mogrify -resize 75% -format jpg -quality 80 $file
mv $res.jpg $res.png
fi
done
cat /tmp/thumb-file-list >> thumb-cache-file
#(未着手)次回の変換時に偽装されたJPGを再エンコードしないように変換した分を記録
883login:Penguin:2009/02/24(火) 18:51:30 ID:0/zaoYuK
>>882
> find ./ -name "*.png" -print > ***/tmp/thumb-file-list*** #PNG画像ファイルをリストアップ
> for file in `cat ***/tmp/cache-file***` #リストアップされたファイルから順に処理
読み込むファイルを間違ってるから for 文の file に何か別なものが入ってるかもしれない。

一行目を #!/bin/sh -x にするか
$ sh -x convert-thumbnail2jpg.sh
とかやって頑張れ。

> if [ $width -lt 96 -o $height -lt 96];then
] の前にスペースを入れないとエラーになるはず。

$ sh -x

$ A=1 ; if [ "$A" = "1"]; then echo OK ; fi
+ A=1
+ '[' 1 = '1]'
sh: [: missing `]'
884882:2009/02/24(火) 19:03:27 ID:mkgOQJW+
>> for file in `cat ***/tmp/cache-file***` #リストアップされたファイルから順に処理
>読み込むファイルを間違ってるから for 文の file に何か別なものが入ってるかもしれない。
恥ずかしい間違いをしてしまってすみません…
一時ファイルに自分用に適当なファイル名を付けてしまっていたので、
ここに投稿する際に勝手に変更してました(元スクリプトは両方共/tmp/cache-file)

-xで内容が詳しく見られるようですね。もう少し頑張ってみます…
885882:2009/02/24(火) 19:13:26 ID:mkgOQJW+
1行目を
#!/bin/bash
にして、実行する際も$bash convert-thumbnail2jpg.sh と打つことで解決しました。
shではdeclareが使えず、bashでは使えるようです

お騒がせして申し訳ありませんでしたm(_ _)m
886883:2009/02/24(火) 20:34:08 ID:0/zaoYuK
>>884
> (元スクリプトは両方共/tmp/cache-file)
スクリプトの中で何回か使うものなら
cachefile="/tmp/cache-file"
とかやって定義してしまったほうがいいと思う。
887882:2009/02/25(水) 01:46:08 ID:TZfMttNn
>>886
おかげさまで無事完成しました
ありがとうございましたm(_ _)m
888login:Penguin:2009/02/26(木) 17:54:06 ID:fuSH76wo
関連スレ
シェルスクリプトでGUI
http://pc11.2ch.net/test/read.cgi/tech/1235483221/
889login:Penguin:2009/02/27(金) 02:01:52 ID:+MZ66A9I
bash4.0 導入した人誰かいまつか ?
RHEL5.3 make で error orz...
890login:Penguin:2009/02/28(土) 00:15:37 ID:2KTcWABE
とりあえず使えてるぞ
ubuntu8.10

GNU bash, version 4.0.0(1)-release (x86_64-unknown-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
891login:Penguin:2009/02/28(土) 00:25:54 ID:i9TaSY11
>>890
/bin/bash を置き換えたんですか?
892login:Penguin:2009/02/28(土) 00:31:49 ID:2KTcWABE
/usr/local/に置いただけ

俺には3.2と4.0の違いはあまり関係ないということがわかった
893login:Penguin:2009/02/28(土) 07:37:33 ID:zB5vZ6QQ
bashのバージョンに依存したスクリプトは趣味でやる以外はあんまり書かないと思うけど
894login:Penguin:2009/02/28(土) 11:00:16 ID:Tf6NC8nk
bashのバージョンに依存しないスクリプトって、ほぼ/bin/shか。
895login:Penguin:2009/03/01(日) 14:21:53 ID:b0tpnlkt
"A B C D E F"を
"B A D C F E"にしたり、

A
B
C
D
E
F



B
A
D
C
F
E

にしたりできますか?

つまり、AとBを入れ替え、CとDを入れ替え・・・ってな具合です。
896login:Penguin:2009/03/01(日) 14:54:34 ID:yaPGqr8Y
>>895
宿題乙。

一行タイプのやつ
sed -e 's/ /\
/g' | sed -e '1~2{h;d};1~2!G' | xargs

複数行タイプのやつ
sed -e '1~2{h;d};1~2!G'
897login:Penguin:2009/03/01(日) 15:06:32 ID:ClVN3cK/
>>895

echo 'A B C D E F' | tr 'ABCDEF' 'BADCFE'
898login:Penguin:2009/03/01(日) 16:12:08 ID:jusYIGdM
bash3 とbash4 って互換性大丈夫でしょ。
899login:Penguin:2009/03/01(日) 16:45:01 ID:b0tpnlkt
>>896>>897
素晴らしい!!
吹雪の最中に神が現れて、いきなり春になったような心境です。
ありがとうございました。
900login:Penguin:2009/03/05(木) 13:25:03 ID:k1KCKSK5
原子番号を元素記号に変換してください。
例)
8  → O
26 → Fe
92 → U



901login:Penguin:2009/03/05(木) 15:44:08 ID:7EIm6RPk
>>900
宿題は自分でやれ。
902login:Penguin:2009/03/05(木) 15:55:50 ID:3/9eCgJO
まず原子番号とそれに対応する元素記号の
テーブルを作成するところからはじめよう。
903login:Penguin:2009/03/05(木) 23:21:24 ID:BnKU6WpI
水素なら
w3m -dump http://ja.wikipedia.org/wiki/%E5%85%83%E7%B4%A0%E3%81%AE%E4%B8%80%E8%A6%A7 | awk '$1 ~ /^1$/{print $3}

ヘリウムなら/^1$/を/^2$/に変える。
904login:Penguin:2009/03/05(木) 23:24:25 ID:feEdgCm8
echo O > 8
echo Fe > 26
echo U > 92

cat %1




俺天才かもしれん。
905login:Penguin:2009/03/05(木) 23:25:16 ID:feEdgCm8
間違えた。。。


cat $1だ。
906login:Penguin:2009/03/05(木) 23:35:39 ID:BnKU6WpI
#!/bin/bash
#grepバージョン
w3m -dump http://ja.wikipedia.org/wiki/%E5%85%83%E7%B4%A0%E3%81%AE%E4%B8%80%E8%A6%A7 | grep "^"$1"[[:space:]]"

907login:Penguin:2009/03/06(金) 00:15:22 ID:4E0LodKQ
>>903
つ awk -v x=番号 '$1 ~ "^" x "$" { print $3 }'
908login:Penguin:2009/03/06(金) 02:41:09 ID:0+Otyqrv
全部if文でやれ。
909login:Penguin:2009/03/06(金) 11:10:42 ID:Es9Fr0vK
w3m -dump http://ja.wikipedia.org/wiki/%E5%85%83%E7%B4%A0%E3%81%AE%E4%B8%80%E8%A6%A7 | perl -ane 'for (1..118) { print "$_: $F[2]\n" if $F[0]=~/^$_$/;}'
910login:Penguin:2009/03/06(金) 19:13:45 ID:m/0+PDHQ
一覧表示でいいなら、これが楽だろ
w3m -dump http://ja.wikipedia.org/wiki/%E5%85%83%E7%B4%A0%E3%81%AE%E4%B8%80%E8%A6%A7 | awk '/^[0-9]/{print $1,$3}'
911login:Penguin:2009/03/06(金) 20:23:52 ID:+R69oXB9
こんなの波動だ

#!/bin/bash
echo 原子番号は
syuuki=~/syuuki
w3m -dump http://ja.wikipedia.org/wiki/%E5%85%83%E7%B4%A0%E3%81%AE%E4%B8%80%E8%A6%A7 |awk '/^[0-9]/{print $1,$3}' - >$syuuki
read genso
echo 原子番号$gensoの元素記号は`grep $genso ~/syuuki`です。


grepが未完成 記号だけにしたい。
912login:Penguin:2009/03/06(金) 22:47:09 ID:tq3ZQvrP
echo 原子番号$gensoの元素記号は`ruby -ane 'BEGIN{genso = ARGV[1]}; if $F[0] == genso; p $F[1]; break; end' ~/syuuki $genso`です。
913login:Penguin:2009/03/07(土) 09:01:58 ID:Qelg+V+C
「原子番号」「の元素記号は」などと書かんでいいから、
改行を入れて見やすくしろ、カス。
914login:Penguin:2009/03/07(土) 20:47:19 ID:zmyZifQf
というかレポートに出すんだからさ
もっと初心者っぽく書いてください
期限は明日までです

915login:Penguin:2009/03/07(土) 21:07:11 ID:cObxxbWz
よし!
やっぱり自分でやろう!

みなさんすいませんでした。忘れてください
916login:Penguin:2009/03/07(土) 21:41:55 ID:pgHRyspE
917login:Penguin:2009/03/08(日) 16:51:10 ID:xQcHQnf7
Perlがあればシェルスクリプトなんて要らない
Perlのほうが高機能だから
918login:Penguin:2009/03/08(日) 17:20:38 ID:J6Fw6OuS
Perl は外部コマンド一つ呼ぶのにいちいち system() とか書かなきゃいけない時点で問題外でしょ。
シェルスクリプトは外部コマンドの呼び出しがとても多いんだから、文法レベルでサポートされてないとやってられない。
919login:Penguin:2009/03/08(日) 18:43:54 ID:4ovvgVHR
$date = `date`;
920login:Penguin:2009/03/08(日) 19:34:58 ID:J6Fw6OuS
ごめん、見直した。
921login:Penguin:2009/03/10(火) 18:06:25 ID:IwU0KhJ5
シェルスクリプトってOOじゃないんでしょ?
ダサっ

Perl使えない落ちこぼれが使う言語、それがシェルスクリプト
922login:Penguin:2009/03/10(火) 19:16:49 ID:ZRv0wOpe
xargsとsedで文字列加工をしようとしたがうまくいきません
コマンド|xargs -n 1 sed 〜 だとコマンドの出力内容がファイル名として解釈されるし
コマンド|xargs -n 1 echo|sed 〜 だとxargsがない場合と同じ動作になります
別にシェルスクリプトを
echo ${1}|sed 〜 と作って
コマンド|xargs -n 1 スクリプト とすると sed -e "s/〜 の s が未定義と怒られる
他に方法はありますか?
923login:Penguin:2009/03/10(火) 21:34:04 ID:t8WYWXe4
>>921
OO という観点で議論するなら perl じゃなくて
もっとまともな言語と比較しろよ。
924login:Penguin:2009/03/10(火) 21:51:10 ID:hrcV3cEG
>>922
sed 〜 `コマンド`

とか?
925login:Penguin:2009/03/10(火) 22:33:24 ID:HaCEu7vE
>>921
よりによって最も汚いOOを持つ言語を引っ張り出してきたな。。。
926login:Penguin:2009/03/10(火) 23:10:33 ID:XmHUdl+t
317 名前:名無しさん@お腹いっぱい。 []: 2009/03/10(火) 18:05:12
シェルスクリプトってOOじゃないんでしょ?
ダサっ
927login:Penguin:2009/03/10(火) 23:13:24 ID:21j8Lv5u
そもそも、ほとんどの処理を外部のコマンドに投げているのに
OOはどういうことなのだろうか?
928login:Penguin:2009/03/10(火) 23:17:44 ID:wgUyESoz
>>922
同僚に聞いてみたんだが、xargs なしだとだめなの?
たとえば、ファイル名の置換なら
 $ find . -print|sed -e "s/〜
になると思うんだけど。
(for i in `find .`〜 のほうが使いやすいと思うが)

それか
 $ コマンド|xargs -i echo {}|sed -e "s/〜
とか?
コマンドのところとか、sed で何をしたいのかを明確に
してもらえればもうちょっと回答のしようがあると思う。
929922:2009/03/10(火) 23:39:56 ID:ZRv0wOpe
>>924
コマンドの結果がファイル名として認識されました。

>>928
xargsなしで今はやっています。
メイク時の出力内容をVC方式に変換するために文字列を以下のように変換しています。
make debug 2>&1 | sed -e "s/:\([0-9][0-9]*\):/(\1):/g" | sed "s/[/]/\\\/g" | sed "s/^/c:\\\cygwin\\\home\\\\${USER}\\\\${PROJNAME}\\\source\\\/g"
ただし、今の状態だとメイクが完了するまで出力がされないため、
メイクがどの程度進んでいるかの確認や、エラー/ワーニングにすぐ対応できないのです。

また、できれば2の出力だけをパイプに流したいのですが、方法はありますか?
(1は普通に画面表示)
イメージは make debug 2>( xargs -n 1 echo|sed 〜) です。

ちなみに コマンド|xargs -i echo {}|sed -e "s/〜 は
c:\cygwin\home\ユーザ名\プロジェクト名\source\{} 出力された文字列
となり、うまくいきませんでした。
# echo "{} 文字列" と認識された?
930login:Penguin:2009/03/11(水) 02:34:25 ID:LOMFWb0Z
>>929
xargs -iの後の{}は'{}'みたくエスケープしないとダメなんじゃないの?
931login:Penguin:2009/03/11(水) 08:59:36 ID:DFgGOxJ9
Windows PowerShellはOOなのに
シェルスクリプトはOOじゃないんだよね

時代遅れだね
932login:Penguin:2009/03/11(水) 14:33:02 ID:Z5TO7Bpy
>>929
>211
sed -u 〜
933login:Penguin:2009/03/11(水) 21:43:30 ID:bm/c4JTk
>>931
死ぬほど使いにくいけどな。WindowsPowerShell。
934login:Penguin:2009/03/11(水) 22:32:39 ID:q2e6tqEw
つか、オブジェクト指向が反省されている今になって、何を時代錯誤な事を言ってる人なんだ。
935login:Penguin:2009/03/13(金) 11:15:15 ID:6BZk1deA
c++やjavaのoopはあまり良いものではないからね。
特にjavaでしかoopを知らない人って、なんでもかんでもオブジェクト
にしてしまうだろうし、あれは非効率的なんだよね。
oopも使えるというならそれはそれでいいけどシェルスクリプトの延長線上
にrubyやperlがあるから、oopに拘るならばそっちを使えばいいだけのはなしだよね。
936login:Penguin:2009/03/18(水) 18:33:49 ID:RWYXndAF
くだ質の763に、du -hの結果をサイズ順にソートしたいってのがあった。
 $ df -h
 20K ./foo
 8.0K ./bar
 5.1M ./hoge
元質問者は勘違いってことで解決してるんだけど、これをカッコよく1 linerで実現する方法はあるんだろうか?
置換して〜ソートして〜とか、泥臭い方法しか思いつかない...
937login:Penguin:2009/03/19(木) 00:49:00 ID:Ex8kaKKQ
>>936
-h外して後で1024の倍数掛ければいい
938login:Penguin:2009/03/19(木) 01:30:46 ID:1vjKEAU9
俺もそう思うけど、
>>936が話題にしているのは、たぶんdfに限らず、単位を接尾辞とした小数数字を如何にsortするかじゃないかな。
939login:Penguin:2009/03/19(木) 01:33:02 ID:VEb9NHr7
そーじゃなくて>>936の出力をソートするスクリプトがあるか、だろう
おれも置換したりしないと出来値
940login:Penguin:2009/03/19(木) 01:34:48 ID:gobNSPAB
>>937
-hは前提条件でお願い。します。
941login:Penguin:2009/03/19(木) 01:36:54 ID:dcED7bZL
しかしdu -h も微妙なコマンドだな
KつきMつきで見たいやつが大半だろうにソートもできるようにしてくれよって気が
942login:Penguin:2009/03/19(木) 03:20:47 ID:yCb470li
bashで引数が0-9の間ならダンプレベルに設定しようとしています

if [ -n $1 ]; then
if [ $1 -ge 0 -a $1 -le 9 ]; then
dlevel=$1
fi
fi

これを実行すると引数が無いときと
引数が数字以外のときにエラーメッセージが出てしまいます
引数が数値かどうかチェックする方法がないでしょうか?
よろしくおねがいします

$ ./dump.sh
./dump.sh: line 22: [: too many arguments

$ ./dump.sh 3
dlevel=3 期待通りの動き

$ ./dump.sh fufufu
./dump.sh: line 22: [: fufufu: integer expression expected
943login:Penguin:2009/03/19(木) 04:02:43 ID:3RRVnfG+
if [ -n "$1" ]; then
if expr "$1" : '[0-9][0-9]*$'; then
944login:Penguin:2009/03/19(木) 04:04:43 ID:M6oJqh1N
case "$1" in
[0-9])
dlevel="$1"
;;
esac
945login:Penguin:2009/03/19(木) 04:57:28 ID:yCb470li
>>943, 944
どうもありがとうございます
caseの方を採用させていただきました
946login:Penguin:2009/03/19(木) 13:59:30 ID:KDP/tv8i
>>937-941
やぱしそれなりに泥臭いやり方しかないですかね? 最初、sortはバッファサイズ変更時に
GBとかMBとか見てくれるんだからきっと、とか思ったのに。
947login:Penguin:2009/03/19(木) 14:48:56 ID:+WS3QA7Q
-h 外せば済む話なのに
苦労してスクリプト書く意味がわからん。
948login:Penguin:2009/03/19(木) 15:44:21 ID:VEb9NHr7
目的が「duの結果をソートしたい」じゃなくて「このテキストを(意味を考えて)ソートしたい」だと何度(ry
949login:Penguin:2009/03/19(木) 15:54:38 ID:QnAt/IUj
>>948
dfかduかはっきりしてくれ。duならxduをつかっとけ。MやGよりも視覚的にサイズを
表現してくれた方が分かりやすい。もちろんソートできる。
950login:Penguin:2009/03/19(木) 19:05:34 ID:KDP/tv8i
>>949
元質問はオレなんだが、>>948のとおり、別にduでもdfでもなく、GとかMとかのサイズ指定で
かつ小数点付きのを、どうソートするか、というのが意図だったわけで。

質問の仕方がまずいのは認める。すまん。
951login:Penguin:2009/03/20(金) 10:34:47 ID:OD1Bm4W7
シェルスクリプトで開発したツールをshcでコンパイルしたとして、
それがシェルスクリプトだとバレることってありますか?
もちろん調べればわかるでしょうけど
一般的なエンドユーザの能力ではどうでしょうか?
952login:Penguin:2009/03/20(金) 11:49:16 ID:vtofDqpI
>>951
つ chmod 311 a.out
953login:Penguin:2009/03/20(金) 21:45:28 ID:Pky/qqR2
tar
954login:Penguin:2009/03/20(金) 21:46:03 ID:Pky/qqR2
tar tvf filename.tar
の結果をファイル名順にソートするにはどうすればいいでしょうか?
955login:Penguin:2009/03/20(金) 21:54:15 ID:vtofDqpI
sort -k 6
956login:Penguin:2009/03/20(金) 22:29:18 ID:Pky/qqR2
>>955
ありがとうございます。以下で出来たと思います。
tar tvf filename.tar | sort -k 6
ファイル名が9番目に来ることがあるのは、OSによるものでしょうか?
957login:Penguin:2009/03/20(金) 22:30:46 ID:vtofDqpI
ロケール依存じゃね?
日付の表示
958login:Penguin:2009/03/20(金) 22:45:25 ID:Pky/qqR2
>>957
なるほど、ありがとうございます。

当初の質問とズレますが

ls -lRのディレクトリ名が
職場の環境では
temp:
となり

自宅では
./temp:
となるのもロケール依存の問題でしょうか?
959login:Penguin:2009/03/20(金) 23:54:41 ID:vtofDqpI
ls -lR temp
ls -lR
の違いって事はない?
960login:Penguin:2009/03/21(土) 10:08:06 ID:/JVnxKfV
>>959
引数にディレクトリを指定せずに>>958の違いがでます。
OSは職場がAIXで、自宅がCentOSです。

結果のリストをテキストファイルに出力してプログラムで利用しているので、
フォーマットが違うと問題があるのですが、
行末に「:」があればディレクトリと認識したり、リストのフォーマットに応じたプログラムを
書けばいいのかなと思います。

親切にありがとうございました。
961login:Penguin:2009/03/21(土) 13:39:10 ID:ZdP11rWE
AIXならコードベースが違うから、細かい書式も違うだろうね。

find . -printあるいはfind . -lsの結果を利用した方がいいかもね。
こっちは加工されることを前提とした出力だから。
ls -lRはそうじゃない。
962login:Penguin:2009/03/24(火) 21:43:58 ID:vhkRQKv/

bash で、複数の戻り値を返すにはどうやる?

func foo()
{
return VAL1 VAL2
}

(VAL1, VAL2)=$(foo)

こんなのがやりたいんだけど。

今まで思いついた例では、
1、ファイル経由で帰す。
echo $VAL1 >/tmp/$PID.val1
echo $VAL2 >/tmp/$PID.val2
可能だけどちょっと無駄。

2、readをつかう。
#!/bin/bash
$(foo) | read VAL1 VAL2
やってみたけど、動かない。なんとかしてくれ!。

963login:Penguin:2009/03/24(火) 22:07:39 ID:fdZEc0lM
returnで返すことにこだわる意味があるん?
VAL1 VAL2 に関数内で値つっこめばいいだけじゃないの?
グローバル変数がどうのとか、シェルで気にする必要ないだろと個人的に思うし。
964login:Penguin:2009/03/24(火) 22:13:47 ID:JcSO3hFa
>>962
ttp://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html
>関数ローカルの変数は、組み込みコマンド local で宣言できます。
>普通は、変数とその値は関数とその呼び出し側で共有されます。
965962:2009/03/24(火) 23:09:01 ID:vhkRQKv/

グローバル変数で受け渡し?

んまあそうなんですけど、
なんでもグローバルという、BASIC言語みたいなのは生理的にイヤ。
可能な限り普段から全部 local 宣言つけてますので。

なんとか、return VAL_A VAL_B
とかムリっすか?

966login:Penguin:2009/03/24(火) 23:27:22 ID:JcSO3hFa
>>965
無理
> return [n]
> 指定した返り値 n で関数を終了させます。
> n を省略すると、返却ステータスは関数内で最後に実行したコマンドの返却ステータスになります。

スクリプトを分けて標準入出力で受け渡すくらいしか思いつかん
967login:Penguin:2009/03/24(火) 23:31:50 ID:elKnmt6d
俺も昔戻り値二つ返したかったが諦めたことがある。
泣く泣くグローバルにした。
968login:Penguin:2009/03/24(火) 23:32:20 ID:LPmFGK87
>>965
無理矢理だけどこんなことは出来る。

foo ()
{
echo "$VAL1 $VAL2"
}

VALS=(`foo`)

VAL1=${VALS[0]}
VAL2=${VALS[1]}

969login:Penguin:2009/03/25(水) 12:00:35 ID:ZZ2mmRGj
グローバル変数がイヤならばそもそも sh じゃなくて別のスクリプト言語で書け。
そういう言語なんだからあきらめて受け入れろ。
無理に技巧をこらしたところで逆に可読性を落とすだけ。
970login:Penguin:2009/03/25(水) 12:15:44 ID:NaCjRRoe
>>969
そうおもう。perlでもrubyでもgaucheでもいいから。
でも、延長線上で使えるrubyのほうが馴染みやすいかも
971login:Penguin:2009/03/25(水) 12:23:07 ID:uD+uLQB8
>>962
> return VAL1 VAL2
< echo VAL1 VAL2
してreadしる
972login:Penguin:2009/03/25(水) 17:28:54 ID:GtIifwrA
/tmpに書け
973login:Penguin:2009/03/26(木) 15:32:50 ID:3e22XvSN
シェルスクリプトを始めて勉強するのですが、

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界(http://www.amazon.co.jp/dp/4797321946)



UNIXシェルスクリプトコマンドブック(http://www.amazon.co.jp/dp/4797330635)

どちらで勉強するのが良いでしょうか?
974973:2009/03/26(木) 15:33:45 ID:3e22XvSN
×始めて 
○初めて

orz
975login:Penguin:2009/03/26(木) 16:30:55 ID:5RpvIQgk
入門bashがオヌヌメ
976login:Penguin:2009/03/27(金) 00:19:45 ID:hx4pY+SP
どれでもいっしょでヌメヌメ
977login:Penguin:2009/03/27(金) 01:38:27 ID:SSuQKmC1
>>976
>>975

ありがとうございます。
まずは>>975さんにヌメヌメして頂いた入門Bashから勉強していきたいと思います。
978login:Penguin:2009/03/27(金) 02:32:52 ID:3RSixa0K
つ「全部」
979login:Penguin:2009/03/29(日) 04:23:46 ID:k6vYgSJE
とあるディレクトリ以下に存在する
特定の拡張子のファイルのみについてファイルサイズの合計を知りたい場合、
最もマシンに負荷を与えずに結果を出すにはどの方法が適しているでしょうか?

・ duコマンドだと除外パターンのパラメータしかない
・ lsの結果の拡張子でgrepした後、ファイルサイズ部分をawkしてexprで足し算だと負荷が結構かかる

という感じで、もっとサクっと結果を軽い処理で出せるような気がするんですが・・・。
980login:Penguin:2009/03/29(日) 05:38:56 ID:RIZc4nP9
findとawkで
981login:Penguin:2009/03/29(日) 07:07:03 ID:HsEQt0tU
>・ lsの結果の拡張子でgrepした後、ファイルサイズ部分をawkしてexprで足し算だと負荷が結構かかる

expr要るのか?
ls -Rl | grep "\.suffix" | awk '{size += $5} END {print "total " size}'
find -name \.suffix -printf "%s\n" | awk '{size += $1} END {print "total " size}'
982login:Penguin:2009/03/29(日) 15:49:16 ID:HhnBqalt
>-name \.suffix
o... rz
983login:Penguin:2009/03/30(月) 08:01:30 ID:4/oTu4d/
10台くらいサーバセットアップする必要があり、
それぞれのapacheの設定ファイルのIP部分だけ変えたいのですが、
何かシンプルで良い方法ってあるでしょうか?

環境変数設定kono_server_no_ipを設定して、
sedあたりで設定ファイルのIP部分をkono_server_no_ipに置換処理、
みたいな感じをぱっと思いついたのですが、
もっとベターな方法ってあるでしょうか?
984login:Penguin:2009/03/30(月) 10:33:16 ID:rBZKWvDE
>>983
まずサーバ毎の環境変数(kono_server_no_ip)の設定はどうやるの?
環境変数の設定をエディタでやったら本末転倒だよね?

「このIP」が自分自身のipアドレスでいいなら、ifconfigで取得してsedで置換。

あと、シンプルじゃなくていいならPuppetとか。
985983:2009/03/30(月) 20:43:17 ID:4/oTu4d/
>>984
なるほど
ありがとうございます
参考になりました
986login:Penguin:2009/03/30(月) 22:46:52 ID:EooVhp24
つーかスレチで済まないがapacheの設定で自身のIPアドレスが必要なんだろうか…
よくわからんけどnamevirtualhostならデフォルトは*で平気なはずだし。
こんなのとか。
http://www.hozen.org/ml/1/thread/684
987login:Penguin
VirtualHostといっても名前ベースとは限らないしな。
きっと金持ちなんだろう。