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


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

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



1 名前:名無しさん@お腹いっぱい。 [2008/05/20(火) 20:58:04 ]
シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>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 でトレースしましょう。

シェルスクリプト総合 その10
pc11.2ch.net/test/read.cgi/unix/1202725267/

339 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 11:50:21 ]
ここでGNU date でやり方書くやつがでて、
Linux厨乙!的な流れですね、わかります。

340 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 11:51:01 ]
GNU dateがあるとして、
while read x; do
date --date="$x" '+%Y.%-m.%-d'
done < hoge1.txt

341 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 11:51:34 ]
Linux厨乙!

342 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 12:20:32 ]
× …hoge2.txt に書き出すシェルスクリプトを作りたいのです。
○ …hoge2.txt に書き出すシェルを発行したいのです。

343 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 12:21:46 ]
BEGIN{
m["Jan"] = 1
m["Feb"] = 2
...
m["Dec"] = 12
OFS = "."
}
{ print $4, m[$3], $2+0 }


344 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 12:27:11 ]
>>343
それ間違ってるよ。動作確認してから書くこと。

345 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 12:47:44 ]
はて、うちの手元では動いてるけど、環境依存な部分あるかな?

346 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 12:48:19 ]
Mon,

347 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 12:51:31 ]
>>344 うちでも動いてる。
>>346 Mon, は関係ないだろ



348 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 12:52:40 ]
月の名前と曜日の名前の区別がつかないんですね、わかります

349 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 13:02:27 ]
で、そろそろ純正シェルでの解法を誰かが投稿する時間だな

350 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 13:08:17 ]
>>338
本当に日付は >>338 のフォーマットしかないと限定していいの?
だったら >>343 でも動くだろうけど、
中には、
Mon Jun 2 08:15:45 JST 2008
みたいな行もあるという仕様じゃないの?
だったら、
(今のところ) >>340 が正解。

351 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 13:09:45 ]
ずいぶん勝手な解釈だな。

352 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 13:11:05 ]
#!/bin/sh
month() {
    case "$1" in
    May) echo 5;;
    Jun) echo 6;;
    esac
}
cat <<END |
Fri, 16 May 2008 09:39:25 +0900
Sun, 18 May 2008 09:30:21 +0900
Mon, 02 Jun 2008 08:15:45 +0900
END
while read line
do
    set -- $line
    echo $4.`month $3`.$2
done

353 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 13:13:38 ]
ああ echo $4.`month $3`.`expr $2 + 0` かな。

354 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 13:15:05 ]
いや、>>344 は、>>343 をシェルで実行しようとしたんじゃないだろうか?
どこにも○○○だとは書かれてないから。

355 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 13:31:19 ]
>>350
だったら、4桁数字だったら西暦、
2桁数字だったら日付、
Jan Feb等に一致したら月、
それ以外のフィールドは無視、というように
全フィールドをチェックすればできるな。

356 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 14:22:51 ]
338です。
あっという間にたくさんのレスが。ありがとうございます。

>>340
>>343
>>352
ありがとうございます。
#!/bin/sh
の後に書いてやってみていますが、まだうまくいきません。
基本的な書き方がわかっていなさすぎなんでしょうね。

>>350
日付のフォーマットはこれだけ限定です。

過去スレ等、さらに読みに行ってきます。
本当に皆さんありがとう。



357 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 14:31:41 ]
>>355
だったら
↓だな。

#!/bin/sh

while read line; do
for f in $line; do
case $f in
[0-3][0-9]) d=$f;;
[1-2][0-9][0-9][0-9]) y=$f;;
Jan) m=1;; Feb) m=2;; Mar) m=3;; Apr) m=4;; May) m=5;; Jun) m=6;;
Jul) m=7;; Aug) m=8;; Sep) m=9;; Oct) m=10;; Nov) m=11;; Dec) m=12;;
esac
done
printf '%d.%d.%d\n' $y $m $d
done




358 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 14:43:10 ]
宗教的に問題ないなら GNU date 入れちゃいなよ。
便利だよ。

359 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 14:44:15 ]
宗教上の理由でそれは出来ません

360 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 14:46:23 ]
ならしょうがない。

361 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 19:29:20 ]
輸血と献血とGNU date は家訓で禁じられてます

362 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 20:25:21 ]
perlで我慢しる

$ cat <<END | perl -ane 'use Date::Parse; $t = str2time($_); ($s,$m,$h,$d,$M,$y) = localtime($t); print $y+1900 . "." . $M . "." . $d . "\n"'
Fri, 16 May 2008 09:39:25 +0900
Sun, 18 May 2008 09:30:21 +0900
Mon, 02 Jun 2008 08:15:45 +0900
END
2008.4.16
2008.4.18
2008.5.2


363 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 20:27:13 ]
use Date::Parse;
($s,$m,$h,$d,$M,$y) = strptime($_);
print $y+1900 . "." . $M+0 . "." . $d+0 . "\n";


364 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 21:12:11 ]
>>362
純正シェルでの >>357 の回答の後にperl出しても意味ないなぁ。

365 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 22:43:18 ]
perlやGNU dateの方が書式に寛容

366 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 22:47:29 ]
perlが入っててもDate::Parseが入ってない環境が多いから動かない環境が多い。

367 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/26(木) 01:57:12 ]
純正シェル(笑)



368 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/26(木) 02:04:04 ]
シェルってゆうな。クズ。

369 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/26(木) 02:05:33 ]
貝殻

370 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/26(木) 02:12:50 ]
ゆうなって言うなこのクズ

371 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/26(木) 03:07:08 ]
稲村

372 名前:265 mailto:sage [2008/06/26(木) 17:31:41 ]
bashのshはシェルの略なので
これからはbaと呼ぶことにします。

373 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/27(金) 10:24:30 ]
338、356です。
勉強始めたばかりで適切なスレを見つけるのもままならない。
質問した後に、スレ違いだったようだと反省している。
実はbashでやっているんだが・・・ってこれを最初に言うべきだったんだね。
皆さんにいただいたヒントでなんとかしようとさらに勉強するつもりだ。
ほんとに親切な人が多いスレで感激しているよ。
頑張ってみる。ありがとう。

374 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/27(金) 10:27:48 ]
まだ出来てないのかよ。

375 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/27(金) 10:32:36 ]
>>373
>>357 をコピペして、適当なファイルに保存(ファイル名hoge)する。
$ chmod +x hoge
$ ./hoge < hoge1.txt
2008.5.16
2008.5.18
2008.6.2

ここまで書かないとわからなかったのかな?
パーミッションとか、リダイレクトとか、./ を付けることとか、、

376 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/27(金) 10:36:14 ]
パーミッションとかわからければ、テキストファイルとして保存して
$ sh hoge < hoge1.txt
でいいし。

377 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/27(金) 10:47:21 ]
>>375
できましたっ!
みんな、ありがとう!




378 名前:名無しさん@お腹いっぱい。 [2008/06/28(土) 16:35:09 ]
ホストをIPに変換するシェルを発行する時、
getentを使いたいのですが、getentって純正シェルでも使えましたっけ?
あと、他にgetentが使えないシェルはありますか?

379 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/28(土) 16:58:49 ]
ホストの人かコンピューターをプロトコルに変換するシェルを開発されるスーパーハカーの方ですねわかります

380 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/28(土) 17:48:26 ]
>>378
外部コマンドならシェルの種類は関係ないでしょ。

381 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/28(土) 18:18:22 ]
zshではシェル関数になっていた > getent


382 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/28(土) 18:21:22 ]
それは俺の知らないzshだ

383 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/28(土) 18:25:32 ]
>>381
それは漏れの知らないzshだ

384 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/28(土) 18:27:34 ]
ashでは not foundって言われた > getent

385 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/28(土) 18:31:13 ]
/usr/share/zsh/4.2.6/functions/compaudit の中に

[[ -x /usr/bin/getent ]] || getent() {
if [[ $2 = <-> ]]; then
grep ":$2:[^:]*$" /etc/$1
else
grep "^$2:" /etc/$1
fi
}

と書いてあった。コマンド実体がない場合にちょー簡略版を定義してるのね。


386 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/28(土) 21:36:48 ]
>>385
その定義だと、コロンで区切られてる前提になってるから、
passwdとgroupにしか使えないね。 (hostsには使えない)

387 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/28(土) 21:47:04 ]
getent hostsって微妙だからな。
libresolv直接叩いているアプリも結構あるし。



388 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 03:08:38 ]
行中にIPアドレスらしき文字列が含まれていたら、それを出力するって
こんな感じで問題ないですかね? もっと綺麗に書ける気もするが・・・
# 1行に1つしか含まれてないと仮定して問題なしです。

text='0.0 192.168.0.1 0.0'
regex='[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*'

echo "$text" | grep "$regex" | sed -e "s/.*[^0-9]\($regex\).*[^0-9]*/\1/"

389 名前:388 mailto:sage [2008/06/29(日) 03:13:28 ]
全然ダメだったorz 教えてください。

390 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 03:30:41 ]
echo $text | grep -E -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'

-oなんてオプション他のgrepにあるか知らないけど

391 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 09:32:03 ]
>>388
grepとsedを一緒に使うのは無駄。sedだけでできる。

sed '/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/s//\1/'

392 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 09:34:43 ]
すまん、-n p 忘れた。訂正。

sed -n '/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/s//\1/p'

393 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 09:35:43 ]
sed -n 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/s//\1/p'

の間違いだろ。初心者はもっと謙虚なレスを書きなさい。

394 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 09:38:27 ]
>>392
それだと頭の数字が食われることがある。

sed -n '/[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/s//\1/p'

とした方がいい。

395 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 09:40:50 ]
だからぁ〜、sedはスレ違い。

>>393 は何を言いたいんだ? (392のあとで)

396 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 09:43:09 ]
と言うか、>>393 の頭の 's/ の部分ですでにsed文法エラーじゃん。
初心者はちゃんと動作確認してから書きなさい。

>>394 が正解。

397 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 09:50:09 ]
>>394 でも、
hoge123 192.168.123.45

みたいな入力があると失敗する。続きは sedスレでやってくれ。



398 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 09:52:24 ]
sed -n '/.*\(\<[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\>\).*/s//\1/p'

で改善されるか?

399 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 09:54:07 ]
模範解答の発行まだー??

400 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 10:04:16 ]
398 で桶

401 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 21:24:06 ]
sed -n 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/p'

402 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 21:44:44 ]
>>401
>>397 の指摘で失格

403 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/30(月) 01:27:41 ]
よほどパフォーマンスに差がありでもしないかぎり、
書き易く読み易いようにすればいい。

404 名前:388 mailto:sage [2008/06/30(月) 01:39:46 ]
みなさま色々とありがとうございました。

>>398
ちゃんと処理できるみたいですし、このスレでも良い評価なので
これを使ってあげようかと思います。感謝してください。

この処理は、あるとても重要な国家プロジェクトで使用されます。
コメントで Powered by 398 と入れておきますね。

405 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/30(月) 01:59:48 ]
なわけねーだろ

406 名前:名無しさん@お腹いっぱい。 [2008/07/02(水) 17:31:55 ]
誰かお願いします。
wk=f
配列にa b c d とそれぞれ入ってるとして
ループでぐるぐるっと、wkと一致するものを探したいんですが、
もし一致するものが無かった場合の終了条件って、どうしたらいいですか。

407 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 17:41:16 ]
日本語でおk



408 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 17:42:11 ]
純正シェルに配列はない。配列に相当する別の処理をしているなら、
その処理方法を明示して質問し直した方がいい。

409 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 17:43:56 ]
>>406
多少エスパーして回答。
ループにwhileを使うんじゃなくて、
forで配列の要素分ループすれば、たとえ一致するものが無かった場合でも
ループはちゃんと終了するから問題なし。

410 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 17:48:51 ]
ループの返り値ってことなら、breakとかを使わん限り最後のコマンドの実行結果になるから、
ループの最後にfalseを置いとけばいいんじゃないかね。
成功した場合はbreakで抜ける、ということならば、だけど。


411 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 17:51:11 ]
>>406 の日本誤訳:

以下のようなシェルを発行しようとしたのですが、
もし一致するものが無かった場合、うまくいきません。
どうすればいいですか?

#!/bin/bash

wk=f
array=(a b c d e)

i=0
while [ ${array[i]} != $wk ]; do
((i++))
done


412 名前:名無しさん@お腹いっぱい。 [2008/07/02(水) 17:57:26 ]
皆様あざーっす!
とりあえず今、KSHって何だって事から教わりました。怒鳴り含み。
ちょっと参考にして、考えます。皆暖かいアドバイスども!

413 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 17:59:21 ]
突然何を言い出すんだ?

414 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 18:08:51 ]
キチガイ警報

415 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 22:22:49 ]
作成したいファイル名が書かれたtxtのリストから、
ファイルを作成するにはどうすればよいでしょうか?

たとえばテキストの中身に、
hoge
foo
bar

とあったとして、
hogeとfooとbarというファイルを作成したいのです。

416 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 22:34:11 ]
>>415
touch $(cat txt)

417 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 22:46:52 ]
>>416
なんでこれでできるのかわからないですができました
ありがとうございます





418 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 02:22:28 ]
>>416 それだと大量だった場合に引数溢れのエラーにならないかな?

419 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 02:25:14 ]
>>418
じゃあ
cat txt | xargs touch

420 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 03:05:13 ]
cat txt|while read FNAME
do
touch $FNAME
done
べたですがw

421 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 07:17:23 ]
>>419
xargsは使っちゃいけないコマンド。

>>420
それだと catが無駄。touchがむだ。

while read FNAME
do
> "$FNAME"
done < txt


422 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 07:19:13 ]
>>416
bash依存、失格。

> `cat txt`

423 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 07:23:31 ]
>>421
415とは関係ないんだけど
パイプでxargsに渡すときに空白をエスケープするにはどうすればいいの
例えばfindで見つけたパスに空白が含まれてた場合とか

424 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 07:49:19 ]
>>423 テンプレ>>6

425 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 07:55:01 ]
>>424
テンプレにあったとは
すいませんでした

426 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 08:02:10 ]
テンプレにはないが、find -print0 | xargs -0 するんじゃなくて、
find -exec +
するのが今後のお勧めだな。-exec の後ろ、\; じゃなくて + ね。

これでxargsは完全に不要!

427 名前:名無しさん@お腹いっぱい。 [2008/07/03(木) 11:31:21 ]
質問です。
case文でwhile文を使用する時
case "$a" in
"a.c")
while[ $flag = false || $i -ne 10 ] ; do
処理1
done
の時、doneの跡に;;でおkですか?



428 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 11:56:24 ]
>>421がFAだけど、敢えてxargs -0で。

cat list.txt | perl -ane '{ chop; printf("%s%c", $_, '\0'); }' | xargs -0 touch


429 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 11:57:44 ]
>>426
この+でappendって、最近のfindはどれにもあるの?

430 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 11:58:53 ]
純正findにないから使っちゃだめ

431 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 12:18:04 ]
>>430
純正findにもあるんだなぁ、+ が。よって find -exec + で FA。

432 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 12:31:00 ]
xargs を使っちゃいけない理由キボンヌ
便利だし早いからコマンドラインで結構使うんですが・・・

433 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 12:31:12 ]
純正find にないのは -print0 の方ですね。

434 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 12:40:55 ]
純正なんとかっていう意味の曖昧な言い方は止めろ
今はPOSIX準拠かどうかの話をしてるようだが、
純正シェルは古い/bin/shの話だったりでわからん

435 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 12:45:23 ]
>>432
$ printf "This is\na test.\n"
This is
a test.
$ printf "This is\na test.\n" | xargs -n 1 echo
This
is
a
test.
$ printf "This is\na test.\n" | perl -ane 'chop; printf("%s%c", $_, '\0');' | xargs -0 -n 1 echo
This is
a test.
$


436 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 12:46:31 ]
& >>6 (>>424は読んだ?)

437 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 13:03:20 ]
>>435
なるほど、理解しますた。分かってれば使えないことはないですな。



438 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 16:40:13 ]
まぁ実験して動いたらそれでまずOK。
でその後にリファイン(リファクタリング?) 
これが大事。

439 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 17:28:35 ]
>>6
> (スペースなどを含むファイル名を正しく処理するため、
> findは -print0、xargsは -0オプションを常に付けることを推奨
> ただし、Solarisでは未対応。どうするんだろ?)

$ cat print0
#! /bin/sh
while read x; do
printf "%s\0" "$x"
done

$ find 〜 | print0 | xargs -0 〜

でいいんじゃね?
# printfは許してね。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<109KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef