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


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

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



1 名前:名無しさん@お腹いっぱい。 [2007/02/15(木) 14:28:44 ]
シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。


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

□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。

前スレ
シェルスクリプト総合 その7
pc10.2ch.net/test/read.cgi/unix/1157601611/


310 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/18(日) 18:56:13 ]
expectって標準ではいってたっけ?

311 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/18(日) 22:20:49 ]
なんの標準だかわからんけど
入ってないなら入れればいいじゃん。

312 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/18(日) 23:45:58 ]
>>310
お馬鹿さん?

313 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/20(火) 00:15:56 ]
仕事の場合、そうホイホイと入れるわけにはいかないんだな

314 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/20(火) 00:34:23 ]
じゃあしかたないな

315 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/20(火) 00:46:09 ]
必要ないものはホイホイ入れられないだろうが
必要あるなら入れなきゃいかんだろ。

316 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/21(水) 00:06:29 ]
あたらしい言語処理系が入るというと嫌がられそうだから、
perlの小さなライブラリを追加といってExpect.pmでよくない?
かなりプログラム臭くなるのでexpectに比べてはいけないが、次善の策ではあるはず。


317 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/21(水) 01:28:07 ]
なんでexpect入れる話になってんだ

318 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/21(水) 01:51:29 ]
今回は>>298からの流れ



319 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/21(水) 02:25:07 ]
telnetならexpect使うのがいいだろうけど、sshとscpならパスなしのkeyを使うのが無難だと思うけどな。
パスなしでログインできるのが怖いなら、authorized_keysにcommandを書いて、できることを限定しておくといいよ。
スレ違いだったらすまん。

320 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/28(水) 01:47:01 ]
sedで、最後の行から逆順に文字列検索していって、1件目を出力して終わらせることできるかな?


321 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/28(水) 02:04:06 ]
cat hoge.txt | grep ほげ | tail -1

322 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/28(水) 02:30:58 ]
>>320
awkでやれ
awk '{line[NR]=$0}END{for(i=NR;i>0;i--){if(line[i]=="検索パターン") print line[i];}}' input.txt


323 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/28(水) 02:50:52 ]
tac filename | sed -n '/hoge/{p;q;}'


324 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/29(木) 16:52:36 ]
二つのテキストファイルA.txtとB.txtがあります。
行数は同じでそれぞれの行が関係のある物になっています。
現在、その二つの行をそれぞれスペースで区切って接続を行いたく考えています。

A.txt
山田
山下

B.txt
太郎
二郎

AB.txt
山田 太郎
山下 二郎

A.txtとB.txtからAB.txtを作成する妙案などございましたらご教示いただけませんでしょうか?
よろしくお願い致します。



325 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/29(木) 16:56:53 ]
>>324
paste A.txt B.txt > AB.txt

326 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/29(木) 17:09:44 ]
>>325
PASTE(1)
名前
paste - ファイルを行単位でマージする

大変失礼いたしました…orz
シェルスクリプトとかそう言うレベルで無かったことをお許し下さい…。

327 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/30(金) 09:37:33 ]
b.txt の内容で
幸子の場合、a.txtが山田となっていたら
里中に変更する。という条件付きくらいにしとけば
スクリプトでしなきゃいかんけどな。

328 名前:名無しさん@お腹いっぱい。 [2007/03/30(金) 15:20:07 ]
~/.forwardに記述して、メールを標準入力から読み込んで
そのenvelope Fromを、実データのFromに置換して/usr/bin/vacation
に渡すスクリプトを書きたいのですが・・・

sed -n 's/^From: [^<]*<\([^>]*\).*/\1/p'の内容を覚えさせておいて、
もう一度先頭から読み込んで置換すればよいと思いますが、
その方法がわからないのです。
微妙な内容なのでググるためのキーワードもいまいちで、ヒットしません。

別にsedでなくてpealやawkでもよいのですが、何かいい方法はありますでしょうか?



329 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/30(金) 15:26:46 ]
>>328
そのまま
・覚えさせる->ファイルに書く
・もう一度先頭から読み込んで置換する->そうする
でいいんじゃないの?


330 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/30(金) 16:01:32 ]
URLが一行ずつずらーと並んでいるのですが
頭とケツにそれぞれ「”」を付けたいです。
何か良い方法は有りませんでしょうか?

331 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/30(金) 16:08:36 ]
sed 's/^/”/' | sed 's/$/”/'

332 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/30(金) 16:17:30 ]
>>331
パイプが無駄。一発でできる。

sed 's/\(.*\)/"\1"/'

333 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/30(金) 16:24:13 ]
pealのようなもの

334 名前:328 [2007/03/30(金) 16:31:53 ]
>>329

難しく考えずに、そうすることにします。

335 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/30(金) 16:44:44 ]
>>331-332
ありがとうございます。
頑張ってsed覚えます。

336 名前:328 [2007/03/30(金) 17:10:27 ]
>>334

と思ったら、メール出力から起動されるプログラムは
きわめて弱い実行権限(nobody)しかないので、/tmpにさえ
ファイルを作れません。(人間がテストしたときは巧くいきましたが・・)
権限を強めればセキュリティーリスクが増大するし、
やはり、スクリプトの中で記録と標準入力の再読み込みが必要な模様です。
まあ記録は置換文字列に変数を使えることが判ったので何とかなりそうですが、
「初めからもう一度実行」が途方に暮れてしまいますね。

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

337 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/30(金) 17:14:32 ]
・nobody でも /tmp に書ける。
・そもそも sendmail でも postfix でも .forward のファイル所有者と
同じ権限でプログラムが起動する。nobody にはならない。


338 名前:328 [2007/03/30(金) 18:36:24 ]
>>337

なるほど

では、ほかの原因を考察して見ます。

ありがとうございます。



339 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/30(金) 22:30:53 ]
>>335
sed 's/.*/"&"/'
でもいいな。

340 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/30(金) 23:05:57 ]
>>335
正規表現は使わない方が速いかな。
awkで、
awk '{print "\""$0"\""}'

341 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/03(火) 01:43:34 ]
awkのsystem関数に与えるコマンド文字列の中で「"」や「'」って使える?
「\」を前に置いても駄目でした…



342 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/03(火) 02:26:06 ]
>>341
system が起動しているシェルに食われたんじゃね?


343 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/04(水) 00:17:45 ]
>>342
例えばこんな感じ。実際はこんなシンプルじゃないけど。
awk '{system("grep \"^$\" $1")}' input.file
systemが食われたのか、systemの引数の中では引用符が使えないのか、切り分けができません。



344 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/04(水) 00:26:48 ]
>>343の例だと$1に何も入らないから、とか?

345 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/04(水) 01:00:44 ]
>>344
あそっか、$1は""の外でした。。

awk '{system("grep \"^$\" "$1)}' input.file

本物は業務で使う予定だからコピペできないんだよね。



346 名前:名無しさん@お腹いっぱい。 [2007/04/07(土) 02:11:04 ]
find /日本/関東/女/ mtime +7300でリダイレクトしたら彼女が出来た

347 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/08(日) 22:55:59 ]
>>345
ちゃんと伝わっていなかったようで。
awkの中にシェルの変数の$1入れてもawkがもっていっちゃうからダメなんだって。

348 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/09(月) 22:22:34 ]
>>347

そうか?普通に↓とか使えてるぞ?

awk '{sum[substr($0,a,b)]+=substr($0,c,d);}END{for(n in sum)print n,sum[n];}' input.txt





349 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/10(火) 20:40:57 ]
なんかかみ合わないんだけど、
>>343>>345の例だと、$1をシェルがもっていっちゃって動かないだろうから、
本来やりたいことである
>awkのsystem関数に与えるコマンド文字列の中で「"」や「'」って使える?
の問題とは違ったところでハマっているでしょ、ってことを書いただけなんだけど。
($1にはinput.txtを入れたいのだろうと推測)

それに対して、$数字は awkで使用できるよ、と書かれても困っちゃうんだが。

350 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/11(水) 06:22:32 ]
>>349
言いたいだろうことは理解するが、347がそれが伝わる書き方とは思えなかったぞ。
例えば、何を誰がもっていっちゃうと書いたか、347と349を比較してみ。

351 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/13(金) 00:00:33 ]
ふいんき(なぜか略)を悪くしたようで正直スマンカッタ

352 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/13(金) 01:37:02 ]
awkは読み込んだレコード全体を$0で参照できて、
フィールドセパレータ(デフォルト空白文字)で区切られたn番目のフィールドを
$nで参照できるんだよな。
awk '{system("grep \"^$\" "$1)}' input.file
で$1はinput.fileから読み込んだカレントレコードの1番目のフィールドを
参照すると。
$数字がawkで使えるのは良いとして結局"や'は
system関数の引数の中で使えるのかどうか?



353 名前:名無しさん@お腹いっぱい。 [2007/04/13(金) 16:02:04 ]
DebianとFreeBSDを使っていて、共通の.bashrcを参照しているのですが
Debianを使っているときにはUTF-8を、
FreeBSDを使っているときにはEUC-JPを
環境変数LANGに設定するようにしたいのですが
どのようにコードをかけばよいのでしょうか?

354 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/13(金) 16:07:45 ]
>>353
uname とか hostname あたり見るとか。

355 名前:353 [2007/04/13(金) 16:42:04 ]
>>354
unameとif文を使えばできると思うんですけど
それでsourceコマンドを実行したときに
ちゃんとわりあたるかどうか・・・

356 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/13(金) 16:54:07 ]
>>355
おいおい、sourceなんて使わないよ。
あと、ifじゃなくてcaseを使うのが定石。

case `uname -s` in
Linux) export LANG=ja_JP.UTF-8;;
FreeBSD) export LANG=ja_JP.eucJP;;
esac

357 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/13(金) 16:55:19 ]
別に if 使ってもいいと思うけど、
なんで source が出てくるのかよくわからん。

358 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/15(日) 15:34:49 ]
>>356
Cとかだとswtichは敬遠される傾向にあるけどな。




359 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/15(日) 17:19:24 ]
お前の周りだけだろ。

360 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/15(日) 17:33:16 ]
ifを使うとすると、

if [ `uname -s` = Linux ]; then
export LANG=ja_JP.UTF-8
elif [ `uname -s` = FreeBSD ]; then
export LANG=ja_JP.eucJP
fi

となって、unameの実行が2回になって無駄になる。
かと言ってunameを1回にしようとすると、

tmp=`uname -s`
if [ $tmp = Linux ]; then
export LANG=ja_JP.UTF-8
elif [ $tmp = FreeBSD ]; then
export LANG=ja_JP.eucJP
fi

となって、シェル変数1つが余分に要るので美しくない。

よって、caseを使うのがモストエレガント。

361 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/15(日) 17:37:03 ]
>>360
お前の美学はよくわかった。

362 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/15(日) 17:41:22 ]
で、source はなんで出てきたんだ?

363 名前:名無しさん@お腹いっぱい。 [2007/04/16(月) 19:45:58 ]
そうっすねぇ…。

364 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/16(月) 19:58:24 ]
審議せずに却下

365 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/16(月) 20:37:02 ]
sh にそんなコマンドがないからか?

366 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/16(月) 22:11:51 ]
.があるじゃん。

367 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/16(月) 22:42:57 ]
. はあるけど source はないってオチなのかなと。

368 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/16(月) 23:46:40 ]
source がない sh ってたとえばどれ?



369 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/16(月) 23:52:07 ]
  J

370 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/17(火) 00:16:38 ]
>>368
sh

371 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/17(火) 00:41:10 ]
>>370
どの OS の?

372 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/17(火) 00:47:25 ]
>>371
普通のbshなら.しか使えない。
HP-UXやAIXのshは中身がkshなんで。


373 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/21(土) 02:11:17 ]
zsh 4.3.4登場 - マルチバイト文字の対応を強化
journal.mycom.co.jp/news/2007/04/20/023/index.html

374 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/24(火) 14:20:37 ]
/bin/zsh

375 名前:名無しさん@お腹いっぱい。 [2007/04/25(水) 21:35:53 ]
シェルいい本知りません?初心者向けで

376 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/25(水) 21:45:15 ]
UNIXプログラミング環境

377 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/25(水) 21:50:11 ]
マジレスをおねがいします

378 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/25(水) 21:52:27 ]
どのへんが冗談だと?



379 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/25(水) 21:55:09 ]
初心者向きじゃないし、内容が古い

380 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/25(水) 22:01:27 ]
対案を出してから批判しろ

381 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/25(水) 22:06:43 ]
「試験に出るシェルスクリプト」

382 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/26(木) 00:34:12 ]
>>381
その筋質問箱は付いてますか?


383 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/26(木) 04:36:49 ]
Z80は最強だから大丈夫

384 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/26(木) 10:22:57 ]
じゃあ「できるシゥルスクリプト」

385 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/02(水) 17:38:53 ]
英小文字からなる文字列の最初の一文字だけを大文字に変換するには
どうすればよいのでしょうか?

sedだと只それだけで一文字目の後ろに改行を挿入してホールドスペースに入れて、
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ てなことして
また連結して改行を削除みたいな、バカ手間が掛かるので投げ出してしまった。
もっと簡潔に出来たら良いなと思うのですが・・・

386 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/02(水) 17:42:25 ]
>>385
echo aaa | sed 's/\(.\)/\U\1/'

387 名前:385 mailto:sage [2007/05/02(水) 18:01:30 ]
>>386

それは。どこのsedですか?
うちではそれはUaaaと出力します。\Uという正規表現はUそのものを表すようです。

388 名前:385 mailto:sage [2007/05/02(水) 18:42:47 ]
ちょっと調べてみたらGNUのsedだと、>>385の動作が出来るようです。
しかし、なんでもコマンドを高機能なやつに入れ替えるのもどうかと思うし、
使っているOSがGNUツール群を標準装備していないのもそれなりに理由があるだろうし
高々文字列変換で新たなツールを使うのには、消極的になりますね。



389 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/02(水) 19:11:07 ]
echo "abc" | awk '{print toupper(substr($0,1,1))substr($0,2)}'
echo "abc" | perl -pe 's/(.)/\U\1/'

390 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/02(水) 19:18:21 ]
echo aaa | awk -v FS= -v OFS= '{$1=toupper($1);print}' はどう。

391 名前:385 mailto:sage [2007/05/02(水) 20:06:42 ]
>>389
有り難うございます。
awkのsubstrで文字位置指定して、toupperで大文字に変換ということですね。
perlの方はgsedと互換な感じの構文ですね。(てかgsedが模倣した?)
>>390
済みません。
awk: illegal statement
input record number 1, file
source line number 1
と成ります。

いずれにしてもいろいろと勉強になります。
>>386,>>389,>>390の皆さん、ありがとうございました!

392 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/03(木) 02:41:58 ]
GNU の sed でも y/a-z/A-Z/ みたいな表現できないんだよね。
互換性維持のためなんだろうけど。

393 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/03(木) 09:18:45 ]
kshのコマンドヒストリで矢印キーが使いたいのだが、
emacsのCTRLキーはめんどい。
エロい人、設定のしかた教えてチョ。

394 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/03(木) 10:08:20 ]
>>393
くだらない質問はここに書き込め!Part 52
pc11.2ch.net/test/read.cgi/unix/1176049968/

395 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/03(木) 18:24:22 ]
>>393
bashつかえw


396 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/04(金) 16:26:20 ]
cshで変数の中に空白文字で区切られた複数のワードからなる文字列が代入されてる。
例:「aaa bbb ccc ...」
各ワードに接頭辞と接尾辞を付加したいが、sedでできるかな?
例:「prefix.aaa.postfix prefix.bbb.postfix prefix.ccc.postfix ...」
ちなみにワード数は不定。
置換後の文字列長はLINE_MAX以下でないと駄目?



397 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/04(金) 16:44:54 ]
はい、cshはスルー、次の方どうぞ

398 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/04(金) 16:56:59 ]
こんなんでよい? bashだけど

$ s="aaa bbb ccc"
$ echo $s | sed -e 's/\([^ ]*\)/prefix.\1.postfix/g'
prefix.aaa.postfix prefix.bbb.postfix prefix.ccc.postfix





399 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/04(金) 23:17:48 ]
Gnomeなどのデスクトップ環境でxxx.shに何らかのファイルをドロップしたとすると、そのファイル名はどういった変数に格納されているのでしょうか。
tex処理を簡単にしたいと考えたのですが、これが分からずにつまっています。

400 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/05(土) 00:39:09 ]
$1, $2, ...

401 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/05(土) 06:17:46 ]
>>398
$1,$2...って9個までしか使えないんじゃ?
396は「ワード数不定」って言ってるから、10個以上もありうるだろ。



402 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/05(土) 06:21:09 ]
↑gオプション付いてるやん。何かみついてんだコイツ

403 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/05(土) 14:01:50 ]
>>401
アホー

>>400>>399へのレスだ。

404 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/05(土) 23:04:16 ]
>>399
多分、コマンドでこう起動したのと同じ扱いになっている思う。

$ xxx.sh < "abc.tex"

スクリプト側でリダイレクトされる前のファイル名を
取得する方法が分かれば、どうにかなるんじゃないかな。

405 名前:名無しさん@お腹いっぱい。 [2007/05/06(日) 01:12:45 ]
画像変換するスクリプトを作っています。
スクリプ中で使用するコマンド(今回はmogrify)がインストールされているかどうか
調べるのに手っ取り早い方法ありますか?

今のところ思いつくのは、PATHから「:」で区切って1つづつ抜き出し、その直下に
mogrifyがあるか「test -x」する方法です。

406 名前:405 [2007/05/06(日) 01:26:07 ]
ちょっと自己解決

whereis使えばいいか。
whereisって見つからなくても0返すんですね・・・

whereis -b mogrifya | grep -v ':$' > /dev/null
if [ $? ...
って感じかな

もっとスマートな方法ありましたらご教授ください。

407 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/06(日) 01:47:14 ]
whichは?

408 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/06(日) 02:09:28 ]
if which mogrify > /dev/null 2>&1 ; then
...
は?



409 名前:名無しさん@お腹いっぱい。 [2007/05/06(日) 02:18:36 ]
>407,408
whichか、なるほど
解決しましたありがとうございました。

410 名前:405 [2007/05/06(日) 02:45:19 ]
たびたびすいません
&&や||の後に複数のコマンドを書くにはどうすればいいのでしょうか?

見つからなかった場合、NGと表示しexitしたいのですが、
which mogrify > /dev/null 2>&1 && echo 'bc ok' || (echo 'bc NG'; exit 1)
としてもミニシェルから抜けるだけなのです

if文で書けばいいだけなのですが、勉強の意味でも知っておきたいのです。

411 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/06(日) 03:18:41 ]
function echo_exit() {
echo $*
exit
}
とか定義しちゃえば?


412 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/06(日) 03:28:54 ]
>>410
... || { echo NG; exit 1; }
は?

413 名前:410 [2007/05/06(日) 11:45:38 ]
>411
いいですね。たくさんコマンド実行したいときに使わせていただきます。

>412
おー、意図したとおりになりました。今回はこちらを使わせていただきます。

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


ちなみにcommand1が成功したときはcommand2、失敗したときはcommand3という時に、
command1 && command2 || command3
という書き方は問題ないですか?
動作は意図したとおりなんだけど、「|| command3」はcommand2の結果に
かかってくるように見えるのでちょっと気持ち悪い・・・

414 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/06(日) 12:35:35 ]
>>413
>command1 && command2 || command3
>という書き方は問題ないですか?

command2が falseを返した時、command3まで実行されてしまうのが問題。
if - else の代わりにするなら、

command1 && { command2; true; } || { command3; }

と書けば完全。command2や command3は、; で区切って複数コマンド可能。

415 名前:413 [2007/05/06(日) 14:40:39 ]
>414
なるほど。
command2にはechoとかしか入れてなかったので気づかなかった・・・
勉強になりました。ありがとうございます。

416 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/11(金) 23:38:51 ]
tail -f ログファイル名 | awk -f 手続きファイル

上記コマンドを指定の条件をつけてwhileによる繰り返しでログを整形する
シェルをつくりたいのですが、末尾に">>ファイル名"としても指定のファイル
にリダイレクトできません。
while〜doneの後、シェルスクリプト実行時の末尾に>>を指定してもだめです。
出力は画面のままです。(通常のtail -fのイメージ)
&でバックグラウンドで実行しても同様です。

tail -f で読み取っている内容を別のログファイルに出力するにはどうすれば
よいですか?

417 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/12(土) 09:13:18 ]
teeじゃだめ?

418 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/12(土) 10:06:11 ]
シェルってゆーな。クズ。



419 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/14(月) 21:13:31 ]
tail -f って終了しないじゃん

420 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/15(火) 00:34:17 ]
tee -a hoge.log


421 名前:名無しさん@お腹いっぱい。 [2007/05/15(火) 17:57:30 ]
hoge%68%6F%67%65 のような文字列を
%68%6F%67%65%68%6F%67%65 のように
%表記に直すにはどうしたらよいでしょうか?


422 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/15(火) 18:50:16 ]
perlつかえ。

423 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/15(火) 18:50:23 ]
>>421
よく意味がわからんが、URLエンコーディングとかの話か?

424 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/15(火) 19:05:07 ]
>>423
よく意味がわからんなら答えなくていいよ。

425 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/15(火) 19:25:20 ]
>>421
s/hoge%68%6F%67%65/%68%6F%67%65%68%6F%67%65/g


426 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/15(火) 19:27:18 ]
>>425
できました!! ありがとう!!

427 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/15(火) 19:28:00 ]
自演乙

428 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/16(水) 01:53:36 ]
ESP発揮して混じれ酢すると
hogeを%表記しようとしたときに
右側の既に%表記されてる部分が
さらに%表記に変換されてしまうことを
回避したいと思っているのではないかと




429 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/16(水) 02:00:50 ]
一旦デコードしてからエンコードするのが確実だな

430 名前:201 mailto:sage [2007/05/16(水) 02:03:24 ]
01.jpg 02.jpg 03.jpg 04.jpg ...

と沢山のファイルがあってfor文(じゃなくてもいいけど)により

convert +append 01.jpg 02.jpg 03.jpg out1.jpg
convert +append 04.jpg 05.jpg 06.jpg out2.jpg
...

というように、3つずつ抜き出して一気に処理したいのですが、どうすればいいのでしょうか?


431 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/16(水) 02:23:41 ]
>>430
100個ずつとかだと別の方法を使うが、3個ずつならこんなもんか

#!/bin/sh
set -- ??.jpg
i=1
while :; do
case $# in
0) break;;
1) convert +append $1 out$i.jpg; break;;
2) convert +append $1 $2 out$i.jpg; break;;
*) convert +append $1 $2 $3 out$i.jpg; shift; shift; shift; i=`expr $i + 1`;;
esac
done


432 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/16(水) 02:27:07 ]
set -- *.jpg
i=0
while [ $# -gt 0 ]; do
i=`expr i + 1` #式使えるならそれでも。
convert +append $1 $2 $3 out$i.jpg
shift 3
done

shiftの数引数ってBourne Shellでも使えるのかな。
使えないなら3回shift。


433 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/16(水) 02:27:49 ]
ああ、ちょうど3の倍数になっていない場合は考慮してなかったな。


434 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/16(水) 02:28:55 ]
ちょうど3の倍数になっていない場合はどうすんの?


435 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/16(水) 02:29:55 ]
/dev/null とかで補完

436 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/16(水) 02:37:35 ]
名前欄は無視でお願い

437 名前:430 mailto:sage [2007/05/16(水) 02:45:01 ]
おお、夜食食べている間にこんなにもレスが
3の倍数になっていないときは私自身考慮してませんでいした。
431さんの set だけ使ったことがないのですが、とにかく
>431-435 で十分対処できそうです。
setも調べてみます
ホントにありがとうございます。







438 名前:430 mailto:sage [2007/05/16(水) 02:46:51 ]
よく見たら432さんもsetありましたね。
とにかくありがとう



439 名前:421 mailto:sage [2007/05/16(水) 11:12:47 ]
>>422
シェルスクリプトで難しいならperlを使ってもかまいません。

>>423
URLエンコーディングならアルファベットはそのままだと思うのですが、
アルファベットも16進数表示したいわけです。
pukiwiki のバックアップをローカルに落とすのに、
ファイル名を知りたいんです。

440 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/16(水) 11:21:18 ]
>>439
pukiwikiスレあたりで「戻し方教えれ」って聞いた方がいいんじゃね?

441 名前:416 mailto:sage [2007/05/16(水) 23:44:33 ]
ご返事いただきありがとうございます。

tail -f ログファイル名 | awk -f 手続きファイル

上記コマンドではawkによる整形結果を標準出力できる状態で、
さらにパイプでteeコマンドを実行してみましたがうまくログが
出力できませんでした。

名前付きパイプを作成し、オリジナルログの出力先を名前つきパイプにして
直接awkで名前つきパイプを標準入力状態にしても、tail -f のような画面に
標準出力はできますがファイルへのリダイレクトは無理でした。
難しいですねぇ。。

442 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/17(木) 00:48:16 ]
tee の使い方間違ってるだけだろ

443 名前:ウサチャソ mailto:sage [2007/05/17(木) 00:52:02 ]
>>441
tail -f をパイプすると、上手く動かないよ。
GNUのだとどうなんだろ?

「tail パイプ バッファリング」
でググると、それっぽい事いっぱいでてくるYO

444 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/17(木) 18:41:18 ]
a.shに . b.sh として読み込まれるb.shが自分の名前がb.shであると知る方法はありますか?

445 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/17(木) 18:50:24 ]
>>444
ない。
. で読む場合は $0もセットされないし。

446 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/17(木) 19:05:57 ]
>>445
ありがとうございます。
あらかじめ埋め込んでおくしかなさそうですね…。

447 名前:416 mailto:sage [2007/05/17(木) 23:00:53 ]
>>443
バッファの問題だったんですね。

通常のawkはやめて、gawkのfflush関数を使うことでうまくいきました。
ありがとうございました。

448 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/18(金) 19:10:57 ]
シェルスクリプトでログインログアウトを自動化するにはどうしたらいいでしょうか?
もし良かったら数行のコマンドでレスお願いします。



449 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/18(金) 19:15:55 ]
>>448
何をやりたいのかもうちょい詳しく。

450 名前:448 mailto:sage [2007/05/18(金) 19:59:20 ]
>>449

1.現在rootでログイン中。
2.testユーザーでログインして何か作業をする。
3.そしてまたrootに戻る。

これを自動化したいです。

451 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/18(金) 20:03:21 ]
>>450
su test 何か
もしくは
su - test 何か

違いについては man su 等を参照。

452 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/18(金) 20:30:15 ]
>>451
間違ってるよ。man su 等を参照するべきなのはオマエ。

453 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/18(金) 20:59:46 ]
>>450
sudoじゃダメなんか?

454 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/18(金) 21:30:20 ]
>>448
testユーザで実行するバッチファイルを作っておいて、
  su - test -c バッチファイル
で実行しる。

455 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/18(金) 21:35:19 ]
バッチファイル
バッチファイル
バッチファイル
バッチファイル
wwww

456 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/19(土) 00:37:47 ]
ほんとうにloginしたいならexpectを使うとか

457 名前:448 mailto:sage [2007/05/19(土) 03:04:26 ]
rootでログイン中
expectでsu - testとして
touch /home/test.txtを実行して
再度expectでsu - rootでrootになっても
/home/test.txtは作成されてませんでした
なぜでしょう?

458 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/19(土) 10:21:42 ]
パーミッションじゃないの?
/homeにtestユーザは書き込めないんでは。



459 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/20(日) 04:33:32 ]
質問。
11.22.33を
33.22.11に文字を反転させたい。


460 名前:459 mailto:sage [2007/05/20(日) 04:42:15 ]
459は取り消し!
11.22.33を
a[0]=11
a[1]=22
a[2]=33
のように配列に代入したい。
よろしくお願いします。

461 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/20(日) 05:39:47 ]
宿題でつか

462 名前:459 mailto:sage [2007/05/20(日) 06:19:25 ]
宿題でつ

463 名前:459 mailto:sage [2007/05/20(日) 07:14:05 ]
スレ汚してごめんなさいできまつた

464 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/20(日) 21:56:12 ]
テキストファイルに、ファイルの場所がずらずら書かれていて

-----
/usr/local/etc/pussy001.jpg
/usr/local/etc/pussy002.jpg
/usr/local/etc/pussy003.jpg
     :
-----

そこに書かれているファイルを指定した場所に移動させたいんです。
で、こんな感じで動くスクリプトを書きたいなぁと考えているんですが

cat list.txt | grep jpg | mv.sh /work/pussy

この mv.sh の書き方が分かりません。



465 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/20(日) 22:02:27 ]
>>464
mv `grep jpg list.txt` /work/pussy

で、一発。・・・で、pussyってww

466 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/20(日) 22:47:23 ]
>465
残念ながら、ファイル名にスペースがあるとだめでした。
sh, tcsh, bashで試してみましたが、どれも同じです。

467 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/20(日) 23:18:02 ]
>>464 の例では、ファイル名にスペースが入ってないじゃないか。
そういう条件は先に例に含めて書くこと。
ファイル名にスペースがある場合のやり方ももちろん知ってるが、
わざわざ教える気にならないので俺はパス。

468 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/20(日) 23:25:45 ]
>>466
IFS='
' mv `grep jpg list.txt` /work/pussy



469 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/21(月) 00:42:01 ]
(while read f; do mv "$f" dest/ ; done) < file

>>467
ファイルの長さを考慮しないgrep戦法しか提示しなかった奴が
そんな理屈をこねても見苦しいだけ。

470 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/21(月) 06:22:05 ]
>>469
残念ながら、ファイル名に \ があるとだめでした。

471 名前:名無しさん@お腹いっぱい。 mailto:sage read -r [2007/05/21(月) 10:38:53 ]
じゃあ諦めな。

472 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/21(月) 11:09:30 ]
>>471
ファイル名の \ を考慮しないを考慮しないwhile read戦法しか提示しなかった奴が
そんな理屈をこねても見苦しいだけ。

473 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/21(月) 11:17:06 ]
というか、>>469 って、元の質問の jpg で grepするの忘れてるじゃん。
テストだったら0点。

474 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/21(月) 11:25:38 ]
でもテストじゃないよ。

475 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/21(月) 11:33:37 ]
そういう香具師が、「それはケアレスミス。答えはわかってた」とか後で言うんだよな。

476 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/21(月) 11:37:45 ]
なんでそんな完璧にこだわるんだろ。
質問者のヒントになればいいじゃん。

477 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/21(月) 16:16:07 ]
低能同士、仲良く!

478 名前:464 mailto:sage [2007/05/22(火) 00:44:46 ]
すみません、御礼が遅れました。
という訳で >465 >468 >469 全て参考になりました。特にIFS=〜は初めて
知ったので成程と関心しました。
この場をお借りして厚く御礼申し上げます。



479 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/22(火) 00:59:36 ]
xargsは?

grep jpg list.txt | xargs -i mv {} /work/pussy

480 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/22(火) 12:09:35 ]
>>479
空白が含まれているとダメだろ。

481 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/22(火) 14:28:33 ]
grep jpg list.txt | tr '\n' '\0' | xargs -0 -i mv {} /work/pussy

482 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/22(火) 14:39:38 ]
>>481
ファイル名に改行が含まれてるとだめだろw

483 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/22(火) 19:06:13 ]
sudo find / -name '*pussy*' -exec rm -rf \{\} \;

484 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/22(火) 19:18:18 ]
デリミタが改行なリストなんだから要素に改行は含められないんじゃ?
改行入りファイル名を考慮するならリストは改行文字以外で区切るべき
だと思う.

485 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/22(火) 19:20:20 ]
ファイル名に改行を入れるアホなんてほっとけ(w

486 名前:ウサチャソ mailto:sage [2007/05/22(火) 21:00:22 ]
試しに作ってみた。

% touch aaaa^Maaaa
% ls -lF
aaaa*--r-- 1 ウサチャソ users 0 5月 22 20:58 aaaa

表示バグってるよ…

487 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/22(火) 21:19:38 ]
改行と復改の区別ができないお子様は犬... 以下略

488 名前:ウサチャソ mailto:sage [2007/05/22(火) 21:37:01 ]
>>487
改行のみ入れるのは面倒臭かったんだスマソ



489 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/22(火) 21:57:27 ]
>>488
$ touch 'aaaa
aaaa'

だろ。

$ > 'aaaa
aaaa'

でも可。

490 名前:ウサチャソ mailto:sage [2007/05/22(火) 22:14:31 ]
CTRL+Vが楽だったんで、つい…

ちなみに、>>489 でも >>486 でもCygwinだと同じ表示。

-rw-r--r-- 1 ウサチャソ なし 0 May 22 22:10 aaaa?aaaa

今日始めて知った。

491 名前:ウサチャソ mailto:sage [2007/05/22(火) 22:15:58 ]
あ゛っごめん、Cygwinは「--show-control-chars」が必要だった…。
スレ違いなんでもう消えます、スマソ

492 名前:名無しさん@お腹いっぱい。 [2007/05/24(木) 20:33:53 ]
質問します。

lsnrctl >>_EOF_
set log_file listener.tmp
RET=$?
if [ $RET -ne 0 ];then
logger -t loglog -p local1.notice "切り替えに失敗しました"
exit 1
fi
exit
_EOF_

という事をしたいのですがどうしてもsetコマンド以降エラーに
なってしまいます。
対処法を教えていただけないでしょうか?

493 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/24(木) 20:51:21 ]
逆だ。
lsnrctl <<_EOF_


494 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/24(木) 20:55:16 ]
あと、ヒアドキュメントの部分は、LSNRCTLのコマンドしか受け付けないぞ。


495 名前:名無しさん@お腹いっぱい。 [2007/05/24(木) 21:23:10 ]
すいません逆に書いてました。
やはりLSNRCTLコマンドしか受け付けないですか・・・
う〜ん、どうしてもLSNCTLの中でシェルスクリプトの処理の記述を
したかったのですが無理そうですね。
ありがとうございました。

496 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/28(月) 07:13:03 ]
質問。
ファイルの最終から20行を削除したい。
どうしたらいいでしょうか?

497 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/28(月) 07:46:41 ]
>>496
wc で数えて、head で切り出すぐらいしか考え付かない

498 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/28(月) 08:09:27 ]
awk



499 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/28(月) 08:33:29 ]
tac なんてLinuxでもないかぎり標準装備じゃない罠

cat file | tac | sed '1,20d' | tac

500 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/28(月) 12:43:49 ]
無意味なcat出た

501 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/28(月) 14:05:40 ]
tacが使えなければ sed '1!G;h;$!d' すればいいじゃない。

502 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/28(月) 15:55:05 ]
cat!出た!cat出た!得意技!cat出た!cat!これ!cat出たよ〜〜!

503 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/28(月) 16:13:35 ]
>>502
楽しそうだな

504 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/28(月) 18:27:43 ]
俺は限界だと思った

505 名前:名無しさん@お腹いっぱい。 [2007/05/29(火) 00:14:45 ]
tail つかって最後から20行みれ
で、>>499しる

506 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 00:58:13 ]
基本的にサブシェルはshを新たに起動するよりは動作が軽いですよね?

507 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 01:26:05 ]
>>498
awkには入力ファイルの行数を保持する組み込み変数はないんじゃね?
だから、結局wcでカウントしないとダメだったり。


508 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 01:47:08 ]
は?

awk '{a[NR]=$0}NR>20{print a[NR-20]}'




509 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 02:37:14 ]
>>508 短くていいが、でかいファイル通すとメモリが…

510 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 02:54:34 ]
無理して一行でやるより、行舐めの回数が少ない方が好きだな。


511 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 02:57:15 ]
>>510 ワンパスだし。消費メモリを考えればいいと思うが。

512 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 03:15:32 ]
>>499
は論外。


513 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 09:33:18 ]
awk '{if (FNR>20) print a[FNR%20]; a[FNR%20]=$0}'

514 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 10:12:43 ]
20行分だけバッファして遅延して出力させて
ファイル末尾に到達したら終了させるとか。

515 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 19:07:30 ]
>>514
書いてみよう

516 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 19:20:43 ]
>>514
>>513 がやろうとした事(間違ってるがw)

517 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 19:44:45 ]
>>496
こういう場合、ed を non-interactive に使うのがいい。

最後20行ということは、$-19から $までだから、

echo '$-19,$d
w outfile
q' | ed infile

↑で桶。

518 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/29(火) 21:46:07 ]
sed -e '$d'|sed -e '$d'|sed -e '$d'|sed -e '$d'|sed -e '$d'|sed -e '$d'|sed -e '$d'|sed -e '$d'|sed -e '$d'|sed -e '$d'|sed -e '$d'|sed -e '$d'|sed -e '$d'|sed -e '$d'|sed -e '$d'|sed -e '$d'|sed -e '$d'|sed -e '$d'|sed -e '$d'|sed -e '$d'



519 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/30(水) 08:58:50 ]
>>516 間違ってる?

520 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/30(水) 19:17:11 ]
質問なんですが・・

#!/bin/sh -

tmpfile=/tmp/program.$$
cat "$1" | tr ' ' '\n' > tmpfile

while read word
do
grep ${word} "$2" | いろいろと処理・・・
done < tmpfile

てな感じのスクリプトなのですが、
第一引数のファイル中に、例えば -i と言うような語があると
grep がオプションと解釈するのか何なのか、直後に while ループが
終了してしまいます。
'${'"$word"'}' だと grep には ${word} として渡されてしまいます。

何とかシェルを騙して grep に '-i' として渡す方法は無いでしょうか?

(渡す前に条件判断して先頭文字が - なら sed などで先頭に \ を
付加すると言うのも行けそうな気はしますが、出来れば余計なIFとか
変数とか無しで行きたいものです)

521 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/30(水) 19:35:35 ]
grep -e
grep -

522 名前:520 mailto:sage [2007/05/30(水) 19:53:07 ]
>>521

ありがとう。
シェルを騙さなくても grep の方で用意されていましたか、
良く考えりゃ当然ですね。

523 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/30(水) 21:22:55 ]
オプション -- で、それ以降はオプションとは解釈しないってのは
結構な数のコマンドで使える。

524 名前:520 mailto:sage [2007/05/30(水) 23:07:09 ]
>>523

ですね。

これまで -- なんて、はぁ?って感じでしたけど、
実に有用性が高いですね。
勉強になります。

525 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/02(土) 11:43:37 ]
質問
インターネットに接続できるか試すコマンドってありますか?

やりたいこと
インターネットに接続できたら echo "できます"
インターネットに接続できなかったら echo "できません"
としたいです。

526 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/02(土) 11:59:13 ]
インターネットとLANの区別をしなくていいのかな?

527 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/02(土) 12:05:24 ]
多分、この程度の精度でOKなんだろ。

if ping -c 1 www.yahoo.com >/dev/null 2>&1; then
echo "出来ます"
else
echo "出来ません"
fi

528 名前:525 mailto:sage [2007/06/03(日) 03:05:39 ]
>>562>>527
ありがとうございます
できればヤフーなどの特定のサイトに依存せず
確実にインターネットに繋がるかどうか判断したいです。
もし無理なら特定のサイトでも構いませんが
こういう場合通例としてyahoo.comを使うのが適切でしょうか?




529 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/03(日) 07:09:14 ]
接続できていると分かったら、どこかと通信するんでしょ?
その通信相手にすればいいよ。

530 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/03(日) 07:21:06 ]
>>528
何が目的なん?

531 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/03(日) 08:59:25 ]
その通信相手がICMPブロックしてるかも知れないから、ブロックしてない
www.yahoo.comとかwww.google.comとか使えばいい。

532 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/03(日) 11:01:00 ]
>>528
君のほうから、どことつながったらインターネットに繋がっていると言えるかの
判断基準を出してくれないと先に進めないと思うよ。

533 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/03(日) 12:04:41 ]
相手もそうだがプロトコルもな。
ファイアウォールの具合でICMP通らないかもしらんし。

534 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/03(日) 23:19:33 ]
まぁ、スレ違いだな。

535 名前:名無しさん@お腹いっぱい。 [2007/06/04(月) 07:59:35 ]
>>527
>if ping -c 1 www.yahoo.com >/dev/null 2>&1; then

関係ないが、この 2>&1
エラー対策でつか?

536 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/04(月) 14:12:29 ]
遅レスだが、

tail -r ファイル名| tail +20 | tail -r

でもいけた(tailばっかりでカッコ悪いか)

537 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/04(月) 21:46:12 ]
>>535
終了ステータスだけとれりゃいいので、エラーメッセージとか捨てる。

538 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/04(月) 21:50:18 ]
それを捨てるなんて、とんでもない!



539 名前:ウサチャソ mailto:sage [2007/06/04(月) 23:49:23 ]
きのうはおたのしみでしたね。
ウホッ

540 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/04(月) 23:51:56 ]
*「おお しんでしまうとは なにごとだ!」
*「アッー!」

541 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/05(火) 06:33:28 ]
vmstat 1 の結果の左側に`date +%H:%M:%S`(時分秒)を付けて流して表示させようとしています。

以前、gawkでstrftimeを利用して同じ事をしたのですが、今回使ってるサーバのawkは
gawkでない為に別の方法が必要です。

どうもウマイ方法が思いつきませんで・・・ご教示お願いします。


542 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/05(火) 08:54:12 ]
Perlあるなら
vmstat 1 | perl -MPOSIX -pe 'BEGIN{$|=1} print strftime q{%H:%M:%S }, localtime'

543 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/05(火) 08:59:20 ]
これは重そうだけど
vmstat 1 | while read line; do echo `date +%H:%M:%S` $line; done

544 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/05(火) 20:13:14 ]
>>539-540
DQ I ?

545 名前:541 mailto:sage [2007/06/05(火) 22:31:39 ]
>>542
HP-UX10.20だったのですがperlが入っていませんでした(汗
でも、これを機会にperlもちょっとづつ勉強したいと思います。どもでした。

>>543
readがそんな使い方できるとは知りませんでした。
おかげさまでばっちり動きました。ありがとうございます。


546 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/05(火) 23:39:38 ]
bash.infoの説明だと
echo hoge | read v

echo $V →hoge
になるように読める
で、できないってことはわかったんだけど結局readはどう使うんですか
なんでwhile中だとうまく動くんでしょう

547 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/06(水) 00:17:57 ]
サブシェルが起動するから。
read で代入する変数はサブシェルのものだから、親シェルに戻ると忘れる。
while でなくても、下のような書き方をすれば {...} の中にかぎり有効。

echo hoge | {
read v
echo $v
}

あと、ksh はふつーに可能だったような記憶がうっすらとあるが自信ない。


548 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/06(水) 15:14:41 ]
質問
シェルスクリプトを、windowsでCD-Rに焼き、linuxで実行すると
改行がコマンドとして認識され、command not foundとなってしまいます。
普通に改行を改行として認識させることはできないのでしょうか?



549 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/06(水) 16:33:41 ]
よくわからんが改行コードの問題? 改行コードをLFで保存できるテキストエディタ使えよ

550 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/06(水) 16:52:46 ]
>>549
ありがとうとざいます
LFで保存したところ大丈夫でした。
ただし1行目だけはなぜかcommand not foundとなってしまう。。

551 名前:名無しさん@お腹いっぱい。 [2007/06/06(水) 20:15:14 ]
log=20070101.log

$logを 2007-01-01
という風に、[西暦]-[月]-[日]な形にしたいのですが、どすればよいでしょうか?
どなたか、お力をお貸し下さいませ。

.log と取って、4桁、2桁、2桁ごとに「-」を挟む。というのはわかるのですが
方法や何のコマンド使ってよいものやら見当もつきません。お願いします!

552 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/06(水) 20:26:09 ]
echo $log | sed 's/\(....\)\(..\)\(..\).*/\1-\2-\3/'

553 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/06(水) 20:30:18 ]
>>552 ありがとうございました!出来ました!
sedは使えるつもりでいたんですが、まだまだの若輩者でしたorz
こんなに早く答えて頂いて本当に助かりました。

554 名前:名無しさん@お腹いっぱい。 [2007/06/06(水) 23:42:52 ]
じぇっとすとりーーーむ〜

555 名前:名無しさん@お腹いっぱい。 [2007/06/06(水) 23:42:59 ]
シェルが何かは分かったのですが、シェルスクリプトが良く分かりません…

専門用語を交えないで言うと、どういったものなのでしょうか?

556 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/06(水) 23:44:51 ]
シェルが何かどうわかったか、専門用語を交えずに説明してからだ

557 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/07(木) 00:11:41 ]
レストランのメニューがシェル。コース料理がシェルスクリプト。
大分違うな…

558 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/07(木) 00:35:32 ]
e-words.jp/w/E382B7E382A7E383ABE382B9E382AFE383AAE38397E38388.html

専門的な概念なのに専門用語使うなというのは無理な話。



559 名前:名無しさん@お腹いっぱい。 [2007/06/07(木) 02:08:21 ]
>>557

その説明で開眼しました!!

今ならどんなプログラムも書けそうです!!
(^ω^)

560 名前:名無しさん@お腹いっぱい。 [2007/06/08(金) 00:50:30 ]
if [ -e foo ] ;
then
echo "foo exists."
else
echo "foo does not exist."
fi
これを Solaris 8の bash, cygwinの sh, bashで実行するとOK。
でも Solaris 8の shで実行した時だけ
test: argument expected
と出てしまいます。どうにも分かりません。助けて下さい…



561 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 03:13:50 ]
Solarisなどの旧式shのtestコマンドには-eというものはない。
これは外部コマンドのtestも同様。


562 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 06:27:46 ]
>>561
ダウト。
Solarisの外部コマンド版のtestの実体はkshスクリプトだから、
Solarisでも外部コマンド版のtestには -eオプションがある。

ただし、純正Bourneには -eがないので、使わないこと推奨なのは同意。
[ -f foo ] あたりで代用だな。

563 名前:名無しさん@お腹いっぱい。 [2007/06/08(金) 08:29:58 ]
grepコマンドで検索した行の前後三行を出力するコマンドってないすか?

たとえば、以下のようなファイルがある。
----------------------------
aaa
bbb
ccc
ddd
eee
fff
ggg
----------------------------

grepコマンドをつかって、
$ grep ddd -a 333
とすると
bbb
ccc
ddd
eee
fff
と表示されるようなやつよ。

564 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 08:45:56 ]
>>563
-A とか -B とかない?

565 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 10:35:48 ]
>>563
普通にgrepだけで行けるぞ
grep -A 3 -B 3 'ddd' filename

566 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 10:44:10 ]
普通は-Aとか-Bなんてない。


567 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 11:01:46 ]
何が「普通」かなんて人それぞれでしょ。
-A がある grep とない grep がある。
それだけ。

568 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 11:02:54 ]
目的達成できるなら、それでいいじゃん



569 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 11:03:45 ]
grep -n して
sedで : より前だけ取り出して
awkにくべて前後の必要な行番号を全部計算して
sort -nuして
sedでsedのコマンドに成形しなおして
sedで抽出。
てゆうか、grepにこだわらずにawk1個の方がめちゃ楽そう。


570 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 11:04:44 ]
>>569
awkだけだとどうなるの?

571 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 11:29:37 ]
FreeBSDは変にsed使うよりawk1本に絞った方が軽い。

572 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 11:43:53 ]
複数行のテキスト整形には弱い
普通は、prelとかrubyを使う
まあ、perlとかruby使えないから聞いてるんだろうけど

573 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 11:52:15 ]
>>572
sedやgrepでどうしようかななんて考えてる時間が無駄だよな
perl覚えちゃたほうがいいのにね、これを機会に

574 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 11:55:16 ]
これを機会にGNU grep入れちゃえ。

575 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 12:00:44 ]
パタン行より前の行も表示しないといけないのでawk一本だとちょっと手間でしょ。
perlやrubyを使ってもそれは同じじゃないかな。
sed+awkなら
sed -e "$(awk '/pattern/{for (i=-2;i<=2;i++)if(i+NR>=0)print (i+NR) "{p;d;}"}' file|sort -nu)"';d' file

zshでしか試してないのでクォート回りはshだと違うかも知れんが、
だいたいこんな感じで。

576 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 12:19:38 ]
GNUは偉大だな、改めて思った

577 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 12:26:01 ]
当たり前じゃね?
だってGNU拡張は、ユーザが便利だと思うものを実装して
拡張していったんだから

きっと、>>563みたいなことを、数年前にも同じといってる人が
現れてんだよw
それで拡張されてる

578 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 12:40:49 ]
GNU sed awk grep を使いましょうね



579 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 15:54:55 ]
俺はgawk派

580 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 16:04:21 ]
ガウォーク

581 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 16:14:46 ]
GNU is Not UNIX
の意味がやっとわかったようでなにより

582 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 16:21:47 ]
んでけっきょく >>563 はどうしたの?

583 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 16:25:28 ]
GNU教に入信する準備をしてます

584 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 16:29:28 ]
しこしこ、書いてんじゃね

585 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 17:38:00 ]
mac でターミナルで操作しているのですが、safariでgoogleなどのページで
キーワードを打ち込んで検索させたりはできないものなんでしょうか?
初心者なんで仕組みなどわかりませんので構造上できないものなら教えてください

586 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 17:49:58 ]
>>585
pc11.2ch.net/mac/

587 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 21:02:22 ]
シェルスクリプトとGUIアプリの連携ってか?

588 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 22:41:28 ]
質問です!
---hoge.txt---
aaa
bbb
ccc

これを

---hoge.txt---
aaa
ccc

こうしたい。

sed -i "s/bbb//g" hoge.txtだと

---hoge.txt
aaa

ccc

こうなってしまう・・・



589 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 22:49:06 ]
sed -i -e '/bbb/d'

590 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 23:03:06 ]
>>589
ありがとうございます!


591 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/08(金) 23:37:42 ]
GNU sedは正規表現のエスケープまわりが腐ってるんだよなあ
それに、わざわざBourne Shellに縛ったスレなのに、GNU拡張に依存するのもどうかと思う
ポータビリティも勘案すると、perl使った方がいい

592 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/09(土) 10:18:52 ]
GNU grepの-oは便利

593 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/09(土) 11:53:54 ]
>>592
モレも-Po がマジ便利だと思う。


594 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/09(土) 12:23:49 ]
それを言ったらshよりzshのが便利だ

595 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/09(土) 12:49:24 ]
そうだよ

596 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/09(土) 14:42:53 ]
FreeBSDよりWIndowsのが便利だ

597 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/09(土) 14:54:08 ]
当たり前だろ

598 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/09(土) 15:01:51 ]
perlの書法がもっと自由度低かったら決定版たったのだが。
お行儀悪く書けてしまうのが悩みの種



599 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/10(日) 01:08:21 ]
お行儀良く書きたいならRubyなりPythonなりへ行けば良い
お行儀悪く書いても心が痛まないのがPerlの長所

600 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/10(日) 01:10:39 ]
use strict; するんだからそれほどひどいコードにはならないような

601 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/10(日) 22:37:24 ]
どーせワンライナーか数行でやれるようなのしかPerlで書かないから
どうでもいい

602 名前:名無しさん@お腹いっぱい。 [2007/06/15(金) 02:31:42 ]
cshを勉強し始めたものです。
研究室で使うためです。
C言語もほとんど知らないので、取っ付きにくく、苦労してます。

今よく分からないのは、シェル変数と環境変数です。
普通に話に出てくるのですが、変数だとは理解してますが、違いが分かりません…

どなたか教えて頂けませんか?


603 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/15(金) 02:41:57 ]
シェル変数はシェルが使う
環境変数は(主に)呼び出されたコマンドが使う

それはいいとして、なんでcshかちゃんと確認しろ
csh使う必然性がなければ、shにしとけ


604 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/15(金) 03:12:03 ]
環境変数は子プロセスに引き継がれる。
シェル変数はそのシェルのみが使い、
子プロセスに引き継がれない。

605 名前:602 [2007/06/16(土) 01:09:53 ]
レス有り難うございます。

なぜcshなのかと言うと、 今研究室で使われてるのがcshだとしか…

Cで書かれたソースプログラムをcshに渡して、
結果を他のプログラムに渡して……
って感じらしいです。

まだ学部なので、難しいプログラムは書けず、
既成のプログラムの値を変えて走らせたりするようです。

最近の課題が、あるcshの中身を渡され、理解してくるものでしたが、
プログラムの知識が無い自分にはさっぱりというわけです…



606 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 01:58:47 ]
そんなに何種類もcshがあるのか?

607 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 03:31:44 ]
cshで書かれたシェルスクリプトってとこじゃないか?


608 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 15:17:35 ]
いや、cshの中身だぞ?



609 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 15:47:46 ]
とりあえず>>605よ、
cshの中身というのはcshスクリプトという意味か?


610 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 16:11:27 ]
こらこら、cshの話はもう終り。禁止。

611 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 16:53:10 ]
GNU grepの話をしてもいいなら、cshも良くないか

612 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 18:01:05 ]
良くない。

613 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 18:02:26 ]
シェルスクリプトのスレでシェルのソースコードの話かぁ……

614 名前:名無しさん@お腹いっぱい。 [2007/06/16(土) 19:35:05 ]
質問です。

ファイルの内容が同じものをリストアップする目的で、
対象ファイルのmd5sumを計算したいと考えています。
ただし、ファイルが大きいと時間がかかってしまうので、まずはファイル頭の
512バイトだけでmd5sumしたいです。以下のようなものを書いたのですが、
ファイル数が多い(1000とか)とプロセスの起動がボトルネックになってしまう
ようで、遅いです。

while read -r filename
do
dd if="${filename}" ibs=512 count=1 2> /dev/null | md5sum >> output
done < ${tempfile_prefix}2_filesize_onajiyatu

md5sumに先頭から512バイトだけで計算しろと指示することはできますか?
もしくは何かいい案ありますでしょうか?



615 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 19:45:20 ]
えろ画の整理スクリプトかよ

616 名前:名無しさん@お腹いっぱい。 [2007/06/16(土) 19:49:09 ]
違います。
エロ動画です。
だからでかいのです。

617 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 19:52:32 ]
>>614
プロセス起動がネックならperlとかpythonとかrubyとか好きなのでやれ。

618 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 19:53:08 ]
>>614
perl を使う



619 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 20:02:27 ]
まずはファイルサイズで比較すればいいのに

620 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 20:11:47 ]
粗く分けるのにmd5なんか使わんでも。
>>619 の通りファイルサイズが手軽だし、もし同じサイズで内容が違うものが
沢山ならファイル中の適当なところをhexdumpでもいいんじゃないの。

621 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 20:37:43 ]
横から済まぬが

>>619,620

>> ${tempfile_prefix}2_filesize_onajiyatu

って書いてあるから、そもそも同じサイズ限定ではないのか?

622 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/16(土) 20:40:36 ]
同じファイルサイズのものだけでも1000ファイルもあるって、
結構集めまくったね、絵炉動画をw

623 名前:名無しさん@お腹いっぱい。 [2007/06/16(土) 21:03:28 ]

>617,618
perlか・・・ついに手を出すときが来たか

>619,621
失礼しました。サイズ比較をあらかじめこんなのでやってます。
ls -l "$@" | sed 's/ \+/ /g' | cut -d ' ' -f 5,8 > ${tempfile_prefix}1_filesize_all
awk '{ if(a[$1,0]==0){a[$1,0]=1;a[$1,1]=$0;} else{if(a[$1,0]==1){print a[$1,1];} a[$1,0]++;print $0;} }' \
${tempfile_prefix}1_filesize_all > ${tempfile_prefix}2_filesize_onajiyatu

>620
ためしに512byteのgomi.txtを作ってみて、以下試しました。
%time (for i in `seq 1 1000`; do cat gomi.txt > /dev/null 2>&1 ; done;)
-> 1.486sec
%time (for i in `seq 1 1000`; do md5sum gomi.txt > /dev/null 2>&1 ; done;)
-> 1.510sec
これくらいのサイズだと処理内容はあまり影響なさそうです。
md5sumの方が比較しやすかったのです。

>622
いやいや、得ろ動画とか1000個とか例えばの話ですよw


624 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 00:32:06 ]
>>614
まずは、ファイルサイズではじいたら?

625 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 00:34:24 ]
すまん。@bitwarpなもんで、更新漏れだった。
忘れてくれ

626 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 03:14:21 ]
xargsでもつかえば?

627 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 04:00:08 ]
気が向いたんでやってみた

