トップページunix
1001コメント282KB

くだらない質問はここに書き込め!Part 48

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2006/05/10(水) 18:02:34
前スレ
http://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/
04244192006/06/04(日) 00:23:19
>>423 やってみればうまくいかないって分かるだろうよ。
teeの出力を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:53
>>418
bash なら ${PIPESTATUS[@]} でパイプ中の
ステータスコードを拾えるよ。

エラーメッセージまで拾いたいのなら >>424 とか
使ってガンガレ。
0426名無しさん@お腹いっぱい。2006/06/04(日) 00:50:58
cygwinの最新版の使い方が詳しく載っているHPありませんか?
04274182006/06/04(日) 01:02:42
>>419,425
ありがとうございます。
今回は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
>>426
板違い
04294242006/06/04(日) 01:54:40
>>427
cshではできません。>>419で紹介したURLはまさにそれを説明したものです。
どこかに日本語訳が転がっているかもしれないので探してみてください。
0430名無しさん@お腹いっぱい。2006/06/04(日) 02:22:08
file descriptor
04314182006/06/04(日) 02:26:09
>>424
ありがとうございます。
英訳してみてみました。
なんか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
>>431
>なんかcshは駄目駄目って言われてますね・・・

フレームのもと:-1
04334242006/06/04(日) 12:16:05
>>431
そのページは(スクリプト言語としてみた場合の)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:00
大抵は-eで事足りる。
0435名無しさん@お腹いっぱい。2006/06/04(日) 13:26:42
>>434
-e ではだめだろ。
set -e
false | true

とか、trueまで実行できてしまうよ。
0436名無しさん@お腹いっぱい。2006/06/04(日) 13:45:26
cshがだめなのはスクリプトにしたときだけ。
0437名無しさん@お腹いっぱい。2006/06/04(日) 13:50:40
>>436
ではあるが、コマンドラインをそのままスクリプトにするのが
スクリプトの基本なんで、よくある、

$ make 2>&1 | tee log

みたいなので実行できないといった初心者をなくすためにも
スクリプト以外でもcshは使わない方がいい。
0438名無しさん@お腹いっぱい。2006/06/04(日) 13:57:02
よくあるその程度なら
make |& tee log
で出来る。
0439名無しさん@お腹いっぱい。2006/06/04(日) 14:02:10
確認してないけど
$ make | tee log 2>&1
こうしないと意図しない結果になりそう
0440名無しさん@お腹いっぱい。2006/06/04(日) 14:09:24
すみません。まちがってました
0441名無しさん@お腹いっぱい。2006/06/04(日) 14:58:56
>>438
話の流れが読めない奴だな。
だから、
make |& tee log
で覚えてしまった人が、それをスクリプトでも書こうとしちゃうわけよ。
で、スクリプトは#!/bin/shで書くからと教えられて、
/bin/shで make |& tee log が動かないからハマる。
だからといって #!/bin/csh されちゃ目も当てられない。

だから、スクリプトでなくても、
コマンドラインでも cshは禁止にするのが正解。
0442名無しさん@お腹いっぱい。2006/06/04(日) 15:39:44
>>441
その程度の簡単なスクリプトを書くのでさえcshを使うのがいけないのは
なぜなのか説明してごらんよ。
0443名無しさん@お腹いっぱい。2006/06/04(日) 15:45:56
>>442
cshのスクリプトがいけないと言う結論はすでに出てるわけだが、
今度は「程度問題」にして一部のcshスクリプトを認める方向の話ですか?
0444名無しさん@お腹いっぱい。2006/06/04(日) 15:49:25
個人レベルで #!/bin/csh と書いて使う分には
#!/bin/sh と書いて bash の文法使われるよりはいいよ。

複数で使うスクリプトに使われるのは迷惑だし
引き継いだりはしたくないけどな。w
■ このスレッドは過去ログ倉庫に格納されています