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


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

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



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

前スレ
シェルスクリプト総合 その9
pc11.2ch.net/test/read.cgi/unix/1187130302/

638 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 19:53:17 ]
>>626
礼儀知らずで申し分けありませんでした。テンポラリファイルを作るというこ
とは、シングルユーザーモードなどで、リードオンリーファイルシステムだと
here doc を使ったシェルスクリプトは動かないということでしょうか?


639 名前:名無しさん@お腹いっぱい。 [2008/04/13(日) 20:15:12 ]
エディタの置き換えでも出来る事なのですが良ければ教えてください

わるs
わるk
わるi
わりこn
わりこm
わりあt
じょうち
じょうちょう
じょうなん
のように語尾にアルファベットが付いているのと付いてないのがあるんですけど
アルファベットを削除する方法とかってSEDではどのようにするのでしょうか?


640 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 20:20:09 ]
>>639
sed 's/[a-z]$//'

641 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 20:56:04 ]
>>586-587
bash依存じゃないだろ。kshでも使えるから、標準で使っていいんじゃないの?

642 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 02:04:22 ]
>>641
読まずにりぷらい、まあ、もちつけ共通拡張かも知れないだろ。
POSIXに規定されているか読みなおすんだ。

643 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 13:18:12 ]
配列の値の設定ってバックスラッシュか何かで
複数行にまたがって書くことはできないのでしょうか?

644 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 13:36:12 ]
>>643
できる。シングルクォートを使うのがいい。

$ hoge=('aaa
aaa
aaa'
'bbb
bbb
bbb')
$ echo "${hoge[0]}"
aaa
aaa
aaa
$ echo "${hoge[1]}"
bbb
bbb
bbb


645 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 14:56:04 ]
>>644
どうもありがとうです

646 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 15:00:53 ]
はいはい、バッシュ依存。



647 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 21:22:58 ]
kshでも使えるからデファクトだろ?

648 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 13:24:12 ]
Solaris8上でBourne Shellを用いてスクリプトを書いています。
dateコマンドを整形する際にシングルクォートで括りますが、
$ echo `date '+%H%M`
などとしても通ってしまうのは何故なんでしょうか?

649 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 13:54:55 ]
>>648
Solarisのバグです。シングルクォートはちゃんと閉じましょう。

650 名前:名無しさん@お腹いっぱい。 [2008/04/15(火) 20:40:12 ]
シェルを始めたのですが、変数でいきなり詰まりました ><
$i = 123;
=: command not found
もしかしてシェルでは = は外部コマンドなんでしょうか?

651 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 20:47:30 ]
何シェルかくらいかこうぜ・・・

i=123

652 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 20:49:37 ]
>>651
今度はこうなります
i = 123
i: command not found

653 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 20:57:39 ]
>>651のをコピペしな

あと、何シェルかくらいかこうぜ・・・

654 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:03:03 ]
>>653
この場合何シェルか関係あるか??

655 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:24:30 ]
関係有るから指摘している。
が、cshだったら他所へ行ってくれ。

656 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:26:27 ]
cshだったらエラーメッセージが違うじゃん。回答者はそれくらい見抜かないと。



657 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:27:17 ]
>□お約束
>・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
> bash/zsh/ksh/ashなどに依存する場合は明示しましょう。


658 名前:650 mailto:sage [2008/04/15(火) 21:30:24 ]
#!/bin/shです。
i = 123;
ってやっても、やっぱり
i: command not found
と出ます><

659 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:31:33 ]
650はネタなのかマジなのか。

660 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:50:24 ]
シェルでは = は比較を表す (例: [ $i = 123 ] )
代入は := で。

661 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:50:27 ]
i = 123でなくてi=123です。スペースを入れてはいけません。

662 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 22:08:02 ]
ネタはほっとけ。

663 名前:名無しさん@お腹いっぱい。 [2008/04/16(水) 08:48:00 ]
質問させて下さい。

あるディレクトリ以下の、特定の拡張子(.tig)をもつファイルの(find ./ -name "*.tig")
名前を変えて( hoge.tig -> hoge_org.tig)
その二つの名前を与えたコマンドを実行したいです。( hoge -t hogu hoge_org.tig hoge.tig)

for org_name in `find ./ -name "*.jpg"`
do
$name = $org_name + "_org";
echo $org_name; echo $name;
done

と言うのを考えてみたのですが、エラーでうまく行きません。
あと、拡張子の前に名前を追加したいのですが、実現方法が分かりません。

もしよろしければ、教えて頂けると助かります。
よろしくお願いします。


664 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 08:53:43 ]
>>663
とりあえず、
$name = $org_name + "_org";
の部分のみに回答。
まず、perlみたいな書き方の癖はやめろ。

name=`basename $org_name .jpg`_org.jpg


あと、質問が、最初は .tigと言ってるのに下のfor文は .jpgで、矛盾してるぞ。

665 名前:663 mailto:sage [2008/04/16(水) 08:58:21 ]
ありがとうございます。
それがわかれば、なんとかできそうです。

.jpgなのは、ローカルな環境でテストをしたため違うファイルを使っていました。



666 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 13:41:14 ]
findでやってるから'/'含みのpathnameになる。
しかしbasenameは最後のコンポーネントだけ切り出してしまう。

name=`echo $org_name | sed 's/.jpg$/_org.jpg/'`

の方が良いと思われ。あるいは、

dir=`dirname "$org_name"`
org=`basename "$org_name"`
new=`basename "$org_name" .jpg`_.org.jpg
orgpath="$dir/$org"
newpath="$dir/$new"



667 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 18:41:06 ]
phpのsystem関数から
シェルコマンドを実行を試してます。

lftp -f hoge.conf
rm hoge.conf
したいのですが、
lftp -f hoge.conf がかなり時間がかかるため、
lftp -f hoge.conf > /dev/null & してから
rm hoge.conf を実行したいと思います。

system("lftp -f hoge.conf > /dev/null & rm 000 hoge.conf");
とすると
lftpが正常に実行されません。
おそらくrmがlftp完了前に実行されているからと思いますが、
どのように記述すれば良いでしょうか?

どなたかご教授くださいませ。


668 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 18:56:25 ]
>>667
system("lftp -f hoge.conf > /dev/null ; rm hoge.conf");
じゃだめなの?

669 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 19:08:25 ]
OSコマンドインジェクションを入れ込まないように気をつけろよ

670 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 19:08:44 ]
& を何だと思ってるんだ

671 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 19:26:22 ]
system("(lftp -f hoge.conf > /dev/null ; rm hoge.conf) &");
こうかな

672 名前:667 mailto:sage [2008/04/16(水) 19:36:29 ]
>>668
これだと rm hoge.conf が lftp 完了前に実行されたようです

>>671
"("なんてしらねーよ、みたいなエラーが出てしまいました。

673 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 19:49:57 ]
>>672
system("sh -c 'lftp -f hoge.conf > /dev/null ; rm hoge.conf' &");

674 名前:667 mailto:sage [2008/04/16(水) 20:08:22 ]
>>673
神サンクスです!!それでいけました!

675 名前:667 mailto:sage [2008/04/16(水) 20:35:38 ]
すいません、
いけたと思ったら、lftpが終わるまでブラウザで読み込みが続いてしまいます。

www.stackasterisk.jp/tech/php/php02_02.jsp
----------------------------------------------
> /dev/null」 が「リダイレクト」に相当する記述です。
/dev/null というのは、「ゴミ箱」と思って頂いて構いません。
すべての出力を捨てます。
最後の & は、バックグラウンドで実行するという意味です。
このあたりの詳しいことは UNIX のシェルの本をみれば載っています。
「PHPはそのプログラムの実行が終了するまでハングします」というのは、
つまり IE の地球マークが廻りつづける状態をいいます。
----------------------------------------------
というのを参照しています。

676 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 02:33:27 ]
ぐぐって得た付け焼き刃の知識をこねくるんではなく
一度基礎から勉強した方がよろしいかと。



677 名前:名無しさん@お腹いっぱい。 [2008/04/17(木) 08:36:16 ]
>>675
結局jpgなんだねw


678 名前:名無しさん@お腹いっぱい。 [2008/04/17(木) 12:33:53 ]
シェルスクリプトで関数計算とかできるの?

A= 2√3/0.0000456789*π+$hoge
echo $A

小数点以下なげーとか・・・・


679 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 12:47:28 ]
>>678
$ hoge=123
$ echo "2*sqrt(3)/0.0000456789*(a(1)*4)+$hoge" | bc -l
238368.58352774053454525488

注: πは (a(1)*4) で表す。(atan(1) = π/4 を利用)

680 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 12:53:56 ]
そういう場合はbcとか関数計算を行うプログラムに実行させる。

POSIXシェルならば整数の四則演算が行えるので、この上に(関数演算を含む)
浮動小数点演算を実装すればシェル単独でも可能。

681 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 13:00:42 ]
>>679 少し分かりやすく
hoge=123
pi="(a(1)*4)"
echo "2*sqrt(3)/0.0000456789*$pi+$hoge" | bc -l

682 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 13:14:45 ]
実例 >>679 が投稿された「あと」で、
実例示せずに能書きだけ書いてる >>680 ってマヌケだよなぁ。

683 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 14:29:32 ]
「やりかた」を書くだけで間抜けなのか

684 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 14:33:27 ]
具体的な「やりかた」を書いているのは >>679 の方。
>>680 は具体的な「やりかた」を何ひとつ書いていない、だから間抜け。

685 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 14:34:14 ]
そんなことより、批判だけするやつのほうが・・

686 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 15:55:30 ]
シエルで、フォントサイズを変えるのはどうやるんですか

A$ = "エラーが発生しました"
echo A$

のところで、「エラー」の文字だけ大きくしたいんですが



687 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 16:00:27 ]
banner Error; echo 'が発生しました'

688 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 16:46:29 ]
仮想端末のエスケープシーケンスにフォントサイズ変更があれば
「エラー」の前後にそのエスケープシーケンスを書けばいい。
色やブリンクの有無といった変更も同様。


689 名前:名無しさん@お腹いっぱい。 [2008/04/17(木) 19:13:26 ]
スクリプトの神様

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


690 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 19:54:36 ]
banner面白いなw

691 名前:名無しさん@お腹いっぱい。 [2008/04/17(木) 22:12:31 ]
>>679 >>680 >>681 神よ! d(゚Д゚)☆スペシャルサンクス☆( ゚Д゚)b

さて、Excelを窓からブン投げるかw

692 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 01:03:30 ]
このスレは定期的に神が現れるな。的確で即レス、何者なんだろ

693 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 01:38:31 ]
>>686
少し目的からずれる気がするが、以前どっかのスレに
投下したスクリプトをちょっと改造したもの。

#! /usr/bin/env bash
# vivid_error.sh -- 標準エラー出力に色を付ける
# Original:
# ttp://d.hatena.ne.jp/goth_wrist_cut/20080122/1201003827

name='vivid_error.sh'
(( $# > 0 )) || {
echo "error: $name: No argument." 1>&2
exit 1
}

temp=$( mktemp "$TEMP/$name.$PID" )
rm -f "$temp"
mkfifo "$temp"

sed 's/.*/1m\0m/' < "$temp" 1>&2 &
"$@" 2> "$temp"
status=$?

rm -f "$temp"
exit "$status"

694 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 02:37:38 ]
ESC=$(printf '\033')
とかするのおすすめ

695 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 08:19:53 ]
terminfoなsystemじゃないとtputはないかも。

BOLD=`tput bold`
EXIT=`tput sgr0`
printf "${BOLD}This ${EXIT}is a ${BOLD}test${EXIT}.\n"

カラーも可能。
文字列加工はsed等で。


696 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 13:32:39 ]
fifoなんていらないよね。

#!/bin/sh
# 標準エラー出力に色をつけてコマンドを実行
if [ $# -eq 0 ]
then
    echo "Usage: $(basename $0) command args..." 1>&2
    exit 1
fi

exec 3>&1
ESC=$(printf '\033')
"$@" 2>&1 1>&3 | sed "s/.*/$ESC[1;31m\0$ESC[0m/" 1>&2



697 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 18:50:18 ]
初歩的な質問ですが
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
の様に変更したいのですが・・・
sed -i "s/^LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined/LogFormat \"%h %l %u %t \\\"%!414r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined/g" /root/test
で良い様に思うのですが・・・
"%h \"の様な所でエラーが出て変換ができません よろしくです

698 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 18:51:56 ]
初歩的な質問ですが
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
の様に変更したいのですが・・・
sed -i "s/^LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined/LogFormat \"%h %l %u %t \\\"%!414r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined/g" /root/test
で良い様に思うのですが・・・
"%h \"の様な所でエラーが出て変換ができません よろしくです

699 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/20(日) 18:53:14 ]
なんとなくワロタ

700 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/20(日) 19:48:07 ]
>>698
まず、sedプログラム本体は " " じゃなくて ' 'で囲むこと。
" " だといろいろエスケープが面倒。

701 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 21:47:22 ]
>>700
ありがとうございました 修正できました

702 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 22:34:02 ]
シェルスクリプトでPerlとかRubyのchopと同等なことって、
どうすればいいですか?
bash限定でもかまいません。

703 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/20(日) 22:42:41 ]
>>702
シェルでは、何も考えなくても readとかで読み込んだら自動的に chopされてる。

704 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 23:31:00 ]
>>703 さっきは、
「echo -nで改行が取れないなあ、あれ?」って状態で質問したのですが、
readでも取れませんでした。で、ようやく\r\n改行だったことに気づきました。
bashの%*\r*で解決しました。

705 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 00:26:14 ]
質問させてください

テキストファイル内に

建造物 (けんぞうぶつ)
構築物 (こうちくぶつ)
構造体 (こうぞうたい)

()でくくられた文字のみを取り出したいのですが可能でしょうか?

706 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 00:36:23 ]
>705
いくらでも方法はある。
sed、awk、perl あたりなら一行野郎でいける。

awk -F '\\(|\\)' 'length($2)>0{print $2}'




707 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 00:44:02 ]
>>706
レスありがとうございます!
ちなみにsedだと、どういう風になりますか?


708 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 02:15:09 ]
>>706
建造物 (けんぞうぶつ) 構築物 (こうちくぶつ) 構造体 (こうぞうたい)
こういうテキストのこともないかな。





709 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 02:19:44 ]
$ echo '建造物 (けんぞうぶつ) 構築物 (こうちくぶつ) 構造体 (こうぞうたい)' | sed 's/[^(]*(\([^)]*\))/\1/g'
けんぞうぶつこうちくぶつこうぞうたい


710 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 18:20:49 ]
多分、作りこまないと駄目だと思うんですが、駄目元で質問します。
`find .`の結果を各ディレクトリ毎に、
第1のソートキー:ディレクトリorファイルの別(ディレクトリが先)
第2のソートキー:更新時間の降順
でソートしたものが欲しいです。
ファイルブラウザとかだと、そういう表示が出来るので、
もしかすると、簡単におこなう方法があるのかな?と密かに期待してます。
宜しくお願いします。

711 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 18:56:59 ]
普通に考えたら出来る

712 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 19:01:20 ]
>>711
結果をファイルに出力してもいいのであれば、
find -type dでループを回していけばやれるのはわかっているのですが、
作業ファイルを介さずにそのままwhile readで受け取れるくらい
簡単な方法がないかな?と思って質問させて頂きました。

713 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 19:12:16 ]
多分スクリプト言語使った方がいいと思う

714 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 19:19:38 ]
>>713
ちょっとごめんなさい
ディレクトリは名前順でもいいです。
当初>>710で書いたよりはずっと簡単に実現できます。

715 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 19:19:44 ]
>>711
そういうことはお前の考えた結果を貼ってから家。

716 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 19:26:48 ]
>>714
「ディレクトリが先」という条件さえなければ、
単に ls -latR で行ける。findすらいらない。

>>712
結果をファイルに出力する方法でやる方法がわかってるなら、
それをファイルに出力しない方式に書き換えることは多分できる。



717 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 19:31:02 ]
>>710
GNU ls使えば、
ls -latR --group-directories-first
で一発。


718 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 20:23:19 ]
みなさんどうもありがとうございました。
結局(とりあえず)、
find -d でループを回して作業ファイルを作る方法にしました。
ディレクトリは名前順でファイルは更新時間降順にしました。
ちなみにGNU ls 5.21で--group-directories-firstはサポートされてませんでした。

719 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 21:04:47 ]
find ... -print0|xargs -0 ...
と区切りをわざわざ^@にするのが推奨されてるのって何故なんですか?

720 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 21:13:18 ]
他の文字はファイル名に使われてるかもしれないから。

721 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 21:55:46 ]
-print0|xargs-0を使うのは石器人。
現代人なら-exec utility_name [argument ...] {} +

722 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 21:57:15 ]
いまさら-execはちょっと…という気分
気分だけね

723 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 22:08:08 ]
>>722
お前、行末の「+」の意味知ってて発言してるのか?

724 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 22:15:16 ]
>>718
GNUコマンド群くらい最新にしとけよ。6.xなら使える。

725 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 02:59:08 ]
>>724
バージョンアップできない(許可されない)環境って結構多いぞ。
(*nix系ならローカルに実行環境つくれば済む話だが)

726 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 07:04:01 ]
>>725
もしそういう環境なら、GNU lsを入れること自体許可されないだろ。
(古いバージョンとは言え)GNU lsが入っているということは、
OS標準じゃないコマンドを自分でインストールしてもいい環境と考えられる。



727 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 10:39:16 ]
システム構築時にGNU系を入れて構築、運用開始した後、
バージョンアップの費用(現システムの稼働確認費用)が認められないため、そのままってパターンが多い。

そういうトコだと、ローカルに新版lsをコピーしてくる方が(手続き的に)楽だったり。

728 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 12:30:34 ]
>>710
タイムスタンプが、
2008-04-22 12:30
こういう形式で、
$6, $7にあると仮定すれば、
ls -l | sort -k 6,7 | sort -sr
でいい。-sはstable sort。

729 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 13:27:05 ]
>>728
それだと symbolic link が先頭に来てしまうので失格。

730 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 13:30:00 ]
>>728
というか、せっかく sort -k 6,7 したあとで sort -sr したら
最初の sort -k 6,7 が無意味になってしまうし、全然ダメじゃん。

731 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 19:43:49 ]
つ sort -srk 1,1

732 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 19:58:42 ]
>>731
>>729
失格。

733 名前:名無しさん@お腹いっぱい。 [2008/04/23(水) 15:40:13 ]
Apache の mod_ext_filter モジュールを利用したスクリプトを作成しています。

Apache --標準出力--> script --標準出力 --> Apache を行うスクリプトにて、
Apache からの標準出力を $temp_file に書き出して主な処理をした後に
cat $temp_file を行い Apache に返しているのですが、

#!/bin/sh

temp_file=`mktemp`
while read line
do
echo "$line" >> $temp_file
done

ファイル操作

cat $temp_file
rm -f $temp_file


上記コードだと、HTML ソースに \ $ ` などが入っていた際に、
echo "$line" >> $temp_file で意図せぬ動作が起きてしまいます。

またファイルに書き出す事で処理速度の低下も考えられるので、
Apache からの標準出力(複数行)を変数に格納する方法はないかと思ったのですが、

どなたかご教授ください。

734 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/23(水) 20:08:40 ]
>>733
それはシェルのreadの仕様だから仕方ない。
そもそも while readで読む必要ないだろ。

while do ... done の部分全部を、
cat > $temp_file
に置き換えればよろし。

735 名前:733 mailto:sage [2008/04/23(水) 20:31:31 ]
>>374
おぉ、色々と勘違いしていたみたいですね。
ご指摘の方法でやってみたところちゃんとできました。
すみません、ほんと有難うございます。


736 名前:733 mailto:sage [2008/04/24(木) 00:18:33 ]
733です。
度々すみません。

#!/bin/sh

temp_file=`mktemp`
cat > $temp_file

ファイル操作

cat $temp_file
rm -f $temp_file

確かにご教授いただいた上記コードで可能なのですが、
Apache からの標準出力をファイルに書き出さず、変数として処理する事は出来ないのでしょうか?



737 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/24(木) 00:55:16 ]
そんなに速度が気になるなら他の言語でやったほうがいい

738 名前:733 mailto:sage [2008/04/24(木) 01:45:55 ]
>>737
ありがとうございます。
色々試行錯誤してみます。






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

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

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