$ time (for f in tmp/*; do dd if=$f bs=512 count=1 2>/dev/null | md5sum; done)
065d30715dcffa21596406373a9124ac -
...中略...
ed4cf7b8f209f9ce630b5e76219357ae -
(; for f in Desktop/*(.); do; dd if=$f bs=512 count=1 2> /dev/null | md5sum; ) 0.09s user 0.38s system 49% cpu 0.960 total

$ time perl -M'Digest::MD5(md5_hex)' -e 'for (@ARGV) { open F,"<$_"; read F,$a,512; print md5_hex($a),"¥n" }' tmp/*
065d30715dcffa21596406373a9124ac
...中略...
ed4cf7b8f209f9ce630b5e76219357ae
perl -M'Digest::MD5(md5_hex)' -e Desktop/*(.) 0.02s user 0.02s system 18% cpu 0.193 total


628 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 17:51:50 ]
xargs使えって



629 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 20:19:20 ]
絵炉動画ファイルは、ファイル名にスペースとか特殊記号とか入りまくりである
ことが多いため、xargsは全く持って不適当。

630 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 21:13:28 ]
それならfor文やreadでも難しくならないか・・
まxargsのほうがもっと不適当なのだろうが


631 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 21:16:22 ]
>>629
man xargs

632 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 21:24:09 ]
>>631 は何がしたいんだろうか? まったく外してるわけだが、、

633 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 21:26:16 ]
>>631
$ ssh solarishost man xargs

634 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 21:33:38 ]
ファイル名の問題以前に、個々のファイルごとに頭の512バイトを切り出したいわけ
だから、xargs使ったところでプロセス起動数は節約できない。
よって、>>626 >>628 は全く的はずれ。

635 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 21:34:10 ]
>>632
はずしているのはお前の方。

find 〜 -print0 | xargs --null

636 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 21:47:33 ]
>>635
はずしているのはお前の方。

-print0 や xargs --null は、一般には使えない。(たとえばSolaris)

あと、>>634 が指摘してるように、今回の件は xargsでは解決しない。

よって、そういう意味でも外しているのは >>635 の方。

637 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 22:10:53 ]
-print0で喜んでるのは石器人。
現代人はふつー find ... -exec ... +

638 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 22:21:02 ]
>>632 から某頭の悪い粘着君臭がする。




639 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 23:03:19 ]
て言うか、プロセス起動数が云々と言うなら md5sum を改造するなり、
ファイル名の取得からハッシュの計算までやるようなアプリ作ればい
いじゃん。

640 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/17(日) 23:14:55 ]
>>617-618で既に正答が出てるの何を今更…

641 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/18(月) 00:13:31 ]
答えそのものも>627に出てるわけだが...

642 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/18(月) 00:36:28 ]
#find ... -exec ... +
横レスだが知らなかった
ってか手元のmanにはない

643 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/18(月) 03:34:11 ]
最後の「+」ってなに?

644 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/18(月) 08:19:20 ]
xargsは同じプロセスを連続起動するから
工夫されていると聞いたことがある。
これは事実?


645 名前:名無しさん@お腹いっぱい。 [2007/06/18(月) 15:14:11 ]
基礎的な質問ですいません。

bashで、シェル変数に値を突っ込み -zで存在を確認する手法ですが、

if [ -z $test ] ; then
 echo "val exist"
else
 echo "val isn't exist"


質問
1.[ -z $test ] と書くのはよろしくない?
2.[ -e $test ] とすると、シェル変数が存在しない時に真、
  シェル変数が存在する時に偽となるのはなぜ?


結構、このパターンで利用してたのですが、2.の動作を確認すると、
なぜだか逆になっているような。じゃ、-zもよろしくないのかなぁ、と

ところで、みなさんは、環境変数やシェル変数の存在確認をどうやってますか?
宜しくお願いします。


646 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/18(月) 15:23:43 ]
>>645
まず、[ ] の中ではシェル変数は基本的にダブルクォートを付けること。

[ -z "$test" ] とする。この場合、$testがセットされていれば偽になる。
これだと真偽が逆になってわかりにくいので、
[ -n "$test" ] または -n は省略できるので [ "$test" ] とする。

[ -e $test ] は、$testがセットされていない時、[ -e ] となってしまい、
これは、"-e" という文字列がサイズゼロかどうか(この場合は2バイト)という
判定がなされるため、$testがセットされていないと真になる。
一方、$testがセットされていると、今度は -e は -eオプションとして解釈され、
$testの中身がファイル名とみなされるため、そんなファイルがなければ偽になる。

更に言うと、-e は Bourne shでは使えないため非推奨。

647 名前:名無しさん@お腹いっぱい。 [2007/06/18(月) 15:39:39 ]
>>646
ありがとうございます。
うーーん、なるほど。1行目でよく分かりました。

648 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/18(月) 16:11:12 ]
丁寧に説明してもらった理由を理解したのかしてないのかよくわからん回答だな



649 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/18(月) 16:12:07 ]
このあたりものこともあって zsh で手抜きスクリプト書くことが多くなった

650 名前:名無しさん@お腹いっぱい。 [2007/06/18(月) 16:24:47 ]
>>648
舌足らずですみません。
1行目で自分の間違いを気付き、
詳しい説明をしていただいたので助かりました、と書きたかったところでした。

-eオプションの非推奨コメントは特に助かります。

651 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/18(月) 21:09:56 ]
      ______
    /          )))
   /   /// /―――-ミ
   / 彡彡 // /      ヽ))
   / 彡彡 iiiiiiiiiiiiiii  iiiiiiiiii|
   / 彡彡 < ・ > 、<・ >l
  /    |       ヽ   〉
  /  ( | |      __)  |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  /   | ≡  /, ―――  |ゝ < 馬鹿共にshellを与えるな!
  /   |   |  L ___」 l ヾ  \_________
_ミ  l   ______ノ ゞ_
  |  l ヾ    ー   / |  l
  |  |   \ー    ‐/  |  |


652 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 08:10:33 ]
>>646

>>更に言うと、-e は Bourne shでは使えないため非推奨。

?????



653 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 08:30:50 ]
>>652
教えて欲しいんなら「???」じゃなくて、ちゃんと日本語で書け。初心者君。

654 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 09:19:43 ]
ところで-eがないshが標準で載ってるOSってどれ?

655 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 09:36:14 ]
Solarisとか。SCOとか。Tru64とか。

656 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 11:36:15 ]
>>655
今では使われていないOSばかりですね。じゃあ、-e使ってもいいですねw

657 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 11:45:45 ]
つっ、釣られないぞ

658 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 13:41:51 ]
>>653
では日本語で書かせていただきます。
私が学習に使用している O'REILLY の「詳解シェルスクリプト」によりますと、
/bin/sh 組込の test コマンドに於ける -e 表現は標準的なものとして記述され
POSIX で定義している旨明記されております。また更に今回の議題の発端である
>>645 質問子の環境と共通する bash 等での独自の拡張に付いて記述した件では、
条件判定構文中の -a 演算子について(非推奨です。 -e を使いましょう)
とまで明記されているものを、使用者の環境の多用性や使用目的の別など勘案せず
一言の下に「非推奨」と断定できる根拠を教えてください。 お願いします。



659 名前:646じゃないけど mailto:sage [2007/06/19(火) 13:47:32 ]
>>658
「Bourne shでは使えないため」って書いてあるじゃん。
それが重要かどうかは各自が判断すればいいこと。

660 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 13:51:15 ]
>>658
POSIXは理想論ばかりで、現実に即してないんだよ。
いくらPOSIXでどうこう言っても、実際に動くかどうかがすべて。
test -e については、Solarisの/bin/shで動かないんだから、
OS共通のシェルスクリプトでは非推奨であるのは当然。

あと、別件で、-e の意味で -aを使ってはいけない(非推奨)なのはその通りだよ。
-a は別に ANDの演算子の意味があって、そちらの意味で使うべきだからね。

わかったら、今後は -e を使うなよ。今まで書いたシェルスクリプトで
-e を使ってるのがあったら、気づき次第直しとけよ。

661 名前:658 mailto:sage [2007/06/19(火) 14:12:59 ]
予想通りの回答をどうもありがとうございました。

>>わかったら、今後は -e を使うなよ。今まで書いたシェルスクリプトで
-e を使ってるのがあったら、気づき次第直しとけよ。

ご心配有り難うございます。
そもそも機能が曖昧過ぎて過ぎて使おうと思ったことも御座いませんw

662 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 14:15:20 ]
予想してたなら聞く必要ないだろ……。
むだに波風立てんなよ。

663 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 22:13:27 ]
シェルスクリプトの互換性過敏症な奴っていじると面白いんだよ

664 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 23:22:07 ]
ここにもユトラーか・・・・

665 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 23:28:40 ]
>>663
export LANG=C とか書いてるのを見ると反応してしまうのは互換性過敏症ですか?

666 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/19(火) 23:56:18 ]
いや寧ろ互換性を指摘できる人がいて有難い


667 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/20(水) 00:19:14 ]
そんなこといって年寄りほめたらわらわらわいてくるぞ。
SunOS 3.5世代の俺なんかまだまだ甘ちゃんだ。

668 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/20(水) 05:31:28 ]
沸いてきてくれ
それぞUNIXの面白さの真髄だわ



669 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/20(水) 09:12:11 ]
仕事では一緒になりたくねえけどなw


670 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/20(水) 21:45:49 ]
ようするに、 POSIX が理想論で現実に即していないのは当然の話で、
現実がバラバラだから標準化が必要という理念が生まれたわけですわな。

で、各プラットフォームでそれぞれ POSIX に準拠する姿勢を示していながら
どうしても譲れない仕様への拘りがあるから未だに移植性の問題が取沙汰される。

そこの処の理を語らずに、只単に○○では使える or 使えないという議論に
終始するというのは如何にも思慮が浅いと言わざるを得まい。

671 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/20(水) 22:08:39 ]
実社会ではそういうもんだ

672 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/20(水) 23:20:26 ]
携帯電話みたいなものだね
いまだに携帯電話つかわないもうろくジジイとかいるかなw

673 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/21(木) 01:34:39 ]
じじいじゃないけど使ってないよ。

674 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/21(木) 01:36:56 ]
うわw

675 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/21(木) 01:38:49 ]
携帯電話使わない仕事というと、医者とかパイロットくらいか

676 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/21(木) 01:53:54 ]
というか、どこが「携帯電話みたいなもの」なのかさっぱりわからん。

677 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/21(木) 03:01:35 ]
痴呆がはじまった?

678 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/21(木) 23:19:43 ]
>>670
こだわりなんかないだろ、準拠するのが面倒なだけだよ。

準拠したからって売れ行きがたいして変わるわけでもないし。

>>675
院内では携帯は使わないけど緊急呼び出しが頻繁にあるような
医者もいるからなぁ。

パイロットは仕事中は使わないけど、そういう意味なら電車の
運転手なんかも同じだな。

て言うか、仕事中とか会社の中に限定すると携帯持たない/持て
ない奴はそれなりにいるし。



679 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/22(金) 00:04:29 ]
ケータイでも3G(高周波のやつ)は大丈夫らしいけど。


680 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/22(金) 09:16:46 ]
使えない奴にかぎって、くだらねえことに拘ってたりする

681 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/22(金) 20:12:44 ]
そろそろUNIXの話にでも戻す?

682 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/22(金) 20:59:20 ]
よしなに

683 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/22(金) 23:11:19 ]
>>678
>>準拠したからって売れ行きがたいして変わるわけでもないし。

売行きが変わらないからって騒ぐこともないでしょ。
拘りがなければ準拠する方がはるかに楽なのにねぇ

あくまで /bin/sh 標準なのは基本であって、実勢はケースバイケースで、
linux じゃ bash 標準だろうし、 solaris だって適宜 ksh なり使うだろうし、
パーソナルユースや $HOME/bin 限定使用とか、管理者でも同一プラット
ホームだけでの運用が多く、移植性のプライオリティーがさほど高くない
現況において、やいのやいのいう奴は要するに「言いたいだけ」ちゃうんかと。

684 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/22(金) 23:53:48 ]
> 拘りがなければ準拠する方がはるかに楽なのにねぇ

何が楽なのか詳しく書いて欲しいんだが。

商用ソフトってちょっと変えると、検証がスゲー大変なことぐらいは知ってるよな?

685 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 00:08:17 ]
楽しいもの見つけてしまった。

sed.sourceforge.net/sed1line.txt
www.student.northpark.edu/pemente/awk/awk1line.txt

組込みで使っているLinuxにgrepが入ってなくて
sedでシミュレートしたスクリプト書いたんだけど、
それ以上のことがいろいろできそうな感じなり。


おまけ

www.fepus.net/ruby1line.txt


686 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 00:11:08 ]
>>683
Solarisは古いshとkshを選択できるからいいけど、
HP-UXとかAIXは/bin/shはkshそのもなんで選択の余地はない。

シェルごときで移植性とか言ってるアホが多いっていうのは同意。


687 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 03:31:47 ]
視野が狭いのって、幸せでいいよね。

688 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 08:31:29 ]
そう?いまどきシェルの互換性なんか気にしてる奴って幸せそうに見えないが。



689 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 09:38:27 ]
シェルはさまざまなコマンドと組み合わせて使うしな。
コマンドにも完全な互換性がない以上、シェルスクリプトの互換性や移植性を気にし過ぎるのはアホ。
ささっと書いてテストして動きが変だったら、そのとき直せばいい。
シェルってそういうライトな使い方をするためのものでしょ。


690 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 10:04:55 ]
互換性のことも知らずに、暢気に
[ -e file ] とか、export HOGE=hoge とか書いて、
「動いたからOK」とか言ってる香具師の方がアフォに見えるけどな。

691 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 10:28:19 ]
「さくっと直せばいいじゃん」って言ってる奴はだいたい直したことがない奴だし。

692 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 10:32:04 ]
そもそも、直す必要なんてない、動くから

693 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 11:05:10 ]
>>692
>>690

694 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 11:08:34 ]
何が問題か、具体的に

695 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 12:54:51 ]
問題を理解できていないことが問題なんだろ。

696 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 13:08:14 ]
互換性がいるのは移植する可能性がある場合だろうかと。
あるいは環境が一部不明な場合か。
ただ、知識としてはあれば有効だろうが

697 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 14:23:00 ]
開発当初は特定のシステム限定であったとしても、実社会では
いつのまにかそんな制約はなくなってしまうものなのだよ。

ニートにはわからないだろうが。

698 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 14:53:17 ]
自分の体験したことが、現実の全てだと思っている>>697がいるスレはここですか?



699 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 15:16:00 ]
>>698
「全ての」と「存在する」の違いを未だ習ってないのかい? ぼーや

700 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 15:20:19 ]
シェルで移植性の高いスクリプトを書くのはめんどうくさいので
Perlを使うようになりますた

701 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 16:25:18 ]
それはそれで別の移植性の低さが問題になりそうな…

702 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 16:36:58 ]
Solarisさえ無くなればシェルの互換性の問題はほとんど解決するよね。

703 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 16:55:08 ]
UNIXのソフト開発標準を策定しようという取り組みはたくさんあった。
だがそうした標準は、POSIX(Portable Operating System Interface)のように
一般的過ぎて役に立たないか、あるいはUNIX戦争として知られる
Open Software Foundation対UNIX Internationalの企業連合間抗争に
巻き込まれるかだった。

704 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 17:09:49 ]
mkmfのようにメタスクリプトを環境依存シェルスクリプトにコンパイルする
プログラムがあるといいと思います!

705 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 17:11:11 ]
mkmfって、、また古い遺物を持ち出してきたなぁ、、

706 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 20:29:52 ]
本当にそんな互換性が必要ならlintの一つや二つとっくにありそうな気がするが、
寡聞にして知らないなあ。

707 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 20:33:44 ]
>>706
つ dash #まあ呼び出したコマンドの互換性まではチェックできないわけだが・・・


708 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/23(土) 20:36:48 ]
役に立たない、ただそれだけ



709 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/24(日) 05:17:26 ]
すべてのシェルが/bin/shを名乗るのを止めて
/bin/shを永久欠番化すれば解決

710 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/25(月) 02:26:09 ]
なんかすごい扱われようだな。
互換性を述べている人は割とバランスの取れたUNIX流の解釈だと思うぞ

711 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/25(月) 03:02:50 ]
どうせUnixなんて適当じゃねえか
varとかetcとか
システム変えることになったらどうせテンヤワンヤだ

712 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/25(月) 05:49:56 ]
ということにしたいんですね:)

713 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/25(月) 23:17:51 ]
>>710
素直に自分よりの解釈だと言えば?

714 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/25(月) 23:43:08 ]
>>685のは結構凄いと思うが、
>>517のedのヤツはもっと凄いな。
オレもed好きになろう。


715 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/26(火) 15:37:00 ]
edで日本語がうまく扱うほうほうがあれば言うことないのだが・・・・

716 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/26(火) 15:40:11 ]
sedにin-placeオプションがなくてperlをよく知らなかったころは
edでやってたな

717 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/26(火) 15:40:12 ]
>715
edより先におまえが日本語をうまく扱えるようになる必要がありそうだ

718 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/26(火) 15:44:41 ]
誰がうまいこといえと



719 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/26(火) 21:37:41 ]
てか、蒸し返すようで恐縮だけど
シェルスクリプトって、基本的に ash と ksh と bash で動けば
移植性で問題になることは極めて低いよね?

この三つで動いても駄目な環境って今どれほど実運用されているのだろうか?

720 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/26(火) 23:39:23 ]
>>719
Solarisが問題だな。Solarisにはkshが標準で付いてるとは言え、
シングルユーザモードでは使えない。
シングルユーザモードを含めたシステムスクリプトは依然、
/bin/shか/sbin/sh(単にstatic linkというだけで中身は/bin/shと同じ)の
範囲内で書く必要がある。
誰かが書いてたように、Solarisが無くなる(もしくは影響力が無くなる)なら、
シェルの互換性の問題は一気に解決するだろう。

721 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 00:25:59 ]
Solarisの/binは/usr/binへのシンボリックリンクだからkshやbash使ってもいいんじゃない?
/usr/binの中には/bin/kshで書かれたコマンドもけっこうある。
Solarisのshの動きがヘンなのはたしかにときどきちょっと困る。

722 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 00:42:18 ]
> Solarisの/binは/usr/binへのシンボリックリンクだから

マジで?

723 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 00:46:28 ]
> シングルユーザモードでは使えない。
> シングルユーザモードでは使えない。
> シングルユーザモードでは使えない。

724 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 00:50:42 ]
>>721
マジだよ。/sbinは別れてるけど。
>>720は/usrがマウントできない状況のことを言ってるんだと思うけど最近は/と/usrを分けないのもふつうなんじゃないかな。

725 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 00:53:11 ]
どっちかっつーとそういう問題でなくて、
ふつースクリプトは#!/bin/shで書くけど/bin/shが何だかわかんねーじゃん?
って話では?

726 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 02:29:26 ]
>>722
HP-UXもだな。


727 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 02:31:28 ]
ashもいろいろ修正入ってる。
Solarisの/bin/shはそれこそSystemV7のころのものとほとんど変わっていない。


728 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 03:37:47 ]
・・・ってシェルを使えじゃなくてPOSIXだか何かのsh規格に沿って書けって事だよな。



729 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 07:44:21 ]
>>721
じゃなくて、シングルユーザーモードの時、
/sbin/shはあるが、
/sbin/kshは無い。

/sbin/shはstatic linkの/bin/sh(/usr/bin/sh)
だから、シングルユーザーモードも含めれば、
結局 /bin/shの文法の範囲で書かざるを得ないという話。

しかも、Solarisの/bin/shは古いままなので、
export a=b も、$(command)も test -e も、
ちょっと新しい書き方はすべて使えない。

730 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 08:03:47 ]
互換性の話に便乗だけど、
一部のスクリプトで、未だに

${1+"$@"} って書いてあるのがある。
これ、もう "$@" でいいんじゃないか?

引数が0個の時に ""が残らないようにする措置だろうけど、
Solarisの/bin/shですらそんな不具合は発生しない。(確認済み)
なので、"$@"と書いて問題ないし、視認性上も "$@"と書くべきと思うんだが。

本当に ${1+"$@"}と書く必要がある /bin/shを搭載したOSって、
現存してる?

731 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 22:07:07 ]
>>729
なんか Solaris のシングルユーザモードって不便そうですね。
CD 6枚焼いたけど、インストールを躊躇してしまうよ。

732 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 22:19:42 ]
/ と /usr をわけたりしなければ気にする必要ないよ。


733 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 23:07:41 ]
>>724, >>726
なるほどねぇ、知らんかったよ。ありがと。

>>730
書き換えるのが面倒なだけなんじゃないか?

目障りだと思うなら、君が片っ端から書き換えて動作検証してあげればいいと思う。

734 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 23:19:19 ]
>>732
すんません BSD ユーザなもので、 / と /usr を分けるというのが
イマイチ良く解かりません。
ad0s1a に全部突っ込めって事ですか?
/var も /tmp も含めて・・・(よーするに swap 以外は同じパーテーション?)
Solaris だとそんなの有りなんだぁ。(BSDでも無いことは無いけど、なんだか・・)


735 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 23:36:43 ]
OSは別に関係ない。パーティションの切り方なんて好みの問題だ。


736 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 23:43:05 ]
>>735
でも、その好みの問題に対して Solaris はシングルユーザモードの
挙動をもってして、ユーザに介入してくる分けでしょう?
>>732 のレスからは、そういう風に読めるのだが?

737 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 00:09:08 ]
どうでもいいけどよそでやってくんないかな。

738 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 05:10:23 ]

>>730 の ${1+"$@"}  てどうゆう意味なの??
なんか理解できん・・・(TT



739 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 05:18:04 ]
>>734
NetBSDのデフォルトは分けないからBSDユーザーってのは言い訳にならない。

740 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 07:33:15 ]
あと、未だに
if [ X$HOGE = X ]
なんてのも見かける。これも、
if [ "$HOGE" = '' ]
と書いたほうがいい。

むかーしのバージョンのtestで、$HOGEの内容が = だったような場合、
[ = = '' ] みたいになるとエラーになるtestに対する対処として、
X$HOGE とかいう回避法があったけど、今の testコマンドでそれが必要なのは
もう現存しないはず。

741 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 14:01:16 ]
>むかーしのバージョンのtestで、$HOGEの内容が = だったような場合、

ちがう。
$HOGE の内容が -f だったような場合に対する対処だから、今でも有効。


742 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 14:16:42 ]
>>741
$HOGE の内容が -f でも正常に動くんだけど。
[ -f = hoge ] みたいに、項が3つある時は、
-fはファイル存在オプションとはみなされないから

-f だった時駄目になるような/bin/sh搭載した OSって 何?

743 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 14:36:59 ]
>>742

a="-f"
b="-a"
c="="
d=""
test X"$a" = X"$b" -a X"$c" = X"$d"
echo $?
test $a = $b -a $c = $d
echo $?

FreeBSD の ash、Solaris の sh, ksh、GNU bash いずれでも異なる結果になりました。


744 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 14:39:58 ]
>>743
それは、複数の式を -a (AND) でつないだ場合の話。
それだと確かに式の評価がおかしくなることがあるが、

[ $HOGE = hoge ] なら、X$HOGE とする必要はなし。

Solarisの/bin/sh でも [ -f = -f ] は無問題。

745 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 14:43:14 ]
-a 使ってるかどうかで場合わけするより
一律で X$HOGE にしといた方がおしゃれ。

746 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 14:48:53 ]
>>745
-a 使う場合は、各評価式ごとに \( \) で括るのを推奨。

[ \( "$a" = "$b" \) -a \( "$c" = "$d" \) ]

↑みたいにね。これで、X"$HOGE" は不要。

747 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 14:54:19 ]
>>744
> [ $HOGE = hoge ] なら、

クォート忘れてる。

> X$HOGE とする必要はなし。

ダウト。
そのへんの対バカ性能をどこまで頑張るかはヒューリスティックで実装依存。

たとえばFreeBSDのtestでは

$ HOGE='!'
$ [ "$HOGE" = hoge ]; echo $?
[: =: unexpected operator
2

となるので変数に任意の値を想定するなら "X$HOGE" = Xhoge は依然必要。
常にtestの引数が正しい式となるよう書くにしくはなし。

748 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 15:06:47 ]
>>747 氏に聞きたいのだが、
>>730 についてはどうお考え?

${1+"$@"} は以前必要? もう不要で "$@"で桶?



749 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 15:09:08 ]
ここでポリシー決めても
どこ使うんだろ。

750 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:18:00 ]
こういう突っ込んだ話まで網羅してる本は無いの?

751 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:20:30 ]
結局トラディショナルな書式に落ち着くんだよな...

752 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:25:52 ]
文字列の比較なら [ X"$HOGE" = hoge ] なんてするより
case $HOGE in hoge) にするなぁ。

caseだと、たとえ$HOGEの中身が ! だとか -f -a とか特殊記号だったとしても
すべて無問題だから。

753 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:31:27 ]
>>750
詳解シェルスクリプトを企画するか

754 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:35:22 ]
需要ないだろー

755 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:37:22 ]
wikiでいいんじゃね

756 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:38:15 ]
需要とかそういうことに興味あるのかしら?

757 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:39:17 ]
>>756
本売るつもりなら大事でしょ。

758 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:40:07 ]
需要ないだろ。問題になるのSolarisだけだし、Solarisユーザーの人数が、、、



759 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:41:25 ]
>>757
>>756 が言ってるのは、ユーザーがシェルの互換性に興味あるのか? ってことでは
(需要に興味があるかどうかじゃなく)

760 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:49:09 ]
今時、シェルスクリプトの本なんて、全く売れないとは言わないにしても
何冊くらい売れるんだ?
このスレでも>>4にある本の話なんて全然出ないし。

761 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:50:30 ]
入門書はそれなりに売れるんじゃないの?
そういうの読む人がここの話に参加しづいらいだけで。

762 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:52:47 ]
getopts は互換性あるの?

763 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:59:17 ]
>>762
よほど古いシェルじゃない限り互換性ある。でもなぜか出番なくてあまり使わない。

764 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 18:02:34 ]
詳説正規表現もこんなのみんな興味あるのかよとかおもったけど
意外に受けたらしいから

765 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 18:11:11 ]
互換性があって、どのシェルでも使えるのに、
使ってるの見たことないコマンドの筆頭が readonly だな。

766 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 18:12:21 ]
>>763
ありがとうございます。
もうひとつ質問なんですが、ポータブルかつ安全に一時ファイルを作成するにはどうすればいいのでしょうか。

767 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 18:12:31 ]
UNIXシェルの新刊はここ2年くらいやたら出たが、
もうこの分野で出ても意味ないわな。
カーニハン&パイクとブルース・ブリンけあればいいんじゃないか。

768 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 18:17:41 ]
>>766
どこまでの安全性を言ってるのかわからないけど、

(unask 77; > /tmp/hoge$$)

じゃだめかい?

mktempコマンドは、必ずしもあるとは限らないと仮定するべきなのだろうか?



769 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 18:21:56 ]
mktemp(1) を勧める文書は「pidは容易に推測できるので危険」とか書いてますよね。
実用上はほとんど問題にならないのでしょうが、気持ち悪いので何か安全な方法があるのかお尋ねしました。

770 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 18:31:34 ]
本当に安全でないといけないなら、
mkdirとかでちゃんとロックして、
失敗したら別の名前で試すとかするしかない。
作るディレクトリのパーミッションちゃんとしとけば
推測されてもかゆくもないでしょ。

771 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 18:49:36 ]
cat /dev/urandom | od -x

772 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 19:09:45 ]
>>771
/dev/urandom はポータブルではないわけで、、

773 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 19:10:47 ]
こういう時はお約束だろ



>>771
catが無駄です。

774 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 19:45:41 ]
正規表現もそれぞれで実装がまちまちなのに、なにを言ってるのか

775 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 19:53:31 ]
そもそも正規表現エンジンが内蔵されてる sh なんかあったっけ?


776 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 20:07:27 ]
詳説シェルスクリプトが必要とされているな

777 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 20:09:05 ]
なんで正規表現の話が出てきたんだ?

778 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 20:13:15 ]
774さんの説明に期待



779 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/29(金) 01:27:29 ]
激しくどうでもいいが、Solarisの/sbin/shは動的リンクされているぞ。
ていうか、間違いだらけの知識を持ってるやつほどSolarisをバカにする傾向があるな。

780 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/29(金) 01:33:43 ]
>>779
Sol10 からね。Sol9 までは static link。


781 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/29(金) 03:23:19 ]
最近Solarisを使いだした奴に限って、Solarisをマンセーしたがる傾向があるな

の間違いでした

782 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/30(土) 16:06:14 ]
>>748
747じゃないけど "$@" -> ${1+"$@"} とするのは set -u でもエラーにならない為かと
すくなくともある環境では0を除いた位置変数が未設定なら前者はパラメータ未設定エラーになるから

別に""の互換性の理由だけで${1+"$@"}にする訳ではないでしょ

783 名前:782 mailto:sage [2007/06/30(土) 16:14:29 ]
誤) 為かと
正) 為でもあるかと

784 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/30(土) 17:05:31 ]
>>782
実際に ${1+"$@"} が使われてるのは set -u のところじゃない。
コマンドのラッパーで引数を渡す時の話。
なので、>>782 の話は当たっていない。

785 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/30(土) 17:10:16 ]
${1+"$@"} と書くのは、位置パラメータがない場合に
空文字列が残らないようにするため。
他に、${@+"$@"} という書き方もある(あった)。

今議論になってるのはそこじゃなくて、
未だに ${1+"$@"} が必要なシェルが現存しているかどうか、
現存しているなら そのOS名は? という質問。

786 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/30(土) 17:59:27 ]
>>784-785
「でもあるかと」と訂正してるんだが

実際 set -u 設定状態でコマンドラッパーに"$@"で渡そうとしても
$@ を評価(展開)する段階で未設定と判定された訳で

空文字列が残るかどうかなんて今時大抵解消されてるでしょ
幾つかのOS、幾つかのB系シェルを触ったことはあるけど個人的には見たことがない

ただ単純に ${1+"$@"} -> "$@" として問題ないか?と聞かれたら
set -u で問題が起きるからダメだと





787 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/30(土) 18:24:29 ]
>>786
で、その set -u で問題が出たOSって何?

788 名前:782 mailto:sage [2007/06/30(土) 18:25:32 ]
上の文、言葉のチョイスが変だわ

もともと空文字列対応で今時 ${1+"$@"} とする必要はあるか?かもしれんが、
たとえその為の対応が不要になったとしても、${1+"$@"} -> "$@" にしていいことにはならんよと言いたい

理由は以下のスクリプトを実行するとエラーになる環境もあるからと

#!/bin/sh
set -u
echo "$@"







789 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/30(土) 18:29:44 ]
>>788
だから、そのエラーになる環境は何なのかと。

俺のところの *BSD/Solarisとあと犬で、エラーになるのはひとつもないのだが。

790 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/30(土) 18:56:23 ]
>>789
そのSolarisじゃないの? ほんとに試してみた? バージョンによるのかな?

結局互換性の最大の問題はいつもSolarisだなww

791 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/30(土) 20:36:50 ]
古いSolarisで見限っちゃったやついっぱいいるからな
いまのSolarisをしらない奴がいてもしょうがない



792 名前:名無しさん@お腹いっぱい。 [2007/07/03(火) 01:38:27 ]
今のソラリスは早いの?
おそーーーーーーーーいので、あまり使いたくない。

793 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/03(火) 12:33:55 ]
昔からCPUなりのスピードは出てると思うがな...

794 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/04(水) 12:36:32 ]
rm -rf /なんてもう古い
時代はmv /bin /ms.green

795 名前:名無しさん@お腹いっぱい。 [2007/07/04(水) 22:29:33 ]
誰か教えて。Bシェルで

test 1000000 -lt 9999999999
の結果が正にならないんだけど。数値型の値に制限とかあるのかな?

796 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/04(水) 22:31:41 ]
>>795
bashだと無問題。「正」じゃなくて「真(0)」な。

797 名前:名無しさん@お腹いっぱい。 [2007/07/04(水) 22:35:06 ]
小さい値だとちゃんと真(0)になるんだけどなんでかな。

798 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/04(水) 22:35:10 ]
>>795
実装依存だな。シェルによっては 31bit整数最大の 2147483647 が扱える最大値。



799 名前:名無しさん@お腹いっぱい。 [2007/07/04(水) 22:37:55 ]
>>798
ありがと。ちなみに対処法って何かあったりする?違う言語使うしかないか。

800 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/04(水) 22:42:13 ]
>>799
bcに喰わせるとか。bcだともっと大きい数まで扱える。

echo '1000000 < 9999999999' | bc

bcでは、testとは逆で、真の場合1になって、それが標準出力に出る。

801 名前:名無しさん@お腹いっぱい。 [2007/07/04(水) 22:55:38 ]
ありがとう。試してみます。

802 名前:名無しさん@お腹いっぱい。 [2007/07/05(木) 22:47:11 ]
ipアドレスを0101って2進数にするにはまず・・・・・・・・なにすればいいの?

803 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/05(木) 23:01:13 ]
小数点までを取り出す


804 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 01:13:45 ]
こんなのでどうだろう

 (echo obase=2; echo 1.2.3.4 | tr '.' '\012') | bc | xargs -n 1 printf %.8d


805 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 01:23:00 ]
もちょっとカイゼン:

 旧:(echo obase=2; echo 1.2.3.4 | tr '.' '\012') | bc | xargs -n 1 printf %.8d
 新:printf %d%.8d%.8d%.8d `echo obase=2.1.2.3.4 | tr . \; | bc`


806 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 10:00:27 ]
shebang が #!/bin/shのシェルスクリプト test.shを PATHの通った$HOME/bin に置いたところ、
tcsh では $ test.sh で動作するのに、
bash では $ test.sh で動作せず、
$ bash -c test.sh でも動作しませんでした。

/usr/local/bin/以下に置いたところ、
bash上の $ test.shは動作しましたが、
やはり、$ bash -c test.sh は動作しません。

この原因は、どのあたりにあるのでしょうか。
ヒントでよいので教えてください。


807 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 10:26:25 ]
>>806
(t)cshと(ba)sh では、PATHの変数が違う。本当はPATHを通し忘れているというオチ。
あるいは、.bashrcでPATHが再設定されてしまっているとか。

808 名前:806 mailto:sage [2007/07/06(金) 10:42:36 ]
>>807
bash上で、$ set | grep PATH すると、$HOME/binも入っているのですが、
やっぱり、PATH関係っぽいですよねぇ。

$ bash -c test.shができないのが気持ち悪いです。

ちなみに、$ $HOME/bin/test.sh では実行できました。



809 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 10:46:13 ]
>>808
setじゃなくて、printenvで確認した方がいい。
シェル変数のPATHのみセットされていて、exportされてない可能性がある。
すると、bash -c とかやった時、新しいbashにはPATHが引き継がれないから、
そういう現象が起きる。

810 名前:806 mailto:sage [2007/07/06(金) 10:59:27 ]
>>809
exportされないというのは盲点でした。
おっしゃるとおり、
$ printenv | grep PATH
をしたところ、$HOME/binも含まれていました。
一応、.bashrcでの設定はきいているんですよね。

ググったところ、Cygwin上では、
bashのバグ?かなにかで、bash -c がきかない現象があるようです。

遅くなりましたが、自分の環境は linux 、bash 3.1 です。



811 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 11:09:47 ]
ユーザ名だけ伏せていいから、完全なスクリーンダンプ出せ

812 名前:806 mailto:sage [2007/07/06(金) 12:10:14 ]
>>811
席を外していまして、遅くなってすいません。
スクリーンダンプは以下のようなものでよろしいでしょうか。
実はtest.shは、navi2chインライン画像表示のためのシェルスクリプトで引数もとります。

i) bash上で実行

$ bash --verbose -c navi2ch.makethumb www.google.co.jp/intl/ja_jp/images/logo.gif
navi2ch.makethumb
$ sh -x navi2ch.makethumb www.google.co.jp/intl/ja_jp/images/logo.gif
+ tmp=/tmp/navi2ch-thumbnails
+ origfile=/tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif
+ thumbfile=/tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg
+ thumbsize=300x150
+ '[' '!' -f /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif ']'
+ '[' -z '' ']'
+ /usr/bin/wget www.google.co.jp/intl/ja_jp/images/logo.gif -q -N -x -P /tmp/navi2ch-thumbnails
+ '[' '!' -f /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg
+ thumbsize=300x150
+ '[' '!' -f /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif ']'
+ '[' -z '' ']'
+ /usr/bin/wget www.google.co.jp/intl/ja_jp/images/logo.gif -q -N -x -P /tmp/navi2ch-thumbnails
+ '[' '!' -f /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif ']'
++ identify -format %n /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif
+ scene=1
+ '[' '!' -s /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg -o /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg -ot /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif ']'
+ '[' 1 -gt 1 ']'
+ convert -sample 300x150 /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg
+ echo -n /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg
/tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg

813 名前:806 mailto:sage [2007/07/06(金) 12:13:07 ]
>>812
上の方の
$ bash --verbose -c
では、画像は取得されませんでした。
下の方の
$ sh -x
は、画像が取得されました。

814 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 12:18:15 ]
なんかよくわからんけど
フルパス指定じゃだめ?

815 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 12:32:04 ]
改行コードが CRLF になってないか?

816 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 12:39:22 ]
>>812
test.shが問題だというから、
ちゃんと問題を切り分けて小さくしてるのかと思ったら、それかよ
.bashrcの中身も、printenv PATH そのものも、隠さず出したら?


817 名前:806 mailto:sage [2007/07/06(金) 12:52:00 ]
/usr/local/bin/下のnavi2ch.makethumbを消し、~/bin/navi2ch.makethumbだけにして、
もう一度試したところ、bash上でも
$ navi2ch.makethumb 引数
が実行できました。
しかし、
$ bash -c navi2ch.makethumb 引数
は、やはり実行できませんでした。

>>814
フルパス指定だとbash上でも実行できます。

一応、回避策として、/usr/local/bin/に置いているので、具体的な支障はないのですが、
"bash -c"だけがうまく動いてくれないのはなぜだろうと不思議に思って、質問しました。

だから、本当はこんなにレスしていただくほどのことでなくて、申し訳ないです。

>>815
nkf でチェックしたところ、EUC-JPでした。(環境はja_JP.UTF-8)
cat -v で見ても、改行コードらしきものはありませんでした。



818 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 13:06:23 ]
PATHの問題は知らんけど、引数を渡すのなら
bash -c 'navi2ch.makethumb 引数'
じゃないと駄目だろ



819 名前:806 mailto:sage [2007/07/06(金) 13:07:41 ]
>>816
#!/bin/sh
echo test

のようなシェルスクリプトですと、~/bin/以下に置いて、
$ bash -c test.sh
test
と実行できます。

$ printenv PATH
/home/mona/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games

ふだんbashを使っていないので、~/.bashrcはありものです。
~/.bashrc
PATH=$HOME/bin:$PATH
↑とりあえず、これだけにしました。

これでもやはり、
$ bash -c navi2ch.makethumb www.google.co.jp/intl/ja_jp/images/logo.gif
では画像を取得できませんでした。

"bash -c"はいろいろときびしそうですね。

820 名前:806 mailto:sage [2007/07/06(金) 13:12:21 ]
>>818
$ bash -c 'navi2ch.makethumb 引数'

で画像を取得出来ました。

超基本的なことに気付かず、おさわがせして申し訳ないです。
どうもすみませんでした。
ほんとうにごめんなさい。

821 名前:名無しさん@お腹いっぱい。 [2007/07/15(日) 17:20:37 ]
blog.miraclelinux.com/thethird/2006/12/post_4e7b.htmlo


(sleep $ALIVE_TIME; ps $$ && kill -INT $$; sleep 1; ps $$ && kill -KILL $$)
1秒待ってもう1度だけkillしてるのはなぜなんですかね?

822 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/15(日) 17:56:03 ]
>>821
よく見ろ。-INT と -KILL で違うだろ。

823 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/15(日) 22:02:12 ]
本当だ。失礼しますた。

824 名前:名無しさん@お腹いっぱい。 [2007/07/16(月) 22:04:04 ]
シェルスクリプトでif文に正規表現による文字列一致条件を記述できないでしょうか?
sedなどを使ってやればできないことはないですが、
if文一発でできればいいなと。。

825 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/16(月) 22:07:47 ]
>>824
できない。
正規表現と言ってるが、実際にはワイルドカードで十分なことが多い。
ワイルドカードなら ifの代わりに caseを使えばできる。

826 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/16(月) 22:08:01 ]
case使え。

827 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/16(月) 22:25:25 ]
モレはいっつもテストコマンドの中でegrep使ってるけど・・・・素人なのでアフォな事やってるのかも。


828 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/16(月) 23:48:40 ]
if expr $string : $regex >/dev/null; then
...




829 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/17(火) 23:10:26 ]
>>827
機能・性能に問題なきゃそれで充分だろ。

コンピュータ (て言うか、道具) なんて楽するためにあるんだから。

830 名前:827 mailto:sage [2007/07/17(火) 23:45:10 ]
じゃあ、>>824もそれでよろ(w


831 名前:名無しさん@お腹いっぱい。 [2007/07/22(日) 20:41:39 ]
UNIX上からリモートでWindowsのバッチを起動させるシェルスクリプトを
作りたいのですが、実装イメージがまったくわからず困ってします。

Win相手に対してrshは使えないであろうし。。。何かいい方法をご存知の方
いらっしゃいませんか。よろしくお願いいたします。

832 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/22(日) 20:44:38 ]
スレ違い

833 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/22(日) 21:38:16 ]
>>831
cygwin + sshdとかな。

834 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/22(日) 23:07:17 ]
>>831
Windows が 2k / XP なら、telnet でどうぞ。

835 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/22(日) 23:07:46 ]
>>831
>Win相手に対してrshは使えないであろうし

使えるよ

sohda.net/cygwin/treebbs/treebbs.cgi?kako=1&all=232&s=232
www.uhero.info/techinfo/CygwinSSH_setup/index.html


836 名前:824 [2007/07/22(日) 23:08:49 ]
実行時間は case < expr < sed だったので
結局、caseにしときました。


837 名前:831 mailto:sage [2007/07/22(日) 23:48:25 ]
>>833>>835
アドバイスありがとうございます。cygwinについて
あまり知識がないので調べてみます。

>>834
telnetで可能ということは、Win上でtelnetサービスを
稼動させておけばいいということでしょうか?

明日にでも実施してみようと思います。
ありがとうございました。


838 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 01:24:43 ]
> telnetで可能ということは、Win上でtelnetサービスを
> 稼動させておけばいいということでしょうか?

手元の 2k だと特にわざわざ入れた覚えはないから、多分
標準で入ってると思う。

サービスの中に telnet ってあるはずだから、それを起動
するだけ。

常用するなら、スタートアップの種別を「自動」にする。



839 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 03:17:55 ]
telnetは対話型だから、ダメというかめんどくさいだろ。

840 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 07:39:36 ]
expectとか使えばいいだけじゃないの?

841 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 21:43:20 ]
下記のようなファイル検索をするシェルを作ったのですがうまく動きません

#!/bin/csh
echo 検索するファイル名を入力してください:
set filename = $<
(find /* -name $filename -type f -print > /dev/tty) > & /dev/null

「hoge.txt」を検索する場合はうまくいくのですが、
ワイルドカードを用いた「hoge\*」の検索をすると検索を行わずに一瞬で終了してしまいます。

setで変数に"\*"を入力するのは不可能なのでしょうか?


842 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 21:45:14 ]
今日はカレーにする

843 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 21:50:39 ]
>>841
>>1


844 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 21:52:21 ]
・シェルスクリプトのことをシェルってゆーな

クオートすれば?

845 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 22:31:26 ]
シェルってゆうな。クズ。
csh捨てろ。クズ。

846 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 22:34:46 ]
スルーカ

847 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 22:44:48 ]
>>843-845
すんまそん、会社でシェルシェル言ってるもんで癖がついてました。
クオート試してみることにします。
cshは会社の都合なんすよ

848 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 06:21:28 ]
>>847
最初の行に
sh
と書きゃいいじゃん。



849 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 12:34:58 ]
>>848
実社会で勉強してね
cshからshに変えるのは容易ではないのだよ
シェルスクリプトは1人で作るのではないし
1つの会社で作るものでもない

850 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 14:06:37 ]
つまり、1人だけではなく1つの会社だけでもなく、
いくつもの会社にまたがって何人もの人がよってたかって
>>841みたいなスクリプトを書いているわけだな。すげぇ。

つーか、csh を使うにしてもせめて #!/bin/csh -f にしろよ。


851 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 14:13:50 ]
>>841
の例は、わざわざcshの欠点が目立つような典型例だな。
ワイルドカードの展開の問題とか、
findのstderrを捨てるために苦労してるところとか。

そもそも、findをインタラクティブに実行させるようなスクリプトは、
システム管理用スクリプトじゃない。初心者ユーザー向けに作ったものだろ。

こんなの、/bin/shで書き直せば一発。
>>841 が抱えているcshでの問題も一気に解決する。


>>849 へ。
みんな実社会で「cshスクリプトは使わない」が常識だといってるんだよ。
>>849 は自分の会社名を公表しない方がいいよ。会社の不名誉になるからね。

852 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 14:15:45 ]
cshじゃなきゃだめな会社ってどこ?

853 名前:849 mailto:sage [2007/07/25(水) 14:57:09 ]
>>851
ま、会社名を挙げる気は無いけど、
おれんとこでは全部のスクリプトがcshだし
スクリプトの作成・保守を依頼している会社も
cshで作るようになっている。
OSが古いもの・新しいものが混在しているのも
理由ではあるが、
常識など、会社によって違うものだろ。
シェルがダメなのは分かるが、
シェルを変えろとか無理な話だ

854 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 14:59:19 ]
HP-UXでkshを使っているのですが、C-p・C-nで履歴検索ができるとmanpageに書いてあるのですが、
実行しても何も起きません。
どうすればよいのでしょうか?
また、linuxのbashみたいに↑↓キーで履歴表示をしたいのですが、
kshで実現可能でしょうか?

855 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 15:07:05 ]
>>853
> OSが古いもの・新しいものが混在しているのも理由ではあるが、
/bin/shが存在しないUnixなんて無いんじゃないのか

> シェルがダメなのは分かるが、シェルを変えろとか無理な話だ
へえ。cshがダメなのははるか前からの常識なのに、誰もその
やりかたを変えようとせず、変えるのは「無理」だと思ってるんだ。
しかも古いスクリプトだけでなく、新しいスクリプトもわざわざ
cshで書き、ゴミを製造し続けていると。

勿論、C++やJavaやPythonなんて誰も使わないんだろうな。
ソース管理は未だにCVSでさえない、いやソース管理なんて概念もないね?

お前さんがアホなのか、会社がアホなのかは知らないが、実に見事に
アホだな。

856 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 17:35:21 ]
会社の都合なら仕方ないんだから
そんなに必死に弁解しなくていいよ

857 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 20:55:10 ]
>>853
だってさ、起動スクリプトとかOSに元々内蔵されてるスクリプトはshだよね?

そういうスクリプトを修正する時も、cshで書き直してるの?


858 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 23:13:35 ]
棄てる気になれば簡単に捨てられる。棄てられないのは>>853がヘタレなだけ。



859 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 23:54:41 ]
恐ろしいことにうちはコーディングルールでcsh使うことになってるorz

おまけに最近スクリプトでsql実行してるのを、「COBOLで実装しろ」って指摘された…
SQLの使い方調査があって、スクリプトが調査範囲から漏れたからだと。



860 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/26(木) 00:27:56 ]
>>859
つまりOSインストール時からあるスクリプトも全部cshで書き直してるって事か?


861 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/26(木) 00:40:11 ]
間違っているルールを変更できないなんて将来の無い会社だな。

862 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/26(木) 01:32:53 ]
>>859
なんでcsh使うことになったの?

863 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/26(木) 04:05:17 ]
袋叩きw

csh好きな勉強不足の若者の脳内会社なんだから許してやれよw

864 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/26(木) 10:27:50 ]
某社と某社はcshだったな
皆さんがんばってね

865 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/26(木) 14:51:51 ]
古いBroadVisionなんかだと、パッケージに
cshで書かれたシェルスクリプトがいっぱい付いてくるから
仕方が無い

866 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/26(木) 14:57:19 ]
会社で使うシェルスクリプトなんてコマンド順番に起動して
戻り値チェックするくらいのもんだからな。

867 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/26(木) 17:05:58 ]
それですむならそれでいい

868 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/26(木) 18:40:09 ]
ジュセッペさんお元気?



869 名前:名無しさん@お腹いっぱい。 [2007/07/27(金) 00:19:38 ]
Zshまんせー

870 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/27(金) 01:30:36 ]
>>866
俺はシェルスクリプトがないと会社で生きて行けんが。


871 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/27(金) 02:53:31 ]
これお勧め:

つ ln /bin/sh /bin/csh

もっといいのは#!起動された時にスクリプトを調べて
昔からのcshスクリプトなら「しょうがなく」csh、じゃなきゃ
shにディスパッチするようにするとか。Linuxなら簡単だな。

872 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/27(金) 04:33:23 ]
まぁ、/bin/shのシェルスクリプトを書かせたらbashスクリプトを書きやがったとか
*.shのファイルを開いたらbashスクリプトだったなんて事を無くす為なら
cshしか使うなってのもありかも知れん。

873 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/27(金) 07:10:12 ]
ないないw

874 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/27(金) 08:49:35 ]
20年モノのcshスクリプトが10万行単位である
とかね

875 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/27(金) 23:08:29 ]
csherは平気でコピペで行数倍増するから10万行も妄想じゃないな。

876 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/27(金) 23:22:10 ]
そんなコードだったな

877 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/27(金) 23:53:59 ]
昔、(偽装)派遣で行ったところは csh が標準だったよ。
ひ孫請の俺がルールを変えるなんて無理だった。

当然ソース管理なんて概念もない。ファイルはタイムスタンプ
(mtime)で管理してたよ。もー馬鹿かアフォかと。

とりあえず、自分のコードは SCCS で管理してた。
当然フリーソフトウェアなんて得たいの知れないものは
使用禁止。

まだあの会社あるかな…


878 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/28(土) 00:03:54 ]
某独立系大手とか
某システム系大手とか



879 名前:名無しさん@お腹いっぱい。 [2007/07/28(土) 01:05:38 ]

folder>------folder1---test
|
---folder2---test

folder1内にある実行ファイルtestを実行して、
その終了を待って、folder2内のtestを実行する
というスクリプトを作ったんですが、folder2の実行が行われません。
どこがいけなかったんでしょうか?ご教授ください。

#!/bin/sh


for i in 1 2

 do

    cd folder$i

    nohup test
    
wait $!

    cd ..

 done


880 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/28(土) 01:12:09 ]
まず、なんでいちいちwait入れるのかわからん。
ほっとけば、終わってからしか次が実行されんだろ?
あと、本当にtestって名前なのか?
/bin/testかビルトインのtestが動いてるだけでは?

881 名前:879 [2007/07/28(土) 01:24:56 ]
>880
実際は、testっていうプログラムじゃないんですけど、
実行すると1日くらい走り続けるものです。
wait入れなくて実行したら、二重に実行されてしまったので。
二重に走らないようにしたいので、wait入れたのですが。

882 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/28(土) 01:58:54 ]
実行したいモノを列挙すればいいんじゃね?
それで満たせない要件は後だしでくるような気もするけど

883 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/28(土) 02:20:46 ]
cronかなんかで後から起動しちゃってるだけ?
waitって子プロセスの終了待つだけなんだから
バックグラウンドで動かさん限り無意味

884 名前:名無しさん@お腹いっぱい。 [2007/07/28(土) 03:15:41 ]
awkについて質問です。

echo "<tr><td></td></tr>" | awk '{print $1, $2, $3, $4}'

とすると、以下のように分解して代入されるようにしたいのですが、
awkのオプションをどのように指定すればよいでしょうか?
(同じことができるなら、awk以外でも構いません)

$1=<tr>
$2=<td>
$3=</td>
$4=</tr>

よろしくご教授お願いします。

885 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/28(土) 07:42:41 ]
sed 's/></> </g' < "<tr><td></td></tr>" | awk '{print $1, $2, $3, $4}'

886 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/28(土) 08:52:38 ]
  < "<tr><td></td></tr>"
この部分は何だ?

887 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/28(土) 09:32:29 ]
そのくらいわからないのか
<tr><td>< というディレクトリの下に
td>< という子ディレクトリがあって、その下に
tr> というファイルがある。
その内容が
<tr><td></td></tr>
なのだ。

888 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/28(土) 09:46:10 ]
hagewarosu



889 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/28(土) 16:48:50 ]
>>884
なんで echo の中で FS 使っちゃいけないの?

890 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/28(土) 16:52:40 ]
おばあちゃんの遺言で

891 名前:名無しさん@お腹いっぱい。 [2007/08/01(水) 00:31:16 ]
for f in 'ls -1'
do
echo ${f}
done

とか

for s in 'cat hoge.txt'
do
echo ${s}
done

なんかは、基本だな

892 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/01(水) 01:12:54 ]
>>891
何が言いたいのかさっぱりわからん。


893 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/01(水) 02:11:41 ]
if分で「$numbarが10から1000の間なら」という分岐は可能でしょうか?

if [ $numbar = 10 -o $numbar = 11...]

と地道に書いていくしかだめですか?

894 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/01(水) 02:24:09 ]
っman test

895 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/01(水) 02:38:29 ]
case $number in
[1-9][0-9]|[1-9][0-9][0-9]|1000)
....
;;
esac


896 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/01(水) 08:14:47 ]
>>895
0点


897 名前:numbar warota mailto:sage [2007/08/01(水) 21:58:49 ]
>>893
[ "$number" -ge 10 -a "$number" -le 1000 ]

898 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/01(水) 22:58:41 ]
>>897
引っかけ問題に引っかかりましたねぇ。
>>893 の問題では、シェル変数名は number じゃなくて numbar
前任者から引き継いだスクリプトとかで変数名がミススペルで、
自分が正しいスペルで書き足すと動かなくて1日悩むこと、よくあるでしょ?
そのための練習問題でした。



899 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/01(水) 23:03:02 ]
>>898
死ぬほどどうでも良いですね。

900 名前:名無しさん@お腹いっぱい。 [2007/08/02(木) 20:28:27 ]
>>898
おまい、100回くらい死ねよ


901 名前:ウサチャソ mailto:sage [2007/08/02(木) 21:08:52 ]
バージョンの略を var と書いてしまう奴は結構いるよな。

902 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/02(木) 21:22:54 ]
見たことないぞそんな奴。

903 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/02(木) 21:25:20 ]
スペルミスならもっと酷いのをいくらでも見たことがある

904 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/02(木) 21:41:27 ]
ここで伝説のuwariteが登場。


905 名前:numbar warota mailto:KKC並みのヴァカだな sage [2007/08/02(木) 22:07:37 ]
>>898
シェルスクリプトごときで1日も迷うねーよ。
それと、From:見る癖つけたほうが良い。

906 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/03(金) 00:34:20 ]

「対話的な利用についての話はスレ違い」ってあるけど、
どこに逝っていいのか教えて頂けないでしょうか〜

expect があることは知ってるけど、
インストールが必要だからダメだって。

とりあえず、どういう選択肢があるか知りたいです。


あと perl の話になるんだけど、
Expect.pm を Makefile.pl とか CPAN での
インストールをしないで(起動ディレクトリにモジュールを置くだけとかで)
起動する方法があれば、誘導をお願いしたいです。




907 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/03(金) 00:37:46 ]
>>906
ポエムは確か別の板があったはずだぞ。

908 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/03(金) 01:12:06 ]
>>907

ポエム?

なんかアフォ扱いみたいな感じだけど、
変なこと書いてるんかなー? よく分からん。


とりあえず反応ありがと。




909 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/03(金) 02:14:06 ]
>906 は対話的の意味を勘違いしているに一票

910 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/03(金) 02:17:29 ]
>>906
インストールがダメって言うなら、現行環境に入ってる使えそうな道具立てはなんなのよ?

それとは別に、「対話利用についての話題禁止」の意味をつかめてないに一票


911 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/03(金) 08:19:15 ]
>>909,910

ぐぐってみた。↓に書いてある「対話」?
(例えばどんな話が禁止なのかは分からんが。。)

0からのbash 第1回:対話的シェルの使用法(1) 1.はじめに
www.stackasterisk.jp/tech/systemManagement/bash01_01.jsp


>>910

何を書けばいいんだろ。

telnet, ftp, rsh, perl

Expect.pm は上に書いたように
Windows での単体 exe みたいなイメージ
(インストールが必要ない)ならおkらしい




912 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/03(金) 08:56:32 ]
で、結局何をしたいのよ?

913 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/03(金) 10:30:08 ]
>911
やりたいことをできるだけ具体的に

914 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/03(金) 17:58:16 ]
今度、会社で、シェルを使わなければならない可能性が発生する恐れがあるかも知れない状況になる兆しが出て来ました。
とりあえず初心者がシェルの方を始めるには、どのシェルの方から始めればいいでしょうか?
開発ツールの方とか、デバッガーの方はGUIの方であるんでしょうか?
できればフリーの方を希望します。

915 名前:名無しさん@お腹いっぱい。 [2007/08/03(金) 18:11:06 ]
>>914
> 可能性が発生する恐れがあるかも知れない状況になる兆しが出て来ました。
それぞれ20%と仮定すると、4段階あるから、0.16%だ。
悲観的すぎー



916 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/03(金) 18:17:25 ]
どれがいいかは会社に聞け。
GUI はないと思っていい。

917 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/03(金) 18:18:59 ]
まず日本語を勉強したほうがいいと思われ

918 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/03(金) 22:35:37 ]
>>914
sh



919 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/03(金) 23:10:59 ]
面白いと思ってやってるんだろうか? 低脳としか比喩できない釣りだ。

920 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/03(金) 23:39:16 ]
>>906

push(@INC, '/home/hiroyuki')

とかやればモヂュールのサーチパスに追加されるんじゃないの?

921 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/03(金) 23:40:37 ]
>>919
お前の語彙が少ないのはどうでも良い。

922 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/03(金) 23:48:38 ]
>>916
wishとかwkshとかPowerShellかもしれないじゃないか!


923 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 00:37:18 ]
>>921
悔しいのか? でもつまらんものはつまらん。

924 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 00:41:13 ]
おや、>>914 が餌をまいているのに、
「シェルってゆーな」の人が登場する可能性が発生する恐れがあるかも知れない状況になる兆しが出て来ませんねぇ

925 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 02:19:39 ]
シェルってゆーな

926 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 07:31:21 ]
>>915

X 恐れ
◯ 虞れ

927 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 09:22:51 ]
>>926
それを言うなら、送り仮名が違う

×虞れ
○虞

ただし、「虞」は常用漢字じゃなく、現在では「恐れ」と表記するのが標準。
ぐぐってみても、「○○する恐れ」は多数ヒットするが、「○○する虞」はごくわずか。

928 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 09:34:48 ]
>>924
お前、センスが皆無な上に致命的に頭悪いな。
> シェルスクリプトをシェルとゆうな。
なので、>>914は(呆れるほどつまらない釣りだが)誤用無し。



929 名前:926 mailto:sage [2007/08/04(土) 14:34:15 ]
>>927
うちのAnthyはそこまでバカじゃない。
送り仮名は「敢えて」俺が書き足した物。

>>ぐぐってみても、「○○する恐れ」は多数ヒットするが、
>>「○○する虞」はごくわずか。

世の中全体が、バカになって来たということですな。
(負の)probabilityをterribleと表記することの
とんでもなさに違和感を感じないとはねぇ・・・

930 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 14:39:54 ]
>>929
英語でも I'm afraid ... って言うじゃん。
単に可能性だけじゃなく、もしそうだったら困ると言うニュアンスがあるから
「恐れ」で的確。
いいことに対しては確率が低くても「恐れ」とは言わないし。

ちなみに、probabilityは 0 <= probability <= 1 でしか定義できない。
負のprobabilityなんて言ってる時点で、お前数学も苦手だっただろw

931 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 15:26:14 ]
悪い事象の発生するおそれって意味じゃないの。
930はprobability=(数学的)確率というバカの一つ憶えしかしてないから
早合点したんだろう。蓋然性って日本語知ってるか?

932 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 15:40:52 ]
>>931
確率を蓋然性と言い替えたところで本質は変わらない。
(数学以外でも)「負の確率」なんて存在しない。
「負の確率」という言葉が出てしまった時点で、アンタの負け。

933 名前:931 mailto:sage [2007/08/04(土) 16:15:22 ]
てんで指摘を理解してないな。俺は929じゃないし。
日本語も英語もダメな人みたいだね。

934 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 16:18:28 ]
もし「悪い事象が起きる確率」のことを「負の確率」と言ったのなら、
それは数学だけじゃなく日本語としてもおかしい。
確率を理解していないことになる。
よって、>>931 のように弁護しても、やはり >>929 は間違い。

935 名前:931 mailto:sage [2007/08/04(土) 16:21:39 ]
やっぱり理解してないなw

936 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 16:22:41 ]
>>934は負の遺産とか負の感情とかいう言葉も使わないんだろうな。


937 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 16:37:03 ]
>>936
負の遺産は本当に「負」だろうが。
借金はマイナスの遺産。マイナスだからこそ「負」と言って正しい。

ところが、確率は絶対に「負」にはならない。
負の確率なんて存在しない。

938 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 16:45:18 ]
新聞でも、「…する恐れ」って書いてるよ。

>>936 は別の意味で「負」を理解してないなw



939 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 17:08:59 ]
937は借金のことを負の遺産というと思ってるのか。


940 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 17:17:16 ]
>>939
借金が負の遺産として一番わかりやすい例ということだろ。
いずれにしても負の遺産はマイナスのものに違いない。

で、「負の遺産」を持ち出しても、「負の確率」を正当化することはできない、
という点は理解してますか?

941 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 17:20:47 ]
じゃあ負の感情についても論破してみて。


942 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 17:28:35 ]
>>941
好感度を数値化できるものとする。
平常心での好感度は0で、何かに好感を持った時プラスの好感度になる。
逆に嫌悪感を持てば、マイナスの好感度になる。
マイナスの好感度は「負の感情」と言ってもいい。
だから「負」で正しい。
(だから「負の確率」を肯定する材料にはならない)

943 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 18:37:06 ]
>>942
別の高尚なスレッドでやってください。

944 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 19:36:54 ]
そうだな。
どうせ表現するならエロでやってくれなきゃわからん。

945 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 21:33:50 ]
漢和辞典ひいてみると、虞の項目には「可能性」という文字はないが、恐れには「可能性」と書いてある。
どちらの項目にも「心配する」の意味はある。
広辞苑でも、恐れのほうが虞より先に載っている。
probabilityは見こみで考えたらいいじゃないかな。

946 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/04(土) 21:54:59 ]
>>945
邪魔だと言っている。

意味が分からないならお得意の広辞苑を引いてくれ。

947 名前:名無しさん@お腹いっぱい。 [2007/08/05(日) 18:41:23 ]
エアコンの室外機が壊れたんですが
お金がないのです
どうしたらいいでしょうか?

948 名前:926 mailto:sage [2007/08/05(日) 18:59:36 ]
>>930-945
夜勤明けに遊びに行って、帰ってきたらば
この有様w
板違いだけど感受性がおもしろすぎて、嬉しくなるねぇ。

ちなみに(負の)probabilityってのは、
negativeな蓋然性の意味で用いた訳だが・・

あ、あと「マイナスの確率」ってのも
概念的には存在しうるね。
(数学ではなく統計学になるけど
日本語として間違いでは無いよね)
虚数よりは遥に理解しやすい。



949 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/05(日) 19:53:10 ]
>>948
土曜に夜勤か。ご苦労さん。
俺は優雅な休日だった。

950 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/05(日) 23:00:59 ]
>>948
符号付(確率)測度なんて、数学では大して珍しくも無い概念だが…?

951 名前:名無しさん@お腹いっぱい。 [2007/08/06(月) 07:38:00 ]
ハッシュ汽盆!!

952 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/06(月) 16:33:27 ]
自己顕示欲の固まりが集まるスレはここでつか?

953 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/06(月) 20:18:07 ]
その確立200%

954 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/06(月) 20:23:11 ]
まあ、おれは例外だけどなw

955 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/06(月) 21:15:58 ]
>>953
×確立
○確率

国語苦手かよw

956 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/07(火) 00:56:36 ]
200%も突っ込みどころだろw

957 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/08(水) 03:18:10 ]
すみません。
シェルスクリプトというかコマンド一発で
デバイス(eth0とかeth1とか)を出力することってできますか?
もしよかったらコマンド一発でおしえてください。お願いします。

958 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/08(水) 03:57:05 ]
くだ質へいきなさい。



959 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/08(水) 09:44:57 ]
Linuxの話ならこっちな。
くだらねえ質問はここに書き込め! Part 150
pc11.2ch.net/test/read.cgi/linux/1185111932/

960 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/08(水) 09:52:29 ]
すみません。
シェルスクリプトというかコマンド一発で
デバイス(fxp0とかde1とか)を出力することってできますか?
もしよかったらコマンド一発でおしえてください。お願いします。

961 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/08(水) 10:04:34 ]
つまんね。

962 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/08(水) 10:26:35 ]
>>960
まずはいっぱつやらせろ。話はそれからだ。

963 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/08(水) 10:50:43 ]
アッーーーーーー!

964 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/08(水) 16:53:39 ]
ふむ
analyzeってことか

965 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/08(水) 17:40:37 ]
くそつまんねえネタはやめろ

966 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/08(水) 18:08:48 ]
ふむ
お通じ快適ってことか

967 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/08(水) 21:00:51 ]
くそスレ化するかどうかのふんばり時だな

968 名前:名無しさん@お腹いっぱい。 [2007/08/09(木) 21:06:16 ]
CentOS Linux on Xen
tcsh 6.13.00

たまになんだけど、
cd dir
ls | echo 1
ls | echo 1 ; echo
ってやったあとに
ls
って打つとtcshが固まるのは何故??

バージョンあげれですかそうですか。



969 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/09(木) 21:10:05 ]
>>968
それはXenとかCentOSにフィードバックしてあげれば?

スレ違いとか板違いっぽいけど

970 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/09(木) 21:10:47 ]
>>968
くそスレ化のための燃料ですか?

971 名前:名無しさん@お腹いっぱい。 [2007/08/09(木) 21:12:46 ]
>969
はえーなw
そうするわ<フィードバック

再現できた。
ls | echo 1^C
ls

972 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/10(金) 10:31:14 ]
aシェルの中でbコマンドをバックグラウンドで実行した場合、
bはまだ実行中だけど、aが終了したときにbにシグナルを送って強制的に終了することってできますか?



973 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/10(金) 11:10:07 ]
>>972
trap "kill $pid;kill -0 $pid && { sleep 1;kill -9 $pid; }; :" EXIT

974 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/10(金) 11:33:26 ]
>>973
trap: Illegal number: EXIT

975 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/10(金) 13:18:19 ]
>>974
trap "kill $pid;kill -0 $pid && { sleep 1;kill -9 $pid; }; :" 0

976 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/10(金) 13:26:23 ]
スクリプトで排他制御をする手っ取り早く確実な方法は何でしょうか?
セマフォ使えればいいんだけど、そんなコマンドないもんね・・・

977 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/10(金) 13:38:33 ]
>>973
ありがとうございます。
ちなみにSIGKILLはどうしようもないですよね・・・

978 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/10(金) 13:41:55 ]
子の側でときどき親が生きてるか確認する、とか。



979 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/10(金) 13:47:20 ]
>>976
FreeBSDには
LOCKF(1) FreeBSD General Commands Manual LOCKF(1)
NAME
lockf -- execute a command while holding a file lock
がある。

980 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/10(金) 23:17:10 ]
>976
lockf は簡単だけど無ければ mkdir を使うんじゃね?

981 名前:名無しさん@お腹いっぱい。 [2007/08/11(土) 19:03:37 ]
ksh93での質問です。

typeset -A で連想配列を使用したいんですが、ksh93でKey値の一覧を取得する方法ってあるんでしょうか?
(Perlでいうとkeys関数みたいな感じで)


982 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/11(土) 20:05:44 ]
ksh93をつかっているUnixってあるんだな。


983 名前:名無しさん@お腹いっぱい。 [2007/08/11(土) 21:25:48 ]
>>982

ソースが公開されてんのって、ksh93だから、LinuxやFreeBSDとかでもpdksh以外のkshを使おうとすると、ksh93になるよね。
逆にksh88的に使いたいならpdkshになるんだけど、pdkshはpdkshでksh88とは振る舞いが結構違うのでいたいところがあるね。
商用系のUnixだと、AIXは/bin/ksh93がksh93、/bin/kshはksh88。HP-UXやSolarisはどうなんだろ?一応、ksh93は存在するみたいだけど・・・


984 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/11(土) 22:08:09 ]
HP-UX11iv1とSolaris8/9/10はksh88しかない。


985 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/11(土) 23:31:11 ]
posix-sh をつかうとか






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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