くだらない質問はここに書き込め!Part 48
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2006/05/10(水) 18:02:34http://pc8.2ch.net/test/read.cgi/unix/1142379262/l50
UNIX板は 2ch のサポートセンターではありません
批判、要望は→ 2ch批判要望 http://ex9.2ch.net/accuse/
NGワード
* UNIXって何? → http://pc8.2ch.net/test/read.cgi/unix/998779290/
* UNIXとLinuxの違いは何? → http://pc8.2ch.net/test/read.cgi/unix/1024558135/
* 2ch閉鎖の危機をUNIX板が救ったという話{は本当? | を知った。有り難う! | のflashはどこ?}
禁止事項
* 既出・内容なし・マルチポスト・アスキーアート各種・ネタage・宿題の丸投げ
注意事項
* 荒らしは無視が鉄則
* Unixと関係ない質問/話題は、よけいな相手をせず適切な板に誘導
* 転んでも泣かない
* ひろゆきのギャグには笑うこと
質問する前にググること http://www.google.co.jp/
0424419
2006/06/04(日) 00:23:19teeの出力をfd 2に出してもいいならもっと簡単になる。
途中の「n>&-」は、途中のコマンドでfd 3以上にゴミを
吐くやつだったら困るのでその対策ね。
{ st=`((tar ...; echo $?>&4) |cmd 3>&- 4>&- 5>&- | tee -a xxx >&3) 4>&1 3>&5`; } 5>&1
0425名無しさん@お腹いっぱい。
2006/06/04(日) 00:39:53bash なら ${PIPESTATUS[@]} でパイプ中の
ステータスコードを拾えるよ。
エラーメッセージまで拾いたいのなら >>424 とか
使ってガンガレ。
0426名無しさん@お腹いっぱい。
2006/06/04(日) 00:50:580427418
2006/06/04(日) 01:02:42ありがとうございます。
今回はcshです。>>425さん
”fd 2”というのは出力先でしょうか?
正確には今回は
tar cvfb - 20 . | rsh hostname dd of=/dev/rst0 obs=20b | tee -a xxx yyy
でxxx yyyというのが"fd 1"にあたるということでしょうか?
すいません、少しこれを元に調べてみますね。
少し希望がもてました。
ちなみに最初はtarをしてからエラーステータスを拾って
そのあとddで書き込もうと考えてました><
ありがとうございました。
0428名無しさん@お腹いっぱい。
2006/06/04(日) 01:23:23板違い
0429424
2006/06/04(日) 01:54:40cshではできません。>>419で紹介したURLはまさにそれを説明したものです。
どこかに日本語訳が転がっているかもしれないので探してみてください。
0430名無しさん@お腹いっぱい。
2006/06/04(日) 02:22:080431418
2006/06/04(日) 02:26:09ありがとうございます。
英訳してみてみました。
なんかcshは駄目駄目って言われてますね・・・
しかも無理っぽいとも。
ちなみに>>427の
最初はtarをしてからエラーステータスを拾って
そのあとddで書き込もうと考えてました><
の案はどうでしょうか?
または無駄を承知で1回tarをしてみて大丈夫なことを確認してから
tar cvfb - 20 . | rsh hostname dd of=/dev/rst0 obs=20b | tee -a xxx
を実行するとか・・・
0432名無しさん@お腹いっぱい。
2006/06/04(日) 09:15:53>なんかcshは駄目駄目って言われてますね・・・
フレームのもと:-1
0433424
2006/06/04(日) 12:16:05そのページは(スクリプト言語としてみた場合の)cshの問題点を挙げてある
ので、それが絶対的正義というわけじゃないよ。スクリプトって何でもかんでも
最初から自分で書けるわけじゃなく、他の人が書いたのをひきついでるとかいう
状況もあるので、「cshはゴミだから云々」みたいな主張は不毛だね。
ファイルディスクリプタを使ってやる方法はcshだとできない、というだけで
あって、たとえばもっと原始的な方法で↓みたいな方法を使えばいくらでも可能。
mytmpdir=/var/tmp/foo_dir_$$
mkdir $mytmpdir || exit
rcfile=$mytmpdir/rc
(tar cvfb - 20 .; echo $? > $rcfile) | rsh ...
# 終了
rm -rf $mytmpdir
0434名無しさん@お腹いっぱい。
2006/06/04(日) 12:53:000435名無しさん@お腹いっぱい。
2006/06/04(日) 13:26:42-e ではだめだろ。
set -e
false | true
とか、trueまで実行できてしまうよ。
0436名無しさん@お腹いっぱい。
2006/06/04(日) 13:45:260437名無しさん@お腹いっぱい。
2006/06/04(日) 13:50:40ではあるが、コマンドラインをそのままスクリプトにするのが
スクリプトの基本なんで、よくある、
$ make 2>&1 | tee log
みたいなので実行できないといった初心者をなくすためにも
スクリプト以外でもcshは使わない方がいい。
0438名無しさん@お腹いっぱい。
2006/06/04(日) 13:57:02make |& tee log
で出来る。
0439名無しさん@お腹いっぱい。
2006/06/04(日) 14:02:10$ make | tee log 2>&1
こうしないと意図しない結果になりそう
0440名無しさん@お腹いっぱい。
2006/06/04(日) 14:09:240441名無しさん@お腹いっぱい。
2006/06/04(日) 14:58:56話の流れが読めない奴だな。
だから、
make |& tee log
で覚えてしまった人が、それをスクリプトでも書こうとしちゃうわけよ。
で、スクリプトは#!/bin/shで書くからと教えられて、
/bin/shで make |& tee log が動かないからハマる。
だからといって #!/bin/csh されちゃ目も当てられない。
だから、スクリプトでなくても、
コマンドラインでも cshは禁止にするのが正解。
0442名無しさん@お腹いっぱい。
2006/06/04(日) 15:39:44その程度の簡単なスクリプトを書くのでさえcshを使うのがいけないのは
なぜなのか説明してごらんよ。
0443名無しさん@お腹いっぱい。
2006/06/04(日) 15:45:56cshのスクリプトがいけないと言う結論はすでに出てるわけだが、
今度は「程度問題」にして一部のcshスクリプトを認める方向の話ですか?
0444名無しさん@お腹いっぱい。
2006/06/04(日) 15:49:25#!/bin/sh と書いて bash の文法使われるよりはいいよ。
複数で使うスクリプトに使われるのは迷惑だし
引き継いだりはしたくないけどな。w
■ このスレッドは過去ログ倉庫に格納されています