シェルスクリプト総合 その15at UNIX
シェルスクリプト総合 その15 - 暇つぶし2ch200:名無しさん@お腹いっぱい。
09/08/04 20:19:43
Solaris10の/bin/sh: ×「.」の中でのreturn / × alias
FreeBSDの/bin/sh: ○「.」の中でのreturn / ○ alias
bash: ○「.」の中でのreturn / ○ alias
zsh: ○「.」の中でのreturn / ○ alias
ksh: ○「.」の中でのreturn / ○ alias

201:名無しさん@お腹いっぱい。
09/08/05 00:56:33
FreeBSDの/bin/shってボーンシェルじゃないの?もしかして

202:名無しさん@お腹いっぱい。
09/08/05 01:33:46
もしかしても糞もなくボーンシェルじゃありません

203:名無しさん@お腹いっぱい。
09/08/05 02:09:21
BシェルというのはBourne Shell=/bin/sh だと思ってたけど違うの?
ボーンシェルでない/bin/shというのはBシェルでもなく一体なんなんですか?

204:名無しさん@お腹いっぱい。
09/08/05 02:17:07
>>1読めよ

205:名無しさん@お腹いっぱい。
09/08/05 06:22:27
Bourne Shell ≠ ボーンシェル
Bourne Shell = ブールネシェル

206:名無しさん@お腹いっぱい。
09/08/05 17:46:17
>>201 >>203
どのバージョンからかだったかは忘れたが、
FreeBSD や NetBSD の /bin/sh は Bourne Shell ではなくその互換再実装の Almquist Shell だよ

>AUTHORS
> This version of sh was originally written by Kenneth Almquist.


207:名無しさん@お腹いっぱい。
09/08/05 19:45:44
386BSDはすでにashだった。

208:名無しさん@お腹いっぱい。
09/08/06 06:48:56
>>206
なるほど、ashはbourne shellであってはいけないのか。
URLリンク(en.wikipedia.org)
> Due to copyright issues surrounding the Bourne Shell as it was
> used in historic CSRG BSD releases, Kenneth Almquist developed
> a clone of the Bourne Shell

209:名無しさん@お腹いっぱい。
09/08/06 15:38:32
44,555
34,567
0
143,456
1,235,004
44
0
0
55
みたいな数字の列があるのですが、これのトータルを計算したいと思ってます。
問題は数字の3桁ごとに,が入ってることなのですが、Bashスクリプトでこれを取りつつ合計を計算
する方法ってあるでしょうか?
どうかよろしくお願いします。


210:名無しさん@お腹いっぱい。
09/08/06 15:54:06
sed -e "s/,//g"
で出来ましたが、合計の計算ができません。
44555
34567
0
143456
1235004
44
0
0
55
から、全部の合計を出したいです。

211:名無しさん@お腹いっぱい。
09/08/06 15:57:01
sed -e "s/,//g" | xargs echo | sed -e "s/ /+/g" | bc
これで出来た。


212:名無しさん@お腹いっぱい。
09/08/06 15:59:44
何万行もあると破綻しそうな

213:名無しさん@お腹いっぱい。
09/08/06 16:17:27
>>209

#!/bin/bash

n=0
while IFS=, read line
do
((n += line))
done
echo $n

214:名無しさん@お腹いっぱい。
09/08/06 16:25:39
>>213
それ、カンマの除去処理がおかしい


>>209

#!/bin/bash

