トップページunix
987コメント345KB

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

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001名無しさん@お腹いっぱい。2008/10/16(木) 00:48:38
シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>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 でトレースしましょう。

前スレ
シェルスクリプト総合 その12
http://pc11.2ch.net/test/read.cgi/unix/1218277263/
0813名無しさん@お腹いっぱい。2009/01/18(日) 22:49:02
>>809
「人の間違いを指摘した」のではなく、
「もともと正しかった人を『間違ってる』と指摘した」(>>797)のだから、
話が違うだろ。
0814名無しさん@お腹いっぱい。2009/01/18(日) 23:03:03
>>813

お前がいつもやってることだろ。
誰か他の人間は釈明要求とかしたか?

早く消えろ。
お前がいるとシェルスクリプトその物の評価が下がる。
結果、クソOSが跋扈する。

あ・・さてはお前、windozeの回し者か?
このスレが荒れて流れりゃボーナス倍増か?
・・・ってそんな感じ。
0815名無しさん@お腹いっぱい。2009/01/19(月) 00:54:06
いやはやしかし、whileにあんな書き方があるとは。
while
hoge
hage
kasu
[ $x -ne 0 ]
do

頭固いからよくわからん、なにがどうなってるのやら。

ところで、logのこのメッセージって何。
loggerでログ取ったら紛れ込んでくるんだが。
daemon.infoカテゴリー

last message repeated 2 times
08167612009/01/19(月) 01:03:47
こんなに色々やり方があるとは思わず、大変勉強になりました。
皆さん色々なアドバイス、ありがとうございました。
0817名無しさん@お腹いっぱい。2009/01/19(月) 01:14:31
htmlを拾ってきて、リンクのところだけ抽出したいと思ってるのですが、
とりあえず下のようにa hrefタグだけ抜こうとしてもうまくゆかないです。
なんででしょう?

echo ' fadadf <a href="2xxxxxx"> fdskaf' | sed 's/\(<a href[^>]*>\)/\1/'
0818名無しさん@お腹いっぱい。2009/01/19(月) 01:26:44
>>817
htmlの内容にもよるけど、
< a href="hoge">hoge<\a>< a href="hoge2">hoge2<\a>< a href="hoge3">hoge3<\a><br>
っていう感じだからそれじゃ全然だめ。

例題はこれでいけたけど?
echo ' fadadf <a href="2xxxxxx"> fdskaf' | sed -E 's/.*(<a href[^>]*>).*/\1/'
0819名無しさん@お腹いっぱい。2009/01/19(月) 01:36:53
大雑把でいいんならこんな感じ。
strings hoge.html | fold -s -w 60 | grep "href"
よくfetchでエロを(ry
0820名無しさん@お腹いっぱい。2009/01/19(月) 01:59:23
>>818
ありがとうございます
そういえばマッチするとこの前後を考えてませんでした。
一応対象のファイルは1行につき<a href>タグ一個なのでうまくいきそうです
>>819
これは初めて知りましたがうまくつかうと楽そうですね

0821初心者です2009/01/19(月) 18:53:31
初心者ですが、スレ違いだったらすみません。
教えてください。
最近10日以内に変更したファイルやディレクトリ(新規作成ファイルを含む)を検索して、ディレクトリとファイル名の詳細(ls -ltrのような感じ)を変更時刻でソートして画面出力したいのですが、どなたかご教授お願いします。

ちなみに、IBMのAIXを使っています。
0822名無しさん@お腹いっぱい。2009/01/19(月) 18:57:12
>>821
変更時刻でソートをちゃんとやるのは難しい。

find / -mtime -10 -ls
あたりで我慢して。
0823名無しさん@お腹いっぱい。2009/01/19(月) 19:03:00
>>821
AIXは知らんが、-print0が使えるfindがあるなら、

find / -mtime -10 -print0 | xargs -0 ls -ldtr

なければGNU find入れれば使える。
0824名無しさん@お腹いっぱい。2009/01/19(月) 19:06:39
xargsを使うな!

>>821
find . -mtime -10 -exec ls -ldtr {} +


コマンドラインの最後、「+」 なので注意してね。
0825名無しさん@お腹いっぱい。2009/01/19(月) 19:06:56
GNUのlsなら--time-styleで時刻の表示形式を決められるので
ソートしやすい形式にすれば楽だと思うよ。
0826名無しさん@お腹いっぱい。2009/01/19(月) 19:10:50
>>823,824
それだとファイルが多いときにlsが複数回起動されて、lsによる
ソートが起動毎になっちゃうからだめなんじゃない?
0827名無しさん@お腹いっぱい。2009/01/19(月) 19:19:39
>>826
実用上問題ないからヨシとする
0828名無しさん@お腹いっぱい。2009/01/19(月) 19:25:53
なんで、問題ないってわかるんだよ。制限値は意外と小さいぞ。
0829初心者です2009/01/19(月) 19:49:11
822〜828の方々へ

早速のレスありがとうございます。
本当に助かりますし、心強く思います。
ただ、私はただいま会社にいませんので、すぐにでも試したいのですが試せないんです。
明日会社で必ず試してみます!
0830名無しさん@お腹いっぱい。2009/01/19(月) 20:16:21
1回のlsにおさまらなかったらこんな感じでいけると思う

find . -mtime -10 -exec ls -ld --time-style=full-iso {} + | sort -k 6,7

日付の表示形式が気に食わなければ+FORMATでdateコマンドと同様の
フォーマット文字列が使えるので工夫してくれ。
0831名無しさん@お腹いっぱい。2009/01/19(月) 20:19:38
GNUツール禁止
0832名無しさん@お腹いっぱい。2009/01/19(月) 20:19:51
まあ、あれだ。AIXだから GNUコマンド群は使えないというのがネックになるだろう
0833名無しさん@お腹いっぱい。2009/01/19(月) 20:33:02
find で -ls した結果を保存。
分単位でソート。
同じ分のファイルごとにグループに分けてls -ltrdでソート。
(グループ内にはそれほど多量にないと仮定)
連結。

コードは誰かまかせた。
0834初心者です2009/01/19(月) 20:41:25
たびたび、初心者です。
みなさん、レスありがとうございます。

「変更時刻でソートして画面出力」と書きましたが、誤解があってはいけませんので、目的を書きますが、
ファイルの新しいものが一番下にくるように画面出力したいのです。
正しくは、変更時刻とは分単位ではなく、タイムスタンプの順番です。
ですから、できることなら100分の1秒でも新しいファイルが下に来てほしいです。

この目的だと、どんな記述がよろしいでしょうか?




0835名無しさん@お腹いっぱい。2009/01/19(月) 21:12:36
(1)
find で -ls した結果を保存。

(2)
argsがオーバーフローしないように、
上から1000ファイルずつ区切ってそれぞれをls -ltrdでソート。

(3)
次に、上から500ファイルを飛ばして、
その次から1000ファイルずつ区切ってそれぞれをls -ltrdでソート。

(4)
今の状態を一時保存し、(2)と(3)をもう一度繰り返す。
その結果が一時保存した結果と変わっていれば、再度(2)から繰り返す。
変化がなくなればソート完了なので、これで終了。

コードは誰かまかせた。
0836名無しさん@お腹いっぱい。2009/01/19(月) 21:25:28
>>834
ファイルの持っているタイムスタンプは秒単位だから
1/100秒とかは無理

・・・AIXのFSは知らないけど
0837名無しさん@お腹いっぱい。2009/01/19(月) 21:36:19
GNU lsがないと秒単位のタイムスタンプも取得できないんだよなぁ
0838名無しさん@お腹いっぱい。2009/01/19(月) 21:40:19
通常ファイルだけならdiff -cでも取得できるでしょ。
ディレクトリはわからんなぁ。
0839名無しさん@お腹いっぱい。2009/01/19(月) 21:43:26
diff -c の裏技でタイムスタンプ取得できるのは
通常ファイルの中でも、テキストファイルだけ。
バイナリファイルだと diffに拒否される。
0840名無しさん@お腹いっぱい。2009/01/19(月) 21:46:15
こっちでは diff -ac でできるけど、OS依存?
0841名無しさん@お腹いっぱい。2009/01/19(月) 21:48:42
>>840
diff の -a は GNU 依存だろ。
0842名無しさん@お腹いっぱい。2009/01/19(月) 21:54:14
そうか。
じゃあ>>833>>835だな。
>>835って、2ファイルずつだとバブルソートをシェルスクリプトで実装する感じだな。
0843名無しさん@お腹いっぱい。2009/01/19(月) 22:03:34
tr とかで半角カナを消したいんですけどどうすればいいでしょう?
0844名無しさん@お腹いっぱい。2009/01/19(月) 22:05:35
んじゃ別解

mkdir ../temp
find . -mtime -10 -exec ln {} "../temp/`echo '{}'| tr / :`" \;
ls -t ../temp | tr : /
0845名無しさん@お腹いっぱい。2009/01/19(月) 22:07:14
>>821 >>834

適当な一時ディレクトリを作り、
その一時ディレクトリに find の結果出て来たファイルをすべて ln -s する。

その一時ディレクトリ上で、
ls -lLdtr を実行して結果を画面に表示。

一時ディレクトリをシンボリックリンクごと削除。

コードは誰かまかせた。
0846名無しさん@お腹いっぱい。2009/01/19(月) 22:10:18
勝ったな。完璧に勝った。
0847名無しさん@お腹いっぱい。2009/01/19(月) 22:11:39
>>844ってディレクトリはどうなんの?
0848名無しさん@お腹いっぱい。2009/01/19(月) 22:14:29
お題の「ファイル」という条件が抜けてたな。
0849名無しさん@お腹いっぱい。2009/01/19(月) 22:14:49
>>844 は、別ファイルシステムが含まれてると対応できないし、
ディレクトリ自体のタイムスタンプがチェックできないし、
ファイル名に : が含まれていると破綻する。

>>845 でいいじゃん。
0850名無しさん@お腹いっぱい。2009/01/19(月) 22:17:10
>>845>>844 も、
異なるディレクトリに同名のファイルがあったら破綻するのでは?

/hoge/file と /boke/file とか。
0851名無しさん@お腹いっぱい。2009/01/19(月) 22:19:42
>>844はそれを:で逃げようとしてるわけで(不完全だけど)、
>>845でうまくエスケープするコードも必要。
0852名無しさん@お腹いっぱい。2009/01/19(月) 22:19:53
みんな色々言ってるけど、実際に自分が必要となったら
PerlとかRubyとか使うんじゃないの?

find path -mtime -10 -print | perl -e 'chomp( @all = <> ); print join "\n", sort { -M $b <=> -M $a } @all;'
0853名無しさん@お腹いっぱい。2009/01/19(月) 22:22:15
自分なら GNU ls (coreutils)を入れて --time-style= で出力して
sort一発にするなぁ。
0854名無しさん@お腹いっぱい。2009/01/19(月) 22:23:58
そういうのを入れないでこのお題を解くという空気が流れているんだが
0855名無しさん@お腹いっぱい。2009/01/19(月) 22:26:12
>>854
>>853>>852 に答えたんだが、、
お題を解くのとは別に、実際に自分が必要になった場合の話。
お題の解は実際には実用にならないので。
0856名無しさん@お腹いっぱい。2009/01/19(月) 22:28:38
あれば使う。
無くてもやらなきゃならない場合がある。
0857名無しさん@お腹いっぱい。2009/01/19(月) 23:09:33
無理に一つのやり方に決めることもないんで、いろんなやり方を考えて
みる方が幅が広がっていいんじゃねー?
0858名無しさん@お腹いっぱい。2009/01/19(月) 23:21:28
symbolic linkと-Lを組み合わせるやり方は目から鱗だったが、
先のファイルがsymbolic linkだったときは結果が違ってしまう
のが惜しいね。
0859名無しさん@お腹いっぱい。2009/01/19(月) 23:42:08
posixには-Lが無いからハードリンクにしたのだが。
0860名無しさん@お腹いっぱい。2009/01/20(火) 00:07:19
AIXにはstat(1)はあるっけ?
0861名無しさん@お腹いっぱい。2009/01/20(火) 00:30:45
stderrとstdoutを端末に出力しつつ、それぞれ分けてファイルに出力したいのだけど、可能でしょうか?

command 2>> /tmp/stderr.log | tee -a /tmp/stdout.log

こんな感じでやってみてるのですが、上記だと端末にstderrは出ません。
0862名無しさん@お腹いっぱい。2009/01/20(火) 00:35:41
分けんのは無理だね。
別の端末でtail -f /tmp/stderr.logしなよ。
0863名無しさん@お腹いっぱい。2009/01/20(火) 06:42:12
>>861
できるよ。
(command | tee -a stdout.log) 2>&1 > /dev/tty | tee -a stderr.log


>>862
無理じゃないよ。
0864名無しさん@お腹いっぱい。2009/01/20(火) 09:28:24
zshなら素直にかけるんだけどね。

sh hoge.sh > >(tee stdout.log) 2> >(tee stderr.log)
0865名無しさん@お腹いっぱい。2009/01/20(火) 14:53:39
>>863
さらに、commandのexit statusを得ることは出来ないでしょうか?
0866名無しさん@お腹いっぱい。2009/01/20(火) 15:08:28
>>865
できるよ。

(((command; echo $? 1>&3) | tee -a stdout.log) 2>&1 > /dev/tty | tee -a stderr.log) 3>&1
0867名無しさん@お腹いっぱい。2009/01/20(火) 15:54:51
>>866
それだと、exit statusが表示されてしまうだけだ。

ややこしくなるけど↓かな。

(((command; echo $? 1>&3) | tee -a stdout.log) 2>&1 > /dev/tty | tee -a stderr.log > /dev/tty) 3>&1 | (read s; exit $s)
0868初心者です2009/01/20(火) 20:50:30
昨日質問させていただきました「821,829,834」です。
皆さん、本当にいろいろアドバイスいただき、ありがとうございました。
無事、できました!感激です!

特に、「824」さんの解答にあった通りにしたら、できました。
ありがとうございます。
ところで、もしこのレスを見ていたらで結構ですので、たびだび質問で恐縮ですが、
find . -mtime -10 -exec ls -ldtr {} +
の最後の+記号の意味はなんでしょうか?
私がもっている本で調べたりしても、のっていなかったので、もしよかったら教えてください。

他の方々の例もいろいろと勉強になると思い、試してみたのですが、まだまだ、私の勉強不足で思い通りに動かなかったりしました。
どうやら私の会社のUNIXは、GNUツールが使えないようです。残念・・・

でも、みなさんのアドバイス、本当にうれしかったです。
ありがとうございました。
また、何かありましたらご教授ください。
08698272009/01/20(火) 20:55:31
やっぱり「実用上問題ないからヨシ」じゃん
0870名無しさん@お腹いっぱい。2009/01/20(火) 21:11:22
ある日emacsあたりを新規インストールあるいは更新して、
全部出てこないじゃないかーと怒られる
0871名無しさん@お腹いっぱい。2009/01/20(火) 21:16:21
>>870
出てくることは出てくるだろ。
0872名無しさん@お腹いっぱい。2009/01/20(火) 21:17:31
GNUが入れられないシステムらしいからemacsを入れるようなことはあり得ないだろ。
0873名無しさん@お腹いっぱい。2009/01/20(火) 21:19:09
>>868
http://www.opengroup.org/onlinepubs/009695399/utilities/find.html
0874名無しさん@お腹いっぱい。2009/01/20(火) 23:53:05
質問です!

OSのバージョンをuname -rで取得し、5.4-RELEASE-p6以上だったら、echo hogeを実行し、
5.4-RELEASE-p5以下だったら、echo fooを表示するシェルスクリプトを作りたいと思ってます。

しかし、5.4-RELEASE-p5のような形式の文字列を比較する方法がわかりませんが、どのように比較すればよいのでしょうか?
0875名無しさん@お腹いっぱい。2009/01/20(火) 23:55:30
>>874
if [ `uname -r` = "5.4-RELEASE-p6" ]; then
echo "hoge"
fi

if [ `uname -r` = "5.4-RELEASE-p5" ]; then
echo "foo"
fi

0876名無しさん@お腹いっぱい。2009/01/21(水) 00:15:28
>>874
testコマンドが対応していれば strcmp()による文字列比較も使えるので、
一応(p10とか2桁とかならない範囲なら)これで出来る

if [ `uname -r` \> "5.4-RELEASE-p5" ]
then
echo foo
fi


0877名無しさん@お腹いっぱい。2009/01/21(水) 00:33:38
>>874
5.4-BETAはどうするの?
仕様をもうちょっときっちり書いて欲しい。
一桁.一桁-RELEASE-p一桁でいいのかどうかとか。
0878名無しさん@お腹いっぱい。2009/01/21(水) 02:53:58
>>866,867
d、助かりました。
この辺の、サブシェルとリダイレクトの組み合わせは、なかなか慣れない物で。
0879名無しさん@お腹いっぱい。2009/01/21(水) 03:49:24
もはや修行僧の域に思える
0880名無しさん@お腹いっぱい。2009/01/21(水) 04:57:45
シェルスクリプトの初心者なのですがちょっと知恵を貸してください。

入力されたコマンドをwhichまたはtypeでパスを抜き出して
そのコマンドのハッシュ値を得るにはどうしたら一番効率がいいですか?

自分で初心者ながら書いてみてるのですが全然うまくいきません。
お願いします。
0881名無しさん@お腹いっぱい。2009/01/21(水) 06:40:16
>>880
bash限定なら、

#!/bin/bash
echo -n 'コマンド? '
read comm
md5sum `type -p $comm`
0882名無しさん@お腹いっぱい。2009/01/21(水) 07:53:05
>>876
ありがとうございました。できました。

>>875
質問をちゃんと読んでください。
0883名無しさん@お腹いっぱい。2009/01/21(水) 08:12:30
>>876
>p10とか2桁とかならない範囲なら
なに、この素人

2桁でもできる方法もかけないならプロじゃない。

と素人のおれがいってみる。
0884名無しさん@お腹いっぱい。2009/01/21(水) 10:03:34
必要な時になおせばよい。こういう言い訳が蓄積されて2000年問題が起こった。
0885名無しさん@お腹いっぱい。2009/01/21(水) 10:12:46
>>884
2000年問題とは話が違う。
FreeBSD 5.xはもうEOLになるし、
そもそもシェルスクリプトというのはその場で動けばいいものを
「書き捨て」で書くもの。
0886名無しさん@お腹いっぱい。2009/01/21(水) 10:13:42
質問者はなんちゃってスクリプトで満足したようなので、
後は捏ねくり回したい人たちでどぞー↓
0887名無しさん@お腹いっぱい。2009/01/21(水) 10:17:22
>>884
たとえが悪過ぎ。

ちなみに、2000年問題は、騒がれていたほどの問題は起きず。
ほとんど無害で2000年を迎えた経過した。
2000年問題対策でかかった費用は実は必要なかったことが後でわかった。
むしろ、2000年問題対策と称して儲ける業者がいたことの方が問題。
0888名無しさん@お腹いっぱい。2009/01/21(水) 10:17:52
書き捨てだけじゃなくて、手順を忘れないメモとしても書くぞ。こっちの方が多い。
0889名無しさん@お腹いっぱい。2009/01/21(水) 10:19:33
>>885
あの騒ぎ自体を「2000年問題」と言っている。
0890名無しさん@お腹いっぱい。2009/01/21(水) 10:19:56
ノウハウは自分自身の頭の中に持つもの。
メモは残してはいけない。
変にメモを残して別の担当者に引き継がれると困る。
自分が辞めたらだれもやりかたがわからなくなるのが望ましい。
だから会社は自分を辞めさせられない。
0891名無しさん@お腹いっぱい。2009/01/21(水) 10:54:16
ノウハウってのは惜しみなく与える人の元に集まってくるんだよ。
0892名無しさん@お腹いっぱい。2009/01/21(水) 11:11:01
>>891
それ、昔の考え。
0893名無しさん@お腹いっぱい。2009/01/21(水) 14:50:43
自分の仕事を他人に割り当てるのではなく、
仕事がすべて自分に割り当てられる。
典型的な下っ端ですね。
0894名無しさん@お腹いっぱい。2009/01/21(水) 16:28:23
>>881
お答えありがとうございます。そのまま書いて実行してみたのですが
そのようなファイルやディレクトリはありませんと出てしまいました。
なんとかなりませんか?
0895名無しさん@お腹いっぱい。2009/01/21(水) 16:37:29
>>894
bashをインストールしていない(/bin/bashがない)のでは?

/bin/bashがないのに #!/bin/bash スクリプトを実行しようとすると、
「そのようなファイルやディレクトリはありません」と出るよ。
0896名無しさん@お腹いっぱい。2009/01/21(水) 16:41:16
自分の仕事を他人に割り当てて楽していた中間管理職はリストラされて行ったけどね
0897名無しさん@お腹いっぱい。2009/01/21(水) 18:03:31
>>895
/bin/bashはあるみたいです。
自分のやりかたが悪いのでしょうか・・・
0898名無しさん@お腹いっぱい。2009/01/21(水) 18:05:33
改行コードは?
0899名無しさん@お腹いっぱい。2009/01/21(水) 18:16:41
あ、それか。/bin/bash^M というファイルを実行しようとするんだよな。

/bin/bash^M というシンボリックリンクを本当に作っておくという方法もあり。
0900名無しさん@お腹いっぱい。2009/01/21(水) 18:39:25
>>899
ありがとうございます。教えていただいたのを参考に
組み込んでみたところハッシュ値は取ってくるようになりました。
以下に書いたのが自分で書いてみたものの一部なのですが
取ってくるハッシュ値と実際にターミナル上でみたハッシュ値が
違うのですが、何が原因でしょうか?

シェルスクリプトはlist.lstに書いてあるコマンドを読んで
ハッシュ値をcachというフォルダにコマンド名で保存するというものなのですが
例えばlist.lstにfindと書いておくとこのスクリプトだと
e1b58755ded5d89cd50789f850232111と出るのにターミナル上でmd5sum findすると
4c66ef9549b37df90fb36ebc06f88ef0と出ます。何度もすいません・・・

#!/bin/sh
BUFIFS=$IFS
IFS=
exec 3<list.lst
while read file 0<&3
do
type -p "$file" | md5sum> cach/"$file".txt
echo "$file [ ok ]"
done

exec 3<&-
IFS=$BUFIFS
echo -e "\n"
0901名無しさん@お腹いっぱい。2009/01/21(水) 18:53:00
>>900
パイプとコマンド置換を混同してるね

× type -p "$file" | md5sum> cach/"$file".txt

○ md5sum `type -p "$file"` > cach/"$file".txt
0902名無しさん@お腹いっぱい。2009/01/21(水) 18:57:10
>>901
ありがとうございます。できました。
パイプとコマンド置換について勉強しなおします。
本当にありがとうございました。
0903名無しさん@お腹いっぱい。2009/01/21(水) 20:20:03
>>901,902

パイプとコマンド置換の違いと言う認識だと、
そもそも全然別物なので、
比較検討再構成的な学習法が成立しない。

ようは、引数と標準入力の違いでしょ。
09049032009/01/21(水) 20:24:45
$ echo `echo hoge`
hoge
$ echo 'hoge' | echo

$ echo 'hoge' | cat
hoge
$ cat `echo hoge`
cat: hoge: No such file or directory
$

って事でしょ。
0905名無しさん@お腹いっぱい。2009/01/21(水) 20:54:48
>>903-904 は何を蛇足な説明してるんだ? すでに解決してるのに。
09069032009/01/21(水) 21:00:01
しかし、

type とか md5sum って、

どこのOSの話だ?

/bin/bash とかも、変だぞ。

パイプとかコマンド展開とか標準入力とか以前に、
使用するOSとシェルを間違えていませんか?
0907名無しさん@お腹いっぱい。2009/01/21(水) 21:03:00
>>906
おまえ、面白くないからもう書かなくていいよ。

md5sumはともかく、typeコマンド自体は純正シェルにある純正コマンド。
(-pオプションはないけどね)

「コマンド展開」とか間違った用語使わずに、用語も正確に覚えようね。
0908名無しさん@お腹いっぱい。2009/01/21(水) 21:05:49
md5sumはあちこちのソフトウェア配布サイトで使われてるが…
0909名無しさん@お腹いっぱい。2009/01/21(水) 21:10:31
openssl md5 < `type -p "$file"`

とでも書いて欲しかったのかな?

もちろん、そんなことは知った上で、質問者のレベルを推定し、
質問者に合った回答をするのが上級な回答者。
09109032009/01/21(水) 21:25:52
ああ、type は無問題か。


>>905

間違った解決は良くない。

#!/bin/sh

md5 `type -p \`cat list.lst\``

コマンド展開は普通に使うだろ、
チルダ展開と
変数展開と同列のレイヤーの処理だ。
0911名無しさん@お腹いっぱい。2009/01/21(水) 21:29:57
>>910
どこも間違ってないよ。

>>901 よりも早く回答を出せなかったくせに、
後から何言っても言い訳にしかならない。

あと、typeコマンドも知らなかったというお前の程度がこれで知れた。

× コマンド展開
○ コマンド置換(command substitution)

ちなみにチルダ展開は tilde expansion だから、「展開」でよい。

substitutionとexpansionをちゃんと用語として区別すること。
09129032009/01/21(水) 21:36:25
間違っている。

ファイル記述子の扱いが二重に無駄。
exec が無駄。while が無駄。
なのにスルーして、手前味噌の話に誘導。

md5sum(そんなコマンド知らんが)の引数と標準入力の
扱いの違いを言及していないで、コマンド展開とパイプの話にすり替えている。

嘘だらけ。
レス数が900を超えています。1000を超えると表示できなくなるよ。