n=0
while read line
do
((n += ${line//,/}))
done
echo $n

215:名無しさん@お腹いっぱい。
09/08/06 17:07:33
{ echo 0; sed -e 's/,//g' -e 's/$/+/'; echo p; } |dc

216:名無しさん@お腹いっぱい。
09/08/06 17:12:10
sed 's/,//g'| paste -s -d+ | bc


217:名無しさん@お腹いっぱい。
09/08/06 17:22:53
>>215
それだったら、

sed 's/,//g; s/$/+/; $s/$/0/' | bc

の方が簡潔。

218:名無しさん@お腹いっぱい。
09/08/06 17:31:47
>>217
bcだと、途中改行できないから不可。
sedでさらに行末にバックスラッシュを付加してやればそれでも動くかな。

>>215
echoとsedと一緒に使うと無駄。

sed '1s/^/0 /; s/,//g; s/$/+/; $s/$/p/' | dc

でいいだろ。

219:名無しさん@お腹いっぱい。
09/08/06 17:34:20
>>217
実行してから因縁つけろ。カス

sed 's/,//g; s/$/+/; $s/$/0/' file| bc
(standard_in) 2: syntax error
(standard_in) 3: syntax error
(standard_in) 4: syntax error
(standard_in) 5: syntax error
(standard_in) 6: syntax error
(standard_in) 7: syntax error
(standard_in) 8: syntax error
(standard_in) 9: syntax error

220:名無しさん@お腹いっぱい。
09/08/06 17:42:32
みなさん、質問を良く読みましょうね。
>>209 さんは、
> Bashスクリプトで
って言ってますよ。

よって、>>214 が正解ですね。

すでに正解が出ているのに >>215 以降に何か書いてるおともだちがいますが、
Bashも使っていないし、質問の答としてはふさわしくありませんね。

221:名無しさん@お腹いっぱい。
09/08/06 17:44:22
Bash: not found だから>>214は不正解だな。

222:名無しさん@お腹いっぱい。
09/08/06 17:58:51
>>221
そういうことしか言えないようだから >>214 が正解だな

223:名無しさん@お腹いっぱい。
09/08/06 23:36:58
>>218
それで処理すると、
dc: stack empty
dc: stack empty
dc: stack empty
と出ます。

224:名無しさん@お腹いっぱい。
09/08/07 07:05:39
>>223
スペースも含めてちゃんとコピペしろ。

225:名無しさん@お腹いっぱい。
09/08/10 15:20:35
シェルスクリプトって、ほんとツンデレだよな。
理解するまで四苦八苦ツンツンしてるくせに、一旦わかってしまうと、とたんにデレデレ。

226:名無しさん@お腹いっぱい。
09/08/10 16:25:01
別にそれはシェルスクリプトに限ったことでもなかろう

227:名無しさん@お腹いっぱい。
09/08/11 18:17:01
しばらく使わないと忘れちゃってまたツン期に入るのが…

228:名無しさん@お腹いっぱい。
09/08/11 23:15:11
bashで変数の置換と切り出しとかを一緒にできないですかね?

echo ${HOGE//a/A}
echo ${HOGE:0:8}

これをひとつにしたい感じです

229:名無しさん@お腹いっぱい。
09/08/12 00:02:16
もちろん、できません

230:名無しさん@お腹いっぱい。
09/08/15 15:52:19
bash です。

date | read HOGE

これやっても変数 HOGE が空なんだけど、どうして?

231:名無しさん@お腹いっぱい。
09/08/15 15:55:14
readはサブシェルで実行されて瞬殺で終了するから。

232:230
09/08/15 16:05:15
>>231
即答サンクス!

そうだった、パイプラインはそれぞれサブシェルで動くんだった。
つーことは、date 出力を変数に入れるには、素直に

HOGE=`date`

でよい、と。

233:名無しさん@お腹いっぱい。
09/08/15 16:57:18
>>232
× パイプラインはそれぞれサブシェルで動く
○ 1個以上のパイプを含んだパイプラインはそれぞれサブシェルで動く

普通のコマンド1個だけでも「パイプライン」なので。

234:232
09/08/15 17:37:04
>>233
訂正サンクス!
確かに。

サブシェルと「環境」について、いまいち理解できない…


235:名無しさん@お腹いっぱい。
09/08/15 17:47:10
バッドノウハウよりもっと有用な事を覚えよう

236:名無しさん@お腹いっぱい。
09/08/15 20:09:24
バッドノウハウを覚えることは有益
バッドノウハウをあれこれ考えることは無益

237:名無しさん@お腹いっぱい。
09/08/15 20:50:30
バッドノウハウって、具体的に何のこと言ってるの?

238:名無しさん@お腹いっぱい。
09/08/15 20:55:52
定義にこだわるふりをして、干されている現実から目をそらす>>233の手法。

239:名無しさん@お腹いっぱい。
09/08/17 06:30:05
la -Alでファイルサイズとファイル名のみほしいので
la -Al | cut -d " " -f 5,9
とかやるとうまくいきません。どうすればいいですか?

240:名無しさん@お腹いっぱい。
09/08/17 06:43:43
>>239
cutでうまういかないのは、複数のスペースがすべて「区切り」とみなされるから。

awk使った方がいい

ls -Al | awk '{print $5 " " $9}'

241:名無しさん@お腹いっぱい。
09/08/17 07:29:22
>>240
awkはシェルにあらず。
シェルスレなんだからシェルでやれ

ls -lA | while read line; do set -- $line; echo $5 $9; done

242:名無しさん@お腹いっぱい。
09/08/17 08:51:13
>>239>>240
あざーす
もうひとつ聞きたいのですが
文字列の先頭の1文字目のみ切り出す
ってどうやればいいでしょうか?
val1=abc
val1=`expr "$val1" : "\(.\).*"`
とかでいいですか?

243:名無しさん@お腹いっぱい。
09/08/17 09:38:43
>>242
bashなら、

var=abc
echo "${var:0:1}"

244:名無しさん@お腹いっぱい。
09/08/17 12:23:11
>>243
あざーす

245:名無しさん@お腹いっぱい。
09/08/17 17:19:44
>>241
> awkはシェルにあらず。
> シェルスレなんだからシェルでやれ
濡れた。
アッーーーー

246:名無しさん@お腹いっぱい。
09/08/17 21:32:10
便乗質問。

>>241 の手法に感心したんだけど、わざわざ set で位置パラメータを再設定して
使うっていう方法は、普通にアリなの?
set はシェル動作制御用コマンドの側面が強くないですか? そうでもない?

247:名無しさん@お腹いっぱい。
09/08/17 21:51:50
>>246
set使わずに、
↓でもいいんだけどね

ls -lA | while read x x x x s x x x f x; do echo $s $f; done

248:名無しさん@お腹いっぱい。
09/08/17 23:25:45
(純正シェルで)使える機能は何でも使うのがシェルプログラミングの作法。

249:246
09/08/17 23:51:47
>>247
これはすげえ! 強引!w

>>248
そうかあ。使えるものは使う、と。自分専用ツールならなおさらだね。

ううむ、シェルは深いなあ。でも楽しい。
覚えると明らかに生産性が上がる。

250:名無しさん@お腹いっぱい。
09/08/18 00:57:44
>>247
すげえ・・・目から鱗・・・

251:名無しさん@お腹いっぱい。
09/08/18 11:43:54
>>247はわりとよく見かけると思うが……。
>>241の方法は元々の$@が破壊されるのでよほどのことがないかぎりやらない。


252:名無しさん@お腹いっぱい。
09/08/18 11:51:59
>>251
>>241 の方法を使っても、readのパイプがサブシェルだから、
それを抜けたら $@ は破壊されていない。

253:名無しさん@お腹いっぱい。
09/08/20 01:48:49
echo に渡すのがスマートでないですか?

ls -Al | xargs -l echo | cut -d" " -f5,9

254:名無しさん@お腹いっぱい。
09/08/20 01:51:38
というか
ls -Al | xargs -l | cut -d" " -f5,9
これでよかった・・・・

255:名無しさん@お腹いっぱい。
09/08/20 16:46:23
で、改行、空白を含むファイル名を正しく扱えるのはどの回答?

256:名無しさん@お腹いっぱい。
09/08/20 16:52:37
>>255
ls 使ってる時点で改行、空白を含むファイル名は最初から考えられてない。

257:名無しさん@お腹いっぱい。
09/08/20 21:13:57
コマンドなしのxargsってどういう意味?

258:名無しさん@お腹いっぱい。
09/08/20 21:16:00
>>257
2個以上のスペースを1個だけにするもの。

>>240 も参照。

259:名無しさん@お腹いっぱい。
09/08/20 21:26:14
echoの省略形

260:名無しさん@お腹いっぱい。
09/08/20 21:32:38
>>259
それは知ってるよ(>>253)。そのechoが何の意味があるかの質問だろ。

261:名無しさん@お腹いっぱい。
09/08/21 09:59:17
だから2個以上のスペースを1個にするんだって。


262:名無しさん@お腹いっぱい。
09/08/21 10:10:39
そもそも human readableな ls の output を filtering するというのが
bad design なんんだよな。
次期 ls には是非、
--format='%f %s' 的な optionを appendしていただくことを wishする。

263:名無しさん@お腹いっぱい。
09/08/21 10:14:50
stat(1)あたりをposixに入れる方が早くないか?

264:名無しさん@お腹いっぱい。
09/08/21 12:51:07
>>262
英語使って、かっこつけているつもり?

265:名無しさん@お腹いっぱい。
09/08/21 16:40:18
ルー語はカッコよかったんか

266:名無しさん@お腹いっぱい。
09/08/22 11:36:50
csh の存在価値はなんだろう。
bash でいいじゃん。

267:名無しさん@お腹いっぱい。
09/08/22 12:07:49
それはこっちで

C shell 撲滅委員会
スレリンク(unix板)

268:名無しさん@お腹いっぱい。
09/08/22 18:50:28
bashが無駄に重くなっていってくれたおかげで
tcshは無難に使えるログインシェルという位置を確保できたw
そしていろいろと便利な設定をするためにcshスクリプトの書き方を知る必要がある。

269:名無しさん@お腹いっぱい。
09/08/22 19:37:03
ksh93を使ってる俺は勝ち組

270:名無しさん@お腹いっぱい。
09/08/25 17:34:40
質問です
1 12 123
1 2 23
のようなテキストを
xx1xx12x123
xx1xxx2xx23
(x=空白)
のように幅を揃えるにはどうすればいいですか?

271:名無しさん@お腹いっぱい。
09/08/25 17:44:42
awk '{printf("%3d%3d%4d\n",$1,$2,$3);}' < test.txt

272:名無しさん@お腹いっぱい。
09/08/25 17:50:50
>>271
勝手に桁数決め打ちしていいのか?
同じカラム上にある最大桁数をサーチした上で %*d (*は数字)に
しなければならないという質問だと思うが。

273:名無しさん@お腹いっぱい。
09/08/25 17:57:58
それは質問者が言うべきこと。

274:270
09/08/25 18:09:22
すいません。実際の数字は一行に数千あって行も数千あります。
でも一つの区切りの中の数字は三桁までです。

275:名無しさん@お腹いっぱい。
09/08/25 18:15:40
絵に描いたような後出しw

276:ruby,perl等のほうが早いかも
09/08/25 19:34:46
>>274
一行にある数字の数は固定している?それとも変動もある?

277:名無しさん@お腹いっぱい。
09/08/25 21:29:45
>>270 >>274

#!/bin/sh
while read line
do
set $line
while [ $# -ge 1 ]
do
printf '%3d ' $1
shift
done
echo
done

278:名無しさん@お腹いっぱい。
09/08/25 21:30:54
>>276
固定してます。

279:名無しさん@お腹いっぱい。
09/08/25 21:36:54
>>277
だったら forの方がいい。


#!/bin/sh
while read line
do
for n in $line
do
printf '%3d ' $n
done
echo
done

>>278
直前の回答読めよ。

280:名無しさん@お腹いっぱい。
09/08/25 21:44:07
すいませんリロードしてませんでした。
上手く行きそうです。みなさんありがとうございました。

281:名無しさん@お腹いっぱい。
09/08/26 00:47:55
>>279
| sed 's/ $//'したいな

282:名無しさん@お腹いっぱい。
09/08/26 06:48:36
>>279
いや、行末のスペースを取ることを考えると、
>>277 の方式の方がいいんだよ。


#!/bin/sh
while read line; do
set -- $line
while [ $# -ge 2 ]; do
printf '%3d ' $1
shift
done
if [ $# -eq 1 ]; then
printf '%3d' $1
fi
echo
done

283:名無しさん@お腹いっぱい。
09/08/27 11:50:33
execute.shellを実行し、psコマンドを実行すると以下のように表示されます。

PID TTY TIME CMD
13219 pts/1 00:00:00 bash
17938 pts/1 00:00:30 java
17222 pts/1 00:00:37 java
25353 pts/1 00:00:00 ps

CMDのjavaがexecute.shellのプロセス名みたいなんですが、
これをexcecuteと表示させることは可能ですか?


284:名無しさん@お腹いっぱい。
09/08/27 12:28:06
>>283
コマンド自身がargv[0]を書き換えてるか、
またはexecute.shellは単なる起動スクリプトで、実際にjavaがexecされてるから、
元のコマンドのexcecuteを表示させることは無理。

285:名無しさん@お腹いっぱい。
09/08/27 12:39:26
コマンドライン引数にかけらが有るかもしれない。
ps -a

286:名無しさん@お腹いっぱい。
09/08/27 13:59:26
>>284
了解です。レスありがとうございます。

>>285
ありがとうございます。
ps -aしてみましたが表示は変わらなかったです。


2重起動を防止するため、プロセス名を取得しようとしていたのですが無理のようなのであきらめました。
PID番号付きのファイルを作成することにしました。ファイルはなるべく作りたくなかったのですが。

287:名無しさん@お腹いっぱい。
09/08/27 17:29:53
sedコマンドをつかって
aaa|abc|bef|efg||||aa
の文字列(|は区切り文字)の一番最後のフィールドのaaの部分をbcdに変えて
aaa|abc|bef|efg||||bcd
と出力させるにはどのようにすればよいのでしょうか?

288:名無しさん@お腹いっぱい。
09/08/27 17:48:38
最後はどれもbcdに変えるのか、aaになってるものだけ変えるのか

289:名無しさん@お腹いっぱい。
09/08/27 17:54:37
>>287
sed指定の質問ならsedスレへ

sed
スレリンク(unix板)

290:名無しさん@お腹いっぱい。
09/08/27 17:57:51
>>287

sed 's/|[^|]*$/bcd/'

291:名無しさん@お腹いっぱい。
09/08/27 17:58:17
sygwinでのbashなんですが
declare -a userhome
userhome=($(cut -d":" -f6 /etc/passwd))
とすると、/etc/passwdの6番目の要素がnullの場合
配列に何も代入されません。
何か文字を代入したい場合はどうすればいいんでしょうか?

292:名無しさん@お腹いっぱい。
09/08/27 18:04:24
>>291

userhome=($(cut -d":" -f6 /etc/passwd | sed 's/^$/none/'))

293:名無しさん@お腹いっぱい。
09/08/27 18:10:41
>>290
ありがとうございます

294:名無しさん@お腹いっぱい。
09/08/27 18:15:40
#!/bin/sh
s="~/work/"
ls $s

としても、 No such file or directoryと言われます。
たぶん~が展開されていないと思うのですが、
どうすれば展開できますか?

295:名無しさん@お腹いっぱい。
09/08/27 18:26:29
>>294

eval ls $s

または、最初から
s=?/work/
で代入。(ダブルクォートなし)

296:名無しさん@お腹いっぱい。
09/08/27 18:37:12
>>288
> 最後はどれもbcdに変えるのか、aaになってるものだけ変えるのか

そんなの質問の意図を読めばわかる。
>>290 みたいに回答した方が早い。

297:名無しさん@お腹いっぱい。
09/08/27 18:48:08
>>290
sed 's/|[^|]*$/|bcd/'
だろw

>>293
ありがたいか?w

298:名無しさん@お腹いっぱい。
09/08/27 19:10:28
>>294
由緒正しきshは~は使えない。$HOME使え。

299:名無しさん@お腹いっぱい。
09/08/27 19:28:05
トホホの自民 生き残れるのはひと握り

 大マスコミの選挙予測によると、自民党は壊滅状態で、当確を数えたほうが早いほど。
小選挙区で確実に生き残れるのは元・現閣僚が7人ほど、石原伸晃など地盤が強固な世襲議員が6人ほど、重鎮が3人。
ほかに5人程度のひと握り。自民党が少数政党に転落し、永田町の勢力図が一変する可能性だってある。

URLリンク(gendai.net)

300:名無しさん@お腹いっぱい。
09/08/27 21:04:45
便乗質問だけど、

>>298
チルダ展開は bash だけなの? sh は展開してくれない?

301:名無しさん@お腹いっぱい。
09/08/27 21:09:45
sh の種類による。

302:名無しさん@お腹いっぱい。
09/08/27 21:10:04
>>300
bashだけではない。

Solarisなどの純正sh以外、
ash ksh zsh dash 等、みんなチルダ展開には対応してる。
でも $HOMEを使う方がお勧め。

303:名無しさん@お腹いっぱい。
09/08/27 21:10:36
posix sh ならやってくれるはず
~ だけなら $HOME で間に合うが、~user はどうしようもないし


304:名無しさん@お腹いっぱい。
09/08/27 21:21:53
posix(笑)

305:名無しさん@お腹いっぱい。
09/08/27 21:24:00
>>303

IFS=:
set `getent passwd user`
echo $6

306:300
09/08/27 21:42:19
サンクス。

 アムロ「マ ~ さーん!」


……すまん。

307:名無しさん@お腹いっぱい。
09/08/28 11:20:37
>>305
getent が使える環境で ~user の展開をしてくれないシェルって何があるの?


308:名無しさん@お腹いっぱい。
09/08/28 11:45:53
>>307
Solaris

309:名無しさん@お腹いっぱい。
09/08/28 12:28:29
可搬性を求めると csh -fc 'echo ~user' になるかな?


310:名無しさん@お腹いっぱい。
09/08/28 12:41:08
$ csh -fc 'echo ~user'
csh: not found

311:名無しさん@お腹いっぱい。
09/08/28 13:09:31
最近のLinuxの鳥はデフォではcsh入ってないからな

312:名無しさん@お腹いっぱい。
09/08/28 13:16:18
可搬性を求めてるから getentだろ。

313:名無しさん@お腹いっぱい。
09/08/28 13:44:58
可搬性なんて幻想

314:名無しさん@お腹いっぱい。
09/08/28 21:12:21
URLリンク(image.blog.livedoor.jp)

315:名無しさん@お腹いっぱい。
09/08/30 00:11:54
シェルスクリプトは奥が深すぎて、きりがない。
どこらへんまで身に付いたら、「シェルスクリプトは理解した」と納得していいのかな?


316:名無しさん@そうだ選挙に行こう
09/08/30 19:19:46
実行できたら出いいよ

317:名無しさん@お腹いっぱい。
09/08/30 21:21:06
すみませんが詳しい方のみ回答をお願いします

318:名無しさん@お腹いっぱい。
09/08/30 22:00:26
>>315
それが、公での質問の仕方として相応しい、と自分で納得し、的確な回答を期待できる質問文だ、と納得して書き込んだキミ。
>>316はキミの「納得していい」レベルに的確にあわせてくれたんだろwwww

結論、キミ次第。
別の回答がほしければ、他人の立場で>>315を読み直すことから始めよう。


319:315
09/08/31 21:53:35
なんだ? 俺の知らんうちに。 >>317 は誰だよ?w

>>318
自分次第、そうだねぇ。
いや、たとえば C とかなら、ポインタ、構造体を理解すれば初心者卒業とか、
具体的に言っているのをよく見かけるでしょ。そんなのを期待してたんだ、スマン。
とりあえず、元々 bash にある、起動まわりのスクリプトを読み解くことにするよ。

320:名無しさん@お腹いっぱい。
09/08/31 22:11:18
>>319
> なんだ? 俺の知らんうちに。
1ヶ月ROMってろ

321:名無しさん@お腹いっぱい。
09/09/01 02:26:03
「元々 bash にある、起動まわりのスクリプト」って何だ?

322:名無しさん@お腹いっぱい。
09/09/01 03:47:22
>>321
rcスクリプトのこととエスパー。

323:名無しさん@お腹いっぱい。
09/09/01 10:35:12
>>319
> いや、たとえば C とかなら、ポインタ、構造体を理解すれば初心者卒業とか、
> 具体的に言っているのをよく見かけるでしょ。そんなのを期待してたんだ、スマン。

そういった「目的」を明示しなかったのが問題だったのだよ。
きっと皆の脳裏には、破滅に向かうプロジェクトの上流工程が彷彿したお。

324:名無しさん@お腹いっぱい。
09/09/01 11:24:46
・パラメータ展開の修飾子を使いこなす
・リダイレクトを使いこなす

他には?

325:名無しさん@お腹いっぱい。
09/09/01 12:30:22
・evalを使いこなす

326:名無しさん@お腹いっぱい。
09/09/01 12:39:21
× evalを使いこなす
○ evalを使いこなしていばる

327:名無しさん@お腹いっぱい。
09/09/01 13:57:58
◎ evalは俺の嫁。

328:名無しさん@お腹いっぱい。
09/09/01 14:02:02
>>327
evil の間違いでしょ?

329:名無しさん@お腹いっぱい。
09/09/01 14:08:10
>>324
リダイレクトというより、ファイルディスクリプタを使いこなせるようになりたい。


330:名無しさん@お腹いっぱい。
09/09/01 14:24:51
初 evalる事覚える
中 evalらない事を覚える
上 たまにevalる事を覚える

331:名無しさん@お腹いっぱい。
09/09/01 16:28:10
あんまりおもしろくないからその辺で。

332:名無しさん@お腹いっぱい。
09/09/02 10:15:12
ls $dirの結果を変数sに格納するにはどうすればいいですか?

333:名無しさん@お腹いっぱい。
09/09/02 10:43:40
>>332
s=`ls $dir`
ってこと?

なんか罠がありそうな質問だ。

334:名無しさん@お腹いっぱい。
09/09/02 11:19:57
それを1個ずつとりだしたいとか、スペース・タブが入ってるとか…

335:名無しさん@お腹いっぱい。
09/09/02 13:49:18
後のこと考えるなら、-1オプション付けといたほうが無難かもね。

336:名無しさん@お腹いっぱい。
09/09/02 14:17:12
>>335
つ、釣りだよな?

337:名無しさん@お腹いっぱい。
09/09/02 14:19:12
俺も初心者なんだけど、
ls -1 . | while read s
do
done
てことでしょ?何で釣り?

338:名無しさん@お腹いっぱい。
09/09/02 14:21:08
>>337

ls -1
ls | cat
s=`ls`
echo "$s"

違いを述べよ。

よって、釣りじゃなければ「無知」。

339:名無しさん@お腹いっぱい。
09/09/02 14:24:32
>>337
ls | while ...
みたいに、lsの出力がパイプとかリダイレクト(端末以外)の場合は、
-1 オプションを付けなくてもデフォルトで勝手に -1が付くんだよ。

s=`ls $dir` の場合でも同じ。

「-1付けろ」なんて言ってる >>335 はアフォ。

340:337
09/09/02 14:53:59
なるほど・・・勉強になった!

341:名無しさん@お腹いっぱい。
09/09/02 16:44:41
「付く」わけではない。

342:名無しさん@お腹いっぱい。
09/09/02 16:45:59
けっきょく>>332は納得したの?

343:名無しさん@お腹いっぱい。
09/09/02 16:51:58
>>341
「勝手に -1の効果が付く」と言って欲しいのかよww

344:332
09/09/02 16:52:09
返事が遅くなって申し訳ありません。
>>333さんのレスが欲しかった答えでした。

345:名無しさん@お腹いっぱい。
09/09/02 16:55:27
>>343
うん。

346:名無しさん@お腹いっぱい。
09/09/03 17:03:44
質問させて下さい。

#!/bin/bash
echo $"文字列$hensu"

のような記述がありました。
$"~"という表現を初めて見たのですが、
クォートの左の$は何の役割ですか?

347:名無しさん@お腹いっぱい。
09/09/03 17:15:00
bash依存だから、覚えない方がよろしい

348:名無しさん@お腹いっぱい。
09/09/03 17:51:38
>>346

bash$ echo $"FAILED"
FAILED
bash$ TEXTDOMAIN=initscripts
bash$ echo $"FAILED"
失敗

349:346
09/09/03 20:06:49
>>348
ああ、*.poだか*.moだかですか。
ありがとうございます。

350:335
09/09/04 09:29:19
>>338
>>339
やっべオレ超アフォ!!
感動した!!!!!
ヒャッハ!!!ヽ(゚∀゚)ノ

351:名無しさん@お腹いっぱい。
09/09/06 21:01:39
シェルスクリプト初心者です。
全てのファイル名の最後の余計な部分を一括して取り除くにはどうしたらいいんでしょうか?
$ ls
hoge.hog;piyo fuga.fug;piyo foo.fo;piyo bar.ba;piyo
この ;piyo を取り除きたいんです。
とっさに
for hoge in *\;piyo; do mv $hoge
まで打ち込みましたが、これ以上解りません…

どなたか教えていただけないでしょうか

352:名無しさん@お腹いっぱい。
09/09/06 21:09:31
>>351

for hoge in *';piyo'; do mv "$hoge" `basename "$hoge" ';piyo'`; done

353:名無しさん@お腹いっぱい。
09/09/06 21:21:55
できました ありがとうございます。
文字列の操作 少し勉強します…

354:名無しさん@お腹いっぱい。
09/09/06 21:31:32
どうせbashだろうから、
↓の方が簡単だろうけどな。

for hoge in *';piyo'; do mv "$hoge" "${hoge%;piyo}"; done

355:名無しさん@お腹いっぱい。
09/09/06 21:49:34
posixをbashと言っちゃう恥知らず。

356:名無しさん@お腹いっぱい。
09/09/06 21:57:33
posix(笑)

357:名無しさん@お腹いっぱい。
09/09/07 14:34:09
なんでposixをbashと言ってると思ったんだろう。

358:名無しさん@お腹いっぱい。
09/09/09 12:51:42
Joshua Price氏がMake Tech Easierにおいて8 Useful and Interesting Bash Promptsのタイトルのもと、
bashシェルにおけるさまざまなコマンドプロンプトの設定例を紹介している。使いやすいコマンドプロンプトは
コマンドラインの使い方を変えると説明があり、同氏が調査した中でも、特によく使われていたり、
おもしろいプロンプトとその設定例が紹介されている。紹介されているプロンプトは次のとおり。

1.間違ったコマンドを入力すると顔が変わるプロンプト
URLリンク(journal.mycom.co.jp)

2.間違ったコマンドを入力すると色が変わるプロンプト
URLリンク(journal.mycom.co.jp)

3.複数行プロンプト
URLリンク(journal.mycom.co.jp)

4.データごとに色を変えて見やすくしたプロンプト
URLリンク(journal.mycom.co.jp)

5.フルパスを表示する複数行プロンプト
URLリンク(journal.mycom.co.jp)

設定方法はソース先で
URLリンク(journal.mycom.co.jp)



359:名無しさん@お腹いっぱい。
09/09/09 12:55:34
>>358

>>5
このスレはシェルスクリプトについてのスレです。
シェルの対話的な利用についての話やスクリプトと関係ないコマンドの
使い方の質問などはスレ違いなので無用に願います。

360:名無しさん@お腹いっぱい。
09/09/09 13:01:46
1レスくらいどうってことないだろ。
器量が狭いな

361:名無しさん@お腹いっぱい。
09/09/09 13:07:57
つまんねー記事貼りつけるな。しかもbash専用。

362:名無しさん@お腹いっぱい。
09/09/09 13:13:32
俺はbashですが何か?

363:名無しさん@お腹いっぱい。
09/09/09 13:22:57
>>360
「器量」の意味を間違えて使っています。

364:名無しさん@お腹いっぱい。
09/09/09 14:06:48
どういう意味?

365:名無しさん@お腹いっぱい。
09/09/09 14:11:03
>>363
どういう意味?

366:名無しさん@お腹いっぱい。
09/09/09 21:26:43
器量は良かったり悪かったりするもので狭かったり広かったりするのは心とか懐だろ。ちなみに大きかったり小さかったりするのは度量だ。

367:名無しさん@お腹いっぱい。
09/09/09 21:36:14
語源は「器の量」なのだから、大きいでも間違いではあるまい。

368:名無しさん@お腹いっぱい。
09/09/09 21:38:25
そういうことじゃなくて、
「器量が良い」=「顔が良い」(美人) という意味。

「狭い」じゃ意味をなさない。

369:名無しさん@お腹いっぱい。
09/09/09 21:46:36
女の器量はすなわち女性器なので狭いで正解。

370:名無しさん@お腹いっぱい。
09/09/09 21:51:06
日本語スクリプト総合 その2
スレリンク(unix板)

371:名無しさん@お腹いっぱい。
09/09/10 23:56:22
き‐りょう【器量】 ‥リヤウ
(「器」は材の在る所、「量」は徳のみつる所の意)
(1)その地位・役目にふさわしい才能・人柄。保元物語「合戦の場には兄弟といふ差別候ふまじ。ただ―により候」。「人の上に立つ―がある」「―を上げる」
(2)才能・力量のすぐれていること。ものの上手。平家物語(4)「笛の御―たるによつてこの宮御相伝ありけり」
(3)(「縹緻」とも書く)顔だち。みめ。また、容姿のすぐれていること。狂、猿座頭「そなたの様な好い―で」。「十人並みの―」

372:名無しさん@お腹いっぱい。
09/09/11 00:48:22
>>368
それも意味の一つってだけだぞ
それしか知らずにそれだけだと思い込んで更に他人に意見するお前は馬鹿

器量
人の器の量だ。大きい小さい狭い広いであってるんだよ。
才能や心の広さ

度量というのは心意気を指して使う。
これは大きい小さいと使う
いわゆる男気のように心の大きさ

例えば人を許すという時に慈悲深い気持ちと我慢強さからくる二通りがある。
前者は器量、後者は度量。

373:名無しさん@お腹いっぱい。
09/09/11 01:34:53
>>366,368は完璧なゆとり
ゆとり怖ぇ

374:名無しさん@お腹いっぱい。
09/09/11 01:59:31
勉強になりますお













スレ違いの

375:名無しさん@お腹いっぱい。
09/09/11 02:16:36
無駄な改行うざ
ひょっとしてスクロールしなきゃ見えないとでも?
お前の頭、いつから時代が止まってんだ

376:名無しさん@お腹いっぱい。
09/09/11 02:21:41
黙ってろ。禿げ。

377:名無しさん@お腹いっぱい。
09/09/11 06:39:03
>>371
「古語辞典」使って誤魔化すんじゃねーよ。
(現代の)「国語辞典」でちゃんと意味調べてから出直せ。
あと、どちらにしても「?が狭い」なんて用法はないから。

378:名無しさん@お腹いっぱい。
09/09/11 09:02:14
旧カナ遣いは「古語」ではない。知らない奴は黙ってろ。

379:名無しさん@お腹いっぱい。
09/09/11 09:39:41
板名とスレタイトルを確認してください。

380:名無しさん@お腹いっぱい。
09/09/11 09:41:06
>>378
平家物語や保元物語は何時代に書かれたんだよww
知らないなら黙ってろ。

381:名無しさん@お腹いっぱい。
09/09/11 09:58:01
>>372
>器量
>人の器の量だ。大きい小さい狭い広いであってるんだよ。
>才能や心の広さ

ミスリードしてるね。

「才能」の意味はあるが、「心の広さ」の意味はない。

「器量を上げる(下げる)」=「才能、能力を上げる(下げる)」
といういい方は正しいが、

「器量が狭い(広い)」といういい方は間違い。
おそらく「器(うつわ)が小さい」(←これは正しい)の、
「器(うつわ)」と「器量」を混同して間違えて覚えているのだろう。

382:名無しさん@お腹いっぱい。
09/09/11 10:16:41
平家物語が引用されている辞書が全部「古語辞典」かよ。
馬鹿は黙ってろ。

383:名無しさん@お腹いっぱい。
09/09/11 10:23:39
>>382
少なくとも(>>378)が、「古語ではない」ただの「旧カナ遣い」だ、
って言ってるのは間違いだろ。

384:名無しさん@お腹いっぱい。
09/09/11 10:32:58
>>383
広辞苑が古語辞典かよ。どんだけ未来から来たんだ。引っ込んでろ禿げ。

385:名無しさん@お腹いっぱい。
09/09/11 10:46:16
斬新なキャラ語尾だな

386:名無しさん@お腹いっぱい。
09/09/11 10:51:06
>>384
広辞苑の話の前に、

「合戦の場には兄弟といふ差別候ふまじ。」
という文章が、
(1)古語
(2)古語ではないただの旧カナ遣い

のどちらなのか決着を付けようぜ。

387:名無しさん@お腹いっぱい。
09/09/11 11:48:25
>>386
そんな事誰も言っていない。
諦めて「>>377は間違いでした。ごめんなさい」って謝れよ。

388:名無しさん@お腹いっぱい。
09/09/11 11:53:59
>>381 でFAだな。
「器量が狭い」(>>360)は間違い。

あとから出てきて議論してる人は「器量」の他の意味を挙げてるけど、
どれも「狭い」につながる意味はない。

389:名無しさん@お腹いっぱい。
09/09/11 12:04:38
URLリンク(dic.yahoo.co.jp)
これでも更に言い訳続けるか? >>377が間違いである事も謝罪しろ。

390:名無しさん@お腹いっぱい。
09/09/11 12:22:13
>>378 の謝罪は?
> 旧カナ遣いは「古語」ではない。

391:名無しさん@お腹いっぱい。
09/09/11 12:40:37
論点を整理すると、
「器量」に「心の広さ」「包容力」という意味があるかどうかってことだろ。
広辞苑(>>371) にも「包容力」という意味は載ってなかったわけだし、
>>371 は自殺点を入れたな。

まあ、>>371 は「器量には顔の良さ以外の意味もある」ということを
言いたかったんだろうけど、それを主張しても、
「器量が狭い」(>>360)を正当化することにはならない。

392:名無しさん@お腹いっぱい。
09/09/11 14:19:40
Results 1 - 10 of about 44,900 Japanese pages for 器量が狭い. (0.14 seconds)
Results 1 - 10 of about 71,300 Japanese pages for 器量が小さい. (0.09 seconds)
Results 1 - 10 of about 42,600 Japanese pages for 器量が広い. (0.14 seconds)
Results 1 - 10 of about 76,900 Japanese pages for 器量が大きい. (0.28 seconds)


393:名無しさん@お腹いっぱい。
09/09/11 14:23:00
>>391
URLリンク(thesaurus.weblio.jp)

394:名無しさん@お腹いっぱい。
09/09/11 18:34:03
おまえら器量がないな

395:名無しさん@お腹いっぱい。
09/09/11 18:54:08
>>390
正しいだろ。馬鹿。

396:名無しさん@お腹いっぱい。
09/09/11 18:56:41
ヲタクは100%の確率で度量が小さい
リアルでは常にビクビクしてる鼠みたいなやつ

397:名無しさん@お腹いっぱい。
09/09/11 19:05:21
httpdが生きてるか否かを監視するスクリプトどなたか作ってください。
GETして200が返ればOK
返らなきゃfoo@example.comにメールを投げる
みたいな簡単なのでいいです。

398:名無しさん@お腹いっぱい。
09/09/11 19:27:06
>>371>>368
> 「器量が良い」=「顔が良い」(美人) という意味。
に対する反証だろ。無様な言い逃れまだ続ける気?

399:名無しさん@お腹いっぱい。
09/09/11 19:32:11
>>397
ここはそういうスレじゃない

400:名無しさん@お腹いっぱい。
09/09/11 19:35:50
>>398
ということは、やっぱり、

「器量が狭い」(>>360)は間違い、

ということじゃん。

401:名無しさん@お腹いっぱい。
09/09/11 19:41:07
どうでもいい、だまれ

402:名無しさん@お腹いっぱい。
09/09/11 19:52:52
>>400
かわいそうなくらい頭悪いな。お前もう死んだ方が良い。

403:名無しさん@お腹いっぱい。
09/09/11 21:14:33
>>363
スレに関係無いところ突っ込んで、無知を晒す事になった感想は?
止めときゃよかったと思ってる? 死にたくならない?

404:名無しさん@お腹いっぱい。
09/09/11 21:38:15
狭量なやつらでいっぱいのスレ

405:名無しさん@お腹いっぱい。
09/09/11 21:53:56
>>403
おいおい、間違ってるのはお前だってw

406:名無しさん@お腹いっぱい。
09/09/11 21:57:58
>>360 間違い
>>366 正解
>>368 正解
>>372 間違い
>>381 正解

あとは煽り

407:名無しさん@お腹いっぱい。
09/09/11 21:59:34
>>389で大辞泉に
> しょう懼じょうふ【小丈夫】
> 2 器量の狭い人物。小人物。
という用例を例示されてるのに、まだ醜態晒し続けるの? 死にたくならない?

408:名無しさん@お腹いっぱい。
09/09/11 22:05:35
>>403
アンカー間違えてるよ。
>>360 に言ってくれ。

409:名無しさん@お腹いっぱい。
09/09/11 22:10:27
>>395
流れ良め。

>>378>>371 に書かれている文章が
「旧カナ遣いだけど古語ではない」って言ってるんだよ。

間違いだろ。馬鹿。

410:名無しさん@お腹いっぱい。
09/09/11 22:24:41
>>409
>>395 = >>378だ。
俺は
> 旧カナ遣いは「古語」ではない。
と言った。改変するな。クズ。

411:名無しさん@お腹いっぱい。
09/09/11 22:28:28
>>378 は、
>>377>>371 を見て、「古語」と言ったのを受けて

>>378 で 旧カナ遣いは「古語」ではない、と言った。
一般論としてではなくて、
>>371 の文章が旧カナ遣いであって古語ではない、と言った。

明らかに間違い。

412:名無しさん@お腹いっぱい。
09/09/11 22:31:40
>>408
>>360はスレ違いはともかく、用法は間違っていないな。
>>363って、恥かいて悦ぶ趣味?

413:名無しさん@お腹いっぱい。
09/09/11 22:37:18
「才能が狭い」
「技量が狭い」
「面目が狭い」

どれもおかしい。

よって「器量が狭い」は誤用。

414:名無しさん@お腹いっぱい。
09/09/11 23:01:12
>>411
また捏造かよ。恥知らず。
>>371 の「リヤウ」を指して「旧カナ遣いは『古語』ではない」と言ったんだよ。わかるか? 馬鹿。

広辞苑を「古語辞典」といった本当の理由は>>377の馬鹿じゃないと分らないが、
「リヤウ」をみて古語辞典と誤解したと思ったんだよ。
他に広辞苑を「古語辞典」という理由がお前は思い当たるのか?
>>377はもう出てこないだろうから真相は藪の中だが。
逃亡するくらいならしゃしゃりでてこなきゃ良いのに。馬鹿を自覚しつーの。

415:名無しさん@お腹いっぱい。
09/09/11 23:05:53
>>414
>「リヤウ」をみて古語辞典と誤解したと思ったんだよ。

ハハハ、そんなところ見てないよ。

古語と言ったのは用例の平家物語とかのところだよ。
結局古語でしか用例を示せてない辞書だから古語辞典だと思ったのだろう。

416:名無しさん@お腹いっぱい。
09/09/11 23:11:17
古語が載ってれば「古語辞典」と思うような馬鹿が存在するとは想定の範囲外だ。
>>377 お前は馬鹿過ぎ。出入り禁止。二度と発言すんな。

417:名無しさん@お腹いっぱい。
09/09/12 08:05:08
>>413
>>372,393

418:名無しさん@お腹いっぱい。
09/09/12 09:08:07
辞書に載ってるのは、
「顔立ち」「才能、技量」「面目」の3点なのに、

>>372 が「才能」の意味に「心の広さ」を勝手に追加してる件に付いて。

419:名無しさん@お腹いっぱい。
09/09/12 09:10:41
=================器量の話は終了=================
=================器量の話は終了=================
=================器量の話は終了=================
=================器量の話は終了=================
=================器量の話は終了=================
=================器量の話は終了=================

420:名無しさん@お腹いっぱい。
09/09/12 09:46:40
>>418が勝手に3点に絞ってる件

421:名無しさん@お腹いっぱい。
09/09/12 09:54:20
度量(どりょう)が大きい
「器量(きりょう)が大きい」は誤り。心が広いということ。「度量」は心の広さ、「器量」は力量や容姿。

URLリンク(starscafe.net)

422:名無しさん@お腹いっぱい。
09/09/12 09:56:42
UNIX使う人ってどうでもいいことで延々と語るのが好きな人が多いのなだよもんだよもんだよもん
*BSDのマスコットは

423:名無しさん@お腹いっぱい。
09/09/12 10:08:13
goo辞書
URLリンク(dictionary.goo.ne.jp)

きりょう ―りやう 1 【器量】
補足説明「器」は才能のあること。「量」は心の大きさ、徳のあること

(1)物の役に立つ才能・力量。
+ 「人の上に立つ―をもった人物」

(2)主に女性について、容貌(ようぼう)。顔立ち。みめ。
+ 「―がよい」

(3)主に男性について、その人の面目。価値。
+ 「―を上げる」

>>418
see 補足説明


424:名無しさん@お腹いっぱい。
09/09/12 10:10:12
ゆとりは器量が狭いのぅ

425:名無しさん@お腹いっぱい。
09/09/12 10:16:52
>>424
誤用用語を使って自己紹介乙

426:名無しさん@お腹いっぱい。
09/09/12 10:24:59
器量良しの意味しか無いと思い込んでた馬鹿が悪い
>>363の事だが

427:名無しさん@お腹いっぱい。
09/09/12 10:25:51
>>423
その補足説明は「器量」という熟語自体の意味の説明にはなっていないよ。
補足説明は「器」と「量」の単漢字の意味の説明だから。
熟語になると意味が変わる。

428:名無しさん@お腹いっぱい。
09/09/12 10:26:30
>>425
器量の狭い小者乙

429:名無しさん@お腹いっぱい。
09/09/12 10:29:29
俺は器量が広く度量があり、そして器量良しの女房がいる。
お前らカスと一緒にすんな。

430:名無しさん@お腹いっぱい。
09/09/12 10:34:47
間違いを認められずに醜態を晒し続ける>>363,>>368,>>377は典型的な小丈夫だな。
スレ違いの話題を振って絡んでおきながら、大外しって惨め過ぎる。

大辞泉
URLリンク(dic.yahoo.co.jp)
しょう-じょうふ【小丈夫】
1 小柄な男。2 器量の狭い人物。小人物。

431:名無しさん@お腹いっぱい。
09/09/12 10:40:12
有識者諸兄殿
シェルスクリプトの勉強中で、教えていただきたい。

①while read AAA ; do ~ ; done < fileX
②for AAA in `cat fileX`; do ~ ; done

の違いを教えて下さい。
処理スピードや処理(do ~ )での柔軟性、fileXが小さい場合と大きい場合での違いなど。

よろしくお願いします。

432:名無しさん@お腹いっぱい。
09/09/12 10:43:09
普段から言葉を大事に使わないからイザとなったら慌てて辞書に頼り表面の意味だけを捉えて赤っ恥をかく。
>>363,368,377がその例だろう。

433:名無しさん@お腹いっぱい。
09/09/12 10:48:44
>>430
だれも「小丈夫」の話なんかしてないよ。的はずれな指摘。

「器量」の項目を引いて出直せ。

434:名無しさん@お腹いっぱい。
09/09/12 10:53:10
>>431
機種依存文字使うな。

whileの方は、1行毎にループ処理される。

forの方は、改行だけでなく、スペース・タブでも区切られて
それぞれに付いてループ処理される。

435:名無しさん@お腹いっぱい。
09/09/12 10:54:20
>>433
>慌てて辞書に頼り表面の意味だけを捉えて
一つ上のレスの意味すら理解できないんだな。
お前につける薬は無いな

436:名無しさん@お腹いっぱい。
09/09/12 10:57:53
>>431
シェルスクリプトスレで訊けよ
ひとこと言うなら、スペースの有無とかfileXの大きさとかより
(1)の do~doneがサブシェルになることが注意

437:名無しさん@お腹いっぱい。
09/09/12 11:02:18
>>368を書いた時点では、器量には容貌という意味しかないと信じ切っていたようだ。惨め過ぎる。

438:名無しさん@お腹いっぱい。
09/09/12 11:02:22
>>436
ダウト。

単なるファイル入力のリダイレクトだから、while read でも
サブシェルにはならない。

サブシェルになるのは、echo hoge | while read みたいな
パイプの場合。

439:名無しさん@お腹いっぱい。
09/09/12 11:03:53
>>437
違うよ。

容貌、才能、面目のすべての意味を知っていたが、
判例を挙げるにはひとつだけで十分だから、
一番意味がはっきり違う容貌を挙げただけ。

440:431
09/09/12 11:10:07
>>434
>>436
>>438

なるほど!
forはfileXの行にスペース・タブ(IFS?)がある場合、行単位にならないのですね。
行単位に処理させたい場合はwhileの方が確実ですね。
勉強になりました。

サブシェルになる場合とその注意点などまだ自分にはピンと来ませんので
ちょっと勉強してみます。

ありがとうございました。


441:名無しさん@お腹いっぱい。
09/09/12 11:11:42
>>439
もう分かったから失せろボケ

442:名無しさん@お腹いっぱい。
09/09/12 11:15:17
>>440
サブシェルで代入したシェル変数は親シェルには伝わらない。

443:名無しさん@お腹いっぱい。
09/09/12 11:26:32
>>434 の正解が出たあとで
間違ったことを書いてる >>436 はマヌケだなぁ。

444:名無しさん@お腹いっぱい。
09/09/12 11:31:23
>>439
残念ながら「狭い」という用法が*無い事*を示すためには、他の例をあげるだけ
では不十分なんだ。*有る*事をしめすなら一つだけ挙げればいいがな。

恥の上塗りまだ続けるのか? 惨め惨め惨め惨め。

445:名無しさん@お腹いっぱい。
09/09/12 11:33:12
いいかげんバカは放置しようよ

446:名無しさん@お腹いっぱい。
09/09/12 11:35:59
>>444
いや、>>360 が、「器量」を「懐」あたりの意味と取り違えていて、
「器量」にはその意味しかないと思い込んでいると思われたので、
その反例として>>368 で「器量」の意味のひとつを挙げた。
反例にはなっている。

447:名無しさん@お腹いっぱい。
09/09/12 11:39:42
>>446
お前が基地害だというのは充分判ったから
もういいだろ。どう足掻いてもお前に勝ち目は無いよ

448:名無しさん@お腹いっぱい。
09/09/12 11:43:59
>>363が責任を取って氏ねば解決

449:名無しさん@お腹いっぱい。
09/09/12 11:44:00
>>447
はためから見ると負けてるのは >>447 の方だがw

450:名無しさん@お腹いっぱい。
09/09/12 11:47:25
「器量が狭い」を認められない器量の狭さワロス

451:名無しさん@お腹いっぱい。
09/09/12 11:48:59
>>450
そういうのは「懐が狭い」って言うんだよ。覚えとけ。

452:名無しさん@お腹いっぱい。
09/09/12 11:49:33
>>445
>>439のような馬鹿は半端に叩くと粘着するから。「器量」を見ただけでPTSD起こす
くらいまで叩いて置かないといけない。

>>446
なってねーよ。馬鹿。たった、「1レスくらいどうってことないだろ。器量が狭いな」だけの
発言から
> 「器量」にはその意味しかないと思い込んでいると思われたので、
このように思うって、お前が馬鹿であるという証明にしかならない。

しかも、*無い*事を示すために他の例を挙げれば済むとか。
どんだけ低脳なんだよ。惨め惨め惨めの三重奏だぜ。

453:名無しさん@お腹いっぱい。
09/09/12 11:51:05
>>451
懐は深い/浅いだよ。覚えとけ。

454:名無しさん@お腹いっぱい。
09/09/12 11:53:51
>>451
恥の上塗り乙

455:名無しさん@お腹いっぱい。
09/09/12 11:55:06
>>453
あほか、
懐が深い/浅いだと意味が違う。反例になってない。

456:名無しさん@お腹いっぱい。
09/09/12 11:58:14
>>455
更に恥の上塗り乙

457:名無しさん@お腹いっぱい。
09/09/12 12:02:24
一般的に、>>454 >>456 みたいに「恥の上塗り」とかだけ書いて
具体的な反論を書かなくなった方が議論の負けなんだよ。

458:名無しさん@お腹いっぱい。
09/09/12 12:04:25
>>457
そのルールだとファビョったほうの勝ちか?
お前のように(笑)

459:名無しさん@お腹いっぱい。
09/09/12 12:20:17
まだ続くのか日本語講座

460:名無しさん@お腹いっぱい。
09/09/12 13:19:30
自作自演飽きた。

461:名無しさん@お腹いっぱい。
09/09/12 13:47:48
自演だと思うのは自分が自演してるからだ。

462:名無しさん@お腹いっぱい。
09/09/12 13:56:20
全部おれの自演でした

463:名無しさん@お腹いっぱい。
09/09/12 13:59:07
>>457が吊れば平和
とっとと逝け

464:名無しさん@お腹いっぱい。
09/09/12 14:12:22
>>438
Solarisの/bin/shだとファイルリダイレクトでもサブシェルになる。


465:名無しさん@お腹いっぱい。
09/09/12 14:22:06
>>464
「サブシェルになる」ことをどうやって確認した?

まさか、while read AAA の、ループを抜けた時、
AAAの内容が空になるのを見て「サブシェルだ」と思ってないだろな。

readは最後に EOF を読み込んで while を抜けるから、
ループを抜けた時 AAA は空になるが、サブシェルではない。

while read AAA
do
BBB=$AAA
done < file

echo $BBB

で試してみろ。

466:名無しさん@お腹いっぱい。
09/09/12 14:22:49
SunOS4 当時の /bin/sh はどう振舞うの?

467:名無しさん@お腹いっぱい。
09/09/12 14:34:53
>>465
試したけど Solarisの /bin/shだとやっぱりサブシェルだよ。

468:名無しさん@お腹いっぱい。
09/09/12 23:49:07
自信満々でダウトしといて外してるって恥ずかしくない? どんな気持ち?
>>363とか>>363とか>>363とか>>363とか>>438

469:名無しさん@お腹いっぱい。
09/09/13 01:00:33
シェルスクリプトの実行者に対しy/n等で確認を求めたい場合
通常readで止めて入力を促しているのですが
while read のループの中でそれをやろうとすると上手くいきません。

while read ~
echo "Y or N"
read YESNO ←ここで止まってくれない
~判定処理~
done < fileHoge


whileのreadと入力要求のreadが干渉しているのが原因のように思っています。
よい方法はありますでしょうか?
(ddやselectなども試しましたがダメでした)

470:名無しさん@お腹いっぱい。
09/09/13 01:03:39
read YESNO < /dev/tty
かな?

471:名無しさん@お腹いっぱい。
09/09/13 01:08:19
ありがとう
それやってみます!

472:名無しさん@お腹いっぱい。
09/09/13 17:59:13
よく 
commandA | tee LOGFILE
などのやり方で表示しつつログをとる事があると思いますが
commandAの終了ステータスを判断したい時、この場合だと$?がteeの結果になり
commandAの終了ステータスが分りません

bashなら環境変数${PIPESTATUS[パイプライン中のコマンド位置]}
で取れることを調べられたのですが、あいにく改造母体のファイルはkshなんです。

よい方法はありますでしょうか?



473:名無しさん@お腹いっぱい。
09/09/13 18:04:42
>>472

((commandA; echo $? 1>&3) | tee LOGFILE ) 3>&1

474:472
09/09/13 18:22:57
>>473
ありがとうございます!
明日試してみます!

475:名無しさん@お腹いっぱい。
09/09/13 19:39:39
>>473
この書き方すぐ忘れるんで、そんな時はcsh-whynotでググるんだ

476:名無しさん@お腹いっぱい。
09/09/13 20:03:38
csh(笑)

477:名無しさん@お腹いっぱい。
09/09/13 21:17:24
csh-whynotを知らずにcshを笑うとは…
爆笑だぜ。

478:名無しさん@お腹いっぱい。
09/09/14 08:13:40
ここだけ20世紀

479:名無しさん@お腹いっぱい。
09/09/20 15:13:01
コマンドの引数に別のコマンド実行結果を利用する時
commandA `commandB`
とやりますが、さらにその実行結果をコマンドの引数に利用したい場合、
変数にcommandA `commandB`を入れてcommandC $変数 などとやってるのですが、
変数を使わずに出来る手法はありますでしょうか。
イメージ的には「commandC `commandA `commandB``」みたいな感じ。


480:名無しさん@お腹いっぱい。
09/09/20 15:17:56
commandC $(commandA $(commandB))

純正シェルの人は苦行に耐えて頑張ってください。

481:名無しさん@お腹いっぱい。
09/09/20 15:34:01
commandC `commandA ¥`commandB¥``

482:名無しさん@お腹いっぱい。
09/09/20 15:40:06
>>480-481

ありがとう!試してみます!


483:名無しさん@お腹いっぱい。
09/09/20 18:46:17
あるフォルダの中の*.cというファイルを~/srcというフォルダにコピーするにはどうすればいいですかね?


484:名無しさん@お腹いっぱい。
09/09/20 18:47:47
スクリプト使わない質問はスレ違い

485:483
09/09/20 18:49:13
申し訳ありませんでした。。

486:名無しさん@お腹いっぱい。
09/09/20 18:56:39
cp *.c ~/src/

487:名無しさん@お腹いっぱい。
09/09/20 19:01:09
>>486
説明不足でした。。
いくつかの階層に分かれていたのでできなかったのです。
情報後出しとか氏んどけって話ですよね。。

mv `find -name *.c` ~/src/

上のレスみて何とかなりました
もう本当にスレ汚し失礼しました。

488:名無しさん@お腹いっぱい。
09/09/20 19:01:22
>>486
やってみましたが、どうもホームフォルダの下の/srcにコピーされるようです。
?/srcというフォルダにコピーしたいんですが。

489:名無しさん@お腹いっぱい。
09/09/20 19:14:59
>>487
それだと同じ名前ぶつかってると上書きされるぞ。

490:名無しさん@お腹いっぱい。
09/09/20 20:11:24
スクリプトの中で使う場合って~と$HOMEってどっちが一般的なんですか?

491:名無しさん@お腹いっぱい。
09/09/20 20:25:00
もちろん $HOME
チルダは純正では使えない

492:名無しさん@お腹いっぱい。
09/09/20 20:46:49
bash又はkshで長さが一定でないファイル名からある位置の文字を取り出したい。
具体的にはhogehoge~XX.txtのXXの2文字。後ろから5,6文字目。
前からの位置であればcutで簡単だったのだが後ろからで行き詰った。
考えた挙句、echo ファイル名 | wc -c等で長さを取って、
それをexprで6減算した値をcutの開始位置にしてやったりして出来たのだが
たかが2文字取り出すだけなのにスマートじゃない。
もっとシンプルに行かないものでしょうか?

493:名無しさん@お腹いっぱい。
09/09/20 21:00:31
>>492
expr 'hogehoge~XX.txt' : '.*¥(..¥).txt'

494:名無しさん@お腹いっぱい。
09/09/20 21:16:12
>>493

ありがとう今度やってみます
でもちょっと難しくて今時点でなんで期待の結果が得れるか把握しきれてないです。
exprのそういった使い方を勉強します。


495:名無しさん@お腹いっぱい。
09/09/20 23:18:27
revは環境依存?


496:名無しさん@お腹いっぱい。
09/09/21 10:57:39
>>492
fにファイル名が入っているとして
a=${f#${f%??.txt}}
echo ${a%.txt}
ではどうか。

497:名無しさん@お腹いっぱい。
09/09/21 13:03:33
bashでいいなら、
↓で一発じゃん (fileにファイル名が入っているとして)

echo ${file:$((${#file}-6)):2}

498:名無しさん@お腹いっぱい。
09/09/21 14:38:10
対話的なスクリプトが二つあって
それをスクリプト同士対話させたいのですが
どのように相手の出力をもう片方の入力につなげるのでしょうか?

499:名無しさん@お腹いっぱい。
09/09/21 14:40:43
>>498
fifo

500:名無しさん@お腹いっぱい。
09/09/21 14:46:33
>>5
> シェルの対話的な利用についての話やスクリプトと関係ないコマンドの
> 使い方の質問などはスレ違いなので無用に願います。

501:名無しさん@お腹いっぱい。
09/09/21 15:07:30
>>498
双頭バイブ

502:492
09/09/26 20:45:00
>>493
>>496
>>497

全て上手くできました。
ありがとう。
>>493のやつはshでもOKですね。


503:名無しさん@お腹いっぱい。
09/09/27 00:28:00
スクリプトの中で他ユーザにしか実行権の無い別のスクリプトを実行するため、
su - USER -c COMMAND
としたいのですが、パスワードを求められます。
今時点ではパスワード入力をスクリプトの実行者に入力させてますが
このパスワード入力をスクリプトの中で自動で出来る方法はありますか?
ご教授お願いします。

504:名無しさん@お腹いっぱい。
09/09/27 01:43:06
>>503
sudoかexpect

505:名無しさん@お腹いっぱい。
09/09/28 01:37:41
バッククォートで実行するコマンドの標準出力と標準エラーをそれぞれ
別の変数に入れることってできますか?

やりたいことは以下と等価なんだけど、一時ファイルを作らずにやりたいんです。
stdout=`command 2>stderr.tmp`
stderr=`cat stderr.tmp`


506:名無しさん@お腹いっぱい。
09/09/28 23:10:05
>>504

すみません、Solarisなので両方とも使えませんでした。


507:名無しさん@お腹いっぱい。
09/09/29 00:48:13
Solaris なら pfexec を使うのかな

URLリンク(www.itmedia.co.jp)

508:名無しさん@お腹いっぱい。
09/09/29 21:59:35
>>506
Solarisでsudoもexpectも使えないなんてことを書いてしまうとは・・・
ろくに調べもしないでコマンド入れ替えただけとしか思えん。


509:名無しさん@お腹いっぱい。
09/09/29 22:17:54
混ぜ物を一切していない純血Solaris

510:名無しさん@お腹いっぱい。
09/10/01 21:34:47
あるコマンドの標準出力を一行ずつ見ていって、それがある正規表現Xにマッチしてたら
コマンドAの標準入力にいれて、その標準出力を取得、それ以外なら、コマンドBの
標準入力に入れて、その標準出力を取得、その2つの標準出力を、標準入力の
順番と同じ順番でそろえて出力を得たいのですが、方法はありますでしょうか?

わかる方いたら教えていただけませんでしょうか。よろしくお願いいたします。。。

511:名無しさん@お腹いっぱい。
09/10/01 22:00:58
>>510


#!/bin/sh

while IFS= read line
do
if echo "$line" | grep -q XXX
then
a=`echo "$line" | command_A`
echo "$a"
else
a=`echo "$line" | command_B`
echo "$a"
fi
done

512:名無しさん@お腹いっぱい。
09/10/01 22:40:13
>>511
ありがとうございます。
でもこれだと、command_A、command_Bは毎入力行ごとに起動しなおすことに
なりませんでしょうか。
command_A, command_Bともに入力に応じて、内部で状態が変化するので、
ずっと起動しっぱなしにしたいのですが、そういうことはできますか?

513:名無しさん@お腹いっぱい。
09/10/01 22:43:20
後出し乙。

ハイ、次の方どうぞ


514:名無しさん@お腹いっぱい。
09/10/01 22:51:19
>>510

#!/bin/sh

(
(
while IFS= read line
do
if echo "$line" | grep -q XXX
then
echo "$line"
else
echo "$line" 1>&3
fi
done | command_A 1>&4
) 3>&1 | command_B
) 4>&1

515:名無しさん@お腹いっぱい。
09/10/01 23:03:55
command_A, command_Bに確実に一行ずつ出力させる事が出来なければ不可能。

516:名無しさん@お腹いっぱい。
09/10/01 23:18:02
>>514
素早い回答、ありがとうございます。
ファイルディスクリプタんの複製なんて、10年振りに見ました。
このスレは初探訪なのですが、スレ住人の方々はみな、このような
スクリプトを自在に操る変態さんばかりなのでしょうか。
まだまだ精進が足りないと痛切に思いました。
自在にこんなスクリプトが書けるまで、精進したいと思います....

ところで、この"grep -q" って、入力毎に起動しているようですが、
これはずっと起動しっぱなしに比べて、パフォーマンス的にはどうなんでしょう。
実はgrepのこういう多数回の起動(fork())ってそんなに大変なことではない??

517:名無しさん@お腹いっぱい。
09/10/01 23:24:12
>>515
うーむ、さきにcommand_Aの方が処理された後に、command_Bの方が
実行されるみたいですね。やっぱり無理かなぁ。

518:名無しさん@お腹いっぱい。
09/10/01 23:24:43
>>516
正規表現じゃなくて、単なるパターンマッチで良ければ、
grep -q の代わりに case文を使えば、
内部コマンドだけになるから速くなるよ。

519:名無しさん@お腹いっぱい。
09/10/02 01:29:03
シェルスクリプトを、別のシェルスクリプトの中からをバックグラウンドで実行すると
SIGINTが無視されてしまうんだけど、何とかSIGINTをトラップできる
ようにする方法ありませんか?

例えば以下のようなシェルスクリプト command.sh を作って、
#!/bin/sh
trap 'echo sigint' INT
trap -p

インタラクティブなシェルから command.sh & すれば期待通り動くんですが、
別のシェルスクリプトの中から command.sh & で呼び出すと SIGINT のハンドラが
設定されないんです。

この動作自体は一応 bsh 系の仕様っぽいですが…
Linux 上の bash 限定でも良いので、何か解決法があったら教えてください。


520:名無しさん@お腹いっぱい。
09/10/02 06:45:21
>>519
シェルスクリプトの中から、

sh -c 'set -m; command.sh &'

で呼び出す。

521:名無しさん@お腹いっぱい。
09/10/03 09:28:17
>>481のやり方ってネストは2個まで?

commandD `commandC \`commandA \`commandB\`\``
でやったら上手くいかなかったような。。。(bash)

522:名無しさん@お腹いっぱい。
09/10/03 09:42:57
あたりまえ。\もエスケープしなければダメ。

523:名無しさん@お腹いっぱい。
09/10/03 09:46:57
>521

commandD `commandC ¥`commandA ¥¥¥`commandB¥¥¥`¥``


524:名無しさん@お腹いっぱい。
09/10/03 09:48:20
>>521
3個でもできるよ。

commandD `commandC ¥`commandB ¥¥¥`commandA¥¥¥`¥``

525:名無しさん@お腹いっぱい。
09/10/03 09:50:21
>>522-523
お、言われて見ればその通りだ。
ありがとぅ。

526:名無しさん@お腹いっぱい。
09/10/03 09:51:31
>>524
ありがとぅ。


527:名無しさん@お腹いっぱい。
09/10/04 17:20:27
時々シェルスクリプトで簡単なツールを作ったりしてるのですが
perlを勉強してみたくなりました。

>>1
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 RubyやPerlの方が適した仕事には素直にそちらを使いましょう。

とありますが、具体的にどのような観点でシェルスクリプトとperlを使い分けするのでしょうか?
このような処理ケースではperlを使う方が効果的みたいな例を教授
(もしくはそのような事が記載されているサイトに誘導)していただけたら幸いです。


528:名無しさん@お腹いっぱい。
09/10/04 17:26:53
現状でシェルスクリプトで問題なくやってるなら、
perlなんて覚えない方がいい。

529:527
09/10/04 17:27:13
少し調べてみてるのですがPerlは文字列処理等が得意であるというのを見ますが、
そうするとsedやawkを使う場面なんかがperlでやった方がよりよいでしょうか?

530:527
09/10/04 17:34:22
>>528

現状、何とか目的の機能は達成してるって感じですが、
同じ事がperlなら断然簡潔かつ高速処理で出来たりするのかな?なんて思うもので。。。

531:名無しさん@お腹いっぱい。
09/10/04 17:47:06
3項演算子は両方とも評価するのか?

532:名無しさん@お腹いっぱい。
09/10/04 18:05:40
>>529
例えば一行の処理毎に、シェルスクリプトでは外部コマンドを起動する必要がある、
perlでは不要。というような場合、データが大きくなればperlの方が速くなる。

533:529
09/10/04 18:31:28
>>532

それはテキストの一行に対して処理する事に対し、シェルスクリプトならその行数分外部コマンドが実行、
つまりシェルスクリプトでテキストの1行に1コマンド処理実行させてる場合、
100行なら100回外部コマンドが実行される事になるが
perlなら1コマンド?で処理が終了するので大きいテキストに対してだと
処理スピードに差がでるって事でしょうか?

534:名無しさん@お腹いっぱい。
09/10/04 18:45:38
テキストの一行じゃないんじゃないの。sedもawkも複数行を処理できるでしょ。
あとマルチコアプロセッサとかだと、プロセスが分かれていた方が処理が早く
終わったりもするね。

キッチンシンクアプローチとツールボックスアプローチを調べてみると良いと思うよ。

535:名無しさん@お腹いっぱい。
09/10/04 18:58:02
>>533
そう。プロセスの生成は非常にハイコスト。

536:529
09/10/04 19:12:23
>>534-535
ありがとう。
うーん、でも完全に理解し切れてない。
何かを実現させる時、シェルスクリプトの場合複数のコマンド発行(プロセス起動)が
perlなら少プロセスで可能な場合(主にテキスト処理などで)があるって事でしょうか?

>キッチンシンクアプローチとツールボックスアプローチを調べてみると良いと思うよ。

調べてみます。

537:名無しさん@お腹いっぱい。
09/10/05 00:38:28
python

538:名無しさん@お腹いっぱい。
09/10/05 02:27:03
オライリーのミニマルPerlって本があって、
sh&sed&awk の粗探しをして Perl への移行を薦めるような内容なんだが、
これ読むと逆に、とくに大規模でもないテキスト処理なら
シェルで無問題じゃんって感じなんだよね。
Perlが受けたのは、第一に実装が優秀で速かったのと、
あと Perl はベル研系の厳格な雰囲気がないというか、
何となく書いて動いちゃうとこがある。そのへんの寛容さが人気の秘密かと

539:名無しさん@お腹いっぱい。
09/10/05 15:57:27
結局適材適所と、それを判断出来る能力の問題だと思うよ。
シェルスクリプトで遅いなら、perlなりでやる。それでも遅いならCとか。


540:名無しさん@お腹いっぱい。
09/10/05 18:06:14
echoで最後に改行したくない場合、
echo -n "unko"
では期待通りに出力されるのですが、
echo "unko\c"
だとunko\cと改行して出力されてしまいます。
Cygwinで\cに対応させるにはどうしたらよいでしょうか。
よろしくお願いいたします。

541:名無しさん@お腹いっぱい。
09/10/05 18:15:13
>>541
CygwinということはGNU coreutilsのechoか。
-e オプション?


542:540
09/10/05 19:05:48
>>541
おおお、ありがとうございます。
$ echo -e "unko\c"
で期待通り
unko$
と出力ができました。

本番の環境はHP-UXを使用しておりまして、
逆に-eオプションが無い(?)ため、
$ echo -e "unko\c"
とした場合、
-e unko$
と出力されてしまいすが、とりあえず、
alias echo='echo -e'
で解決いたしました。

ありがとうございました!!!!

543:名無しさん@お腹いっぱい。
09/10/05 21:56:31
そのへんの移植性に関するバッドノウハウはGNU autotoolsに詰まってる。

544:名無しさん@お腹いっぱい。
09/10/21 12:16:25
RCSで、チェックイン済みの最新リビジョンと、そのひとつ前のリビジョンを比較
ということをよくやります。
今は、rlog -r fileで最新リビジョン番号を調べて、たとえば 1.123 だったとすると、
頭の中でリビジョンを1引いて、rcsdiff -r -r1.122 file みたいに実行しています。
これを1発でやるシェルはできませんか?

あ、sed/awk等でゴニョゴニョやる方法じゃなく(それしかないなら自分でやるので)、
奇麗にエレガントにやる方法を希望します。

545:名無しさん@お腹いっぱい。
09/10/21 18:10:19
よく知らないで申し訳ないが
current=`rlog -r file | grep 'なんとか'`
current=`expr $current - 0.001`
rcsdiff -r -$current file
空白とか改行とか考慮せずかなり適当に書いたけど。

exprでできないならbc使えばできるかもしれない。

546:名無しさん@お腹いっぱい。
09/10/21 18:32:38
それはエレガントじゃないらしいよ

547:名無しさん@お腹いっぱい。
09/10/21 20:25:10
シェルってゆうな。クズ。

548:名無しさん@お腹いっぱい。
09/10/21 22:12:01
エレガントさが求められていたのか
知らんかったよ、すまん

549:名無しさん@お腹いっぱい。
09/10/21 22:41:49
奇麗でエレガントな質問を募集します。

550:名無しさん@お腹いっぱい。
09/10/24 13:10:57
>>545
エレガント云々を除いてもそれじゃ駄目だよ。
リビジョン番号は、 1.8 1.9 1.10 1.11 ... 1.99 1.100 1.101 ...
って進むから、expr で 0.001 引くのは全然見当違い。

551:名無しさん@お腹いっぱい。
09/10/26 22:08:08
どうしてもわからないので質問させてください。

#!/bin/sh

DIR=`pwd`

cd $DIR/file
./play


のようにC言語で記述したplayファイルを実行しているのですが
play内では簡単に表すと以下のような処理をしています

while(true){
ファイルの読み込み処理
sleep(1);
}

このように1秒ごとにファイルを監視してるのですが
シェルスクリプトで実行すると1秒待たずにwhileループが回っているのですが
どうすればよいのでしょうか?

552:名無しさん@お腹いっぱい。
09/10/26 22:13:23
>>551
そのwhileループの具体的なスクリプトを出さずに質問したいなら、
エスパースレに池。

sleepコマンド自体が文法またはオプションエラーになってて
1秒待ててないんじゃないの?

553:名無しさん@お腹いっぱい。
09/10/26 22:15:27
問題点を人に伝える能力が欠けすぎ

554:名無しさん@お腹いっぱい。
09/10/26 22:17:39
>>552
whileループはC言語で書いてるんだろ。(プログラムは出てるじゃん)

コマンドラインで直接 ./play を実行すると1秒毎に処理されるのに、
>>551 のシェルスクリプト経由で ./play を実行すると1秒待たずにループする、
という話だろ。

555:名無しさん@お腹いっぱい。
09/10/26 22:20:28
で、答えは?

556:名無しさん@お腹いっぱい。
09/10/26 22:20:58
>>551
sleep()関数はシグナルで中断される可能性がある。
シグナルが到着すればsleep(1)は1秒未満で終了する。
代わりにnanosleep()使え。

たぶん、シェルスクリプト経由の時だけシグナルが発生するような
別の条件が加わってるんだろ。

557:名無しさん@お腹いっぱい。
09/10/26 22:36:54
>>551
play コマンド側は特に何もせずシェルスクリプト側で sleep 1; すればいいんじゃね?


558:名無しさん@お腹いっぱい。
09/10/26 22:58:35
>>556
ありがとうございます。
試してみましたが同じ状態になりました。

説明が不足していてすみません
GNU Chessを改造していたので、その部分のコードを切り抜いても分かりづらいので自分なりに説明したのですが、説明力がなくてすみません。

ファイルの読み込み部分の処理は

while(true){
sleep(1);
if(rlogfp=fopen("./black.log","r")){
fgets(inp, MAXSTR, rlogfp);
fclose(rlogfp);
remove("./black.log");
break;
}
}


black.logというのは次の手を指定した文字列が収められているファイルです。
C言語で書くのもうまくないので下手なコードですが、ご了承ください。

559:名無しさん@お腹いっぱい。
09/10/26 23:01:09
>>557
whileで監視しているのでsleep(1)がないとファイル作成時に読み込みが実行されるのか、うまくデータが受け取れないので
sleep(1)を追加している次第です。

560:名無しさん@お腹いっぱい。
09/10/26 23:39:32
後からこんなことを追加するのはすみませんが

どうやら監視しているファイルが存在しないのに、ファイルがあるように動いているみたいで、
ファイル読み込む→whileを抜け出す→間違った手だと解釈→whileに入りファイルを読み込む
を繰り返すようになっているみたいです。
シェルスクリプトではなくターム上で実行するとうまくいくのに
スクリプトだとこの現象がおこるのはどういったわけでしょうか?

561:名無しさん@お腹いっぱい。
09/10/26 23:56:55
>>560
シェルスクリプトの cd $DIR/file あたりがうまく行ってないとか。
別のディレクトリの black.logを読んでループしてるとか。

562:名無しさん@お腹いっぱい。
09/10/27 00:11:19
>>561 レスありがとうございます
他のディレクトリではblack.logは生成していないのでそのケースはないかと思います
ディレクトリの場所も間違いはないです

563:名無しさん@お腹いっぱい。
09/10/27 00:23:15
sleepはループの先頭なの?それなら確実に1秒待つでしょ?
説明に一貫性がないと回答者も混乱するし、いいことないよ。
あとは、fgets, fclose, removeの戻り値をちゃんとチェックしてみる。

564:名無しさん@お腹いっぱい。
09/10/27 00:30:07
ぱおーん

ってそれはエレファント

565:名無しさん@お腹いっぱい。
09/10/27 00:40:24
>>551
>シェルスクリプトで実行すると1秒待たずにwhileループが回っている

これはどうやって確認したの?

原因を切り分ける為に、問題を再現出来る最小限の
プログラムを作ってみると良いと思うよ。

566:名無しさん@お腹いっぱい。
09/10/27 00:46:46
>>563,565
アドバイス通り明日調べてみます。


567:名無しさん@お腹いっぱい。
09/10/27 08:05:15
>>559
> whileで監視しているのでsleep(1)がないと
> ファイル作成時に読み込みが実行されるのか、
> うまくデータが受け取れないので

busy waitになるだけでちゃんと動くはずだろ。
だから動かないのは、sleep()以外のところがおかしい。



568:名無しさん@お腹いっぱい。
09/10/27 11:08:26
そのファイル、NFS かなんかの領域に置いてないか?
おかしなキャッシュが効いてるような気がする。

569:名無しさん@お腹いっぱい。
09/10/27 11:38:40
>>568
特に変わった場所には置いてません。

とりあえずthreadやwhileループとファイルの読み込みの部分だけ同じ形でtestファイルを作ってみたのですが
直接実行、シェルスクリプトで実行で共に問題がなかったので、もっと別の場所だと分かりました。
もう少し試行錯誤してみたいと思います。

570:名無しさん@お腹いっぱい。
09/10/27 12:26:31
ちょっと説明が長くなるのでアップロードしてみました。
お手数をおかけしてもうしわけありません。
DLkey:unix

URLリンク(www1.axfc.net)

571:名無しさん@お腹いっぱい。
09/10/27 13:04:39
input_threadが動き出す前にwait_for_inputに入ると、
input_statusが初期値(INPUT_NONE)のままなので、whileを抜けてしまう。

572:名無しさん@お腹いっぱい。
09/10/27 21:14:09
test が表示されないという現象はウチでは一度も再現しませんでした。
Dual Core の Mac です。

外してたらスマソ。

test.sh を実行する
Ctrl-C で test.sh を止める
a.out のプロセスは残ったまま

とかじゃないよね?

まあそれでも test が表示されない理由にはなりませんけど。

573:名無しさん@お腹いっぱい。
09/10/27 21:50:45
一度目がその症状があって
もう一度試したら治っていました

>>571
どのように記述すれば回避できるのでしょうか?
丸投げのようですみません^^;

574:名無しさん@お腹いっぱい。
09/10/28 00:03:20
以前動作していたスクリプトが動かなくなってしまいました…
ここ最近kshのアップデートを行ったのが原因なのでしょうか…

何か情報をお持ちの方いらっしゃいましたらご教授願います。

<事象>
特に問題なく見えるkshがsyntax Error `(' unexpectedで異常終了
コメント内のスペースを1つ削除or2つ追加すると正常に動作する

<やったこと>
kshとbashのアップデート
ksh 20060214-1.4 → 20080202-14.el5
bash bash3.1-16.1 → bash3.2-21.el5

<環境>
redhat Linux 5.1
uname -a結果
Linuc 2.6.18-53.el5 #1 SMP Wed Oct 10 16:34:19 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux

<備考>
ksh -nで構文チェックをかけると、構文エラー以外に「" quote may be missing」という警告が必ずついてきます。
コメントを弄ってエラーを抑止するとこの警告も発生しなくなります。

575:551
09/10/28 00:05:16
. play.shで実行したらうまく動きました。
結局原因はわかりませんでしたが、サブシェルだと何か環境とちがったのかな?と素人ながら思います。
お騒がせしてすみませんでした。

576:名無しさん@お腹いっぱい。
09/10/28 00:59:40
それたまたまだから

577:名無しさん@お腹いっぱい。
09/10/28 01:16:52
while(true)なんてしないで、openの返り値でなんとかならんの?

578:名無しさん@お腹いっぱい。
09/10/28 07:06:37
>>574
おいおい、redhat 5.1というのは10年くらい前のOSで、
カーネルは2.0の時代のもの。(libc5からやっとglibc2に変わった時代)
カーネル2.6で動くわけがない。

579:574
09/10/28 11:18:44
>>578
今確認したところ、redhat 5.1ではなく
RHEL 5.1でした

redhatLINUXとRHELを混同していました
申し訳ありません


580:名無しさん@お腹いっぱい。
09/10/28 11:43:19
>>574
スクリプト晒せ

581:名無しさん@お腹いっぱい。
09/10/28 11:44:15
libc5なつかしいな。
glibc2(libc6)になってようやくLANG関係がマトモになったんだっけ

582:名無しさん@お腹いっぱい。
09/10/28 11:44:22
どうせShift_JISのコメントだろ。

583:574
09/10/28 23:54:47
>>580
手元にスクリプトがない上に動く動かないの条件がよく分からないので再現できず…
申し訳ないです。

>>582
コメント等もう一度文字コードを見直しましたが、すべてUTF-8でした。

584:名無しさん@お腹いっぱい。
09/10/28 23:56:51
手元にスクリプトがないのにコメント等見直した?意味が分からんのだが

585:名無しさん@お腹いっぱい。
09/10/28 23:57:32
不思議な話だなw

586:名無しさん@お腹いっぱい。
09/10/29 22:50:29
LOTO6用の数字列を生成する

for x in $(seq 1 5); do echo $(seq 1 43 | shuf | head -6 | sort -n); done


587:名無しさん@お腹いっぱい。
09/10/30 23:17:20
>>586
for((i=0;i++<5;)){ echo `shuf -i 1-43 -n 6 | sort`; }

↑の方が簡単

588:名無しさん@お腹いっぱい。
09/11/10 09:10:20
質問です。記法1と2では違いがありますか?どちらが正しいとか…
doの後に改行入れるべきかどうなのか,ということですが。

記法1
for i in *
do
echo $i
done

記法2
for i in *
do \
echo $i
done


589:名無しさん@お腹いっぱい。
09/11/10 09:48:42
>>588
記法2は間違いではないがバックスラッシュが余分。
もともと do の直後には、空白、タブまたは改行の区切り文字があればなんでも良い。
「行の継続」をする必要はないので、バックスラッシュは不要。

590:588
09/11/10 11:02:41
>>589
ありがとうございました。

591:名無しさん@お腹いっぱい。
09/11/10 11:33:58
今のトレンドは↓の書き方。
bash依存じゃないぞ。純正シェルでもちゃんと動くから安心して使え。

for i in *
{
echo $i
}

592:名無しさん@お腹いっぱい。
09/11/10 11:37:50
どこのトレンドだよwwwww

593:名無しさん@お腹いっぱい。
09/11/10 11:43:46
for は { ... } でもいいけど、
while は do ... done じゃないといかんというのがアレ。


594:名無しさん@お腹いっぱい。
09/11/12 08:07:11
kshで標準出力と標準エラーをデフォルトでファイル&画面に出力するやり方はありますか?
毎行、| tee -a hoge.log を書くのが大変なので。

595:名無しさん@お腹いっぱい。
09/11/12 08:19:07
>>594

(
command1
command2
command3
:

) 2>&1 | tee -a hoge.log

596:名無しさん@お腹いっぱい。
09/11/12 08:41:02
>>594
scriptコマンドは?

597:名無しさん@お腹いっぱい。
09/11/12 08:58:07
俺はそういうとき
telnet localhost | tee hoge.log
ってやってる

598:名無しさん@お腹いっぱい。
09/11/12 09:27:34
正解(>>595)が出た後にボケ回答(>>596-597)が出てくる、の法則

599:名無しさん@お腹いっぱい。
09/11/13 19:18:09
自分よりいい答えが出たのがそんなに悔しかったのか

600:名無しさん@お腹いっぱい。
09/11/13 19:57:03
> 毎行、| tee -a hoge.log を書くのが大変なので。
毎行と言っているし、ここはシェルスクリプトスレなのでスクリプトの中での記述に
関しての質問だと言う事が容易に予想できる。

スクリプトに関しての質問にscript使えだの、telnetをリダイレクトしろだの、
ボケまくりの回答してる奴らは何なのだろう?
匿名掲示板だからボケ回答も恥ずかしくないのだろうか?

601:名無しさん@お腹いっぱい。
09/11/14 03:03:51
必死だなw

602:名無しさん@お腹いっぱい。
09/11/20 10:11:52
>>599
只の知ったかだろ
半角数字とか学生の分際で早くも理系気取りかよ

603:名無しさん@お腹いっぱい。
09/11/20 10:44:29
>>602
日本語で頼むわ……

604:名無しさん@お腹いっぱい。
09/11/20 20:00:12
> 半角数字とか学生の分際で早くも理系気取りかよ

これは新コピペになりそうな気がする

605:名無しさん@お腹いっぱい。
09/11/21 01:23:51
>>604
新コピペとか学生の分際で早くも理系気取りかよ
…こんな感じ?

606:名無しさん@お腹いっぱい。
09/11/21 02:02:27
bashを使用しています。
数字が入っている変数に3桁毎にカンマを入れる方法が分かりません。
どうやれば3桁毎にカンマを入れれるようになりますか?

607:名無しさん@お腹いっぱい。
09/11/21 12:27:50
>>606
printf "%'d" "$var"

608:名無しさん@お腹いっぱい。
09/11/21 22:05:46
>>607
これはいいことを聞いたと、試してみたができないぞ?
$ bash --version
GNU bash, version 4.0.28(2)-release (i686-pc-linux-gnu)

609:名無しさん@お腹いっぱい。
09/11/21 22:13:00
>>608
varの中にちゃんと数字入れてるか?

610:名無しさん@お腹いっぱい。
09/11/21 22:17:56
>>607 では printfの書式に改行が入ってないから、
シェルのプロンプト設定によってはprintfの出力をプロンプトが上書きしてしまう
とエスパー。

それとは別に、zshの内蔵printfでは動作しないね。

611:606
09/11/21 23:23:18
>>607さん
有難うございました。ウチの環境ではうまくいきました。

612:名無しさん@お腹いっぱい。
09/11/22 14:57:44
$ printf "%'d\n" "123456"
123456
$ var="12345667"
$ printf "%'d\n" "$var"
12345667

なにがいけないのかねー

613:名無しさん@お腹いっぱい。
09/11/22 17:20:06
$ printf "%aqd\n" "123456"

614:名無しさん@お腹いっぱい。
09/11/22 17:29:35
>>612
localeの設定じゃない?
printf(3)によると、

>>printf("%'.2f", 1234567.89);
>>results in '1234567.89' in the POSIX locale, in '1234567,89' in the nl_NL locale,
>>and in '1.234.567,89' in the da_DK locale.

615:名無しさん@お腹いっぱい。
09/11/23 00:52:46
>>614
ロケールの問題でした。ありがとう。
ちょっと気になるのは、printfコマンドする時に
LC_ALLを明示的に与えても上手く動作しなかったんですよね
組み込みコマンドだと伝わらないのかな?

$ locale
LANG=ja_JP.eucJP
LC_CTYPE="ja_JP.eucJP"
LC_NUMERIC=C
LC_TIME=C
LC_COLLATE="ja_JP.eucJP"
LC_MONETARY="ja_JP.eucJP"
LC_MESSAGES=C
LC_PAPER="ja_JP.eucJP"
LC_NAME="ja_JP.eucJP"
LC_ADDRESS="ja_JP.eucJP"
LC_TELEPHONE="ja_JP.eucJP"
LC_MEASUREMENT="ja_JP.eucJP"
LC_IDENTIFICATION="ja_JP.eucJP"
LC_ALL=
$ LC_ALL=da_DK printf "%'d\n" "123456789"
123456789
$ LC_ALL=da_DK bash
$ locale
LANG=ja_JP.eucJP
LC_CTYPE="da_DK"
(省略)
LC_ALL=da_DK
$ printf "%'d\n" "123456789"
123.456.789

616:名無しさん@お腹いっぱい。
09/11/23 06:55:47
$ printf "%'d" "123456789"
printf: %': invalid directive

617:名無しさん@お腹いっぱい。
09/11/23 13:08:26
>>615
>>$ LC_ALL=da_DK printf "%'d\n" "123456789"

LC_ALL を LC_NUMERIC にしてもダメ?

618:名無しさん@お腹いっぱい。
09/11/23 15:32:07
(優先される)強さは、
強 LC_ALL > LC_個別 > LANG 弱
のはずだから、LC_ALL があってダメなら LC_NUMERIC でもダメな希ガス。



619:名無しさん@お腹いっぱい。
09/11/23 15:44:54
>>617
ダメでした。
というかlocale(7)に書いてあるロケールの決定順序を見る限り
$ LC_ALL=da_DK printf "%'d\n" "123456789"
で動かなければ、LC_NUMERICを使っても同じなのではないかと。

ところで、
$ LC_ALL=da_DK locale
の結果は$ LC_ALL=da_DK bashで作ったシェル上でlocaleした
(参考>>615の2個目のlocale)のと同じ結果になります。
(つまりLC_ALLも、LC_NUMERICもda_DK)

その癖に、
$ LC_ALL=da_DK printf "%s\n" "$LC_NUMERIC" と
$ LC_ALL=da_DK echo "$LC_NUMERIC" はどちらも「C」が出力
(参考>>615の1個目のlocale)になるんですよね。LC_ALLはもちろん、改行のみです。
環境変数の伝わり方が変ですよね?

つまり、
localeだとLC_ALL(もしくはLC_NUMERIC)がexportされてて、
printfとechoはexportされない。

それと、
>>615で「組み込みコマンドだと・・・」といいましたが、
$ type -a echo したら、builtinと/bin/echoの2つのエントリがあったので、
どちらも試してみましたが、exportされませんでした。
どういうメカニズムでこうなっちゃうんでしょう。

620:名無しさん@お腹いっぱい。
09/11/23 15:54:16
>>618 とレスが一部被ってしまった

連レスですみませんが、
コマンドの前に環境変数定義をつけるシンタックスって
なんという名前で呼ばれていますか?

そもそもどういうものなのかを調べたいのですが、ググりづらくて。

621:名無しさん@お腹いっぱい。
09/11/23 16:04:31
>>620
shじゃなくてbashのマニュアルで申し訳ないが、
A simple command is a sequence of optional variable assignments
followed by blank-separated words and redirections, and terminated
by a control operator.
だそうな。
optional variable assignments (省略可能な変数代入)


622:608,612,615,619
09/11/23 18:22:28
>>621 ありがとう。man bash読みました。
組み込みコマンドでの、optional variable assignmentの挙動についてまとめてみました。

COMMAND EXECUTION ENVIRONMENT節に以下の記述があります。
When a simple command other than a builtin or shell function is to be
executed, it is invoked in a separate execution environment

つまり組み込みコマンドはseparate execution environmentで呼び出されない。
これは当たり前のことで、組み込みコマンドは別シェルで実行されないということですよね。
そして個人的に新たに知ったのは、optional variable assignmentは別シェルにしか
伝えられないということです。(現在のシェル変数には代入されない)
だから、>>615で $ LC_ALL=da_DK printf "%'d\n" "123456789"
がコンマ区切りにならなかったんですね。

だったら、敢えてシェル変数を伝えられた実行環境を作って、printfするとどうなるか。
#include <stdlib.h>
int main()
{
 system("printf \"%s\n\" \"$LC_NUMERIC\"");
 system("printf \"%'d\n\" \"123456789\"");
 return 0;
}
をコンパイルしたa.outに対して試してみました。
(a.outは組み込みコマンドではないので別シェルで実行され、
optional variable assignmentが伝えられる)


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch