- 1 名前:名無しさん@お腹いっぱい。 [2007/02/15(木) 14:28:44 ]
- シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずは注意点、リンク、地鎮祭など(>>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 でトレースしましょう。 前スレ シェルスクリプト総合 その7 pc10.2ch.net/test/read.cgi/unix/1157601611/
- 713 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/25(月) 23:17:51 ]
- >>710
素直に自分よりの解釈だと言えば?
- 714 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/25(月) 23:43:08 ]
- >>685のは結構凄いと思うが、
>>517のedのヤツはもっと凄いな。 オレもed好きになろう。
- 715 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/26(火) 15:37:00 ]
- edで日本語がうまく扱うほうほうがあれば言うことないのだが・・・・
- 716 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/26(火) 15:40:11 ]
- sedにin-placeオプションがなくてperlをよく知らなかったころは
edでやってたな
- 717 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/26(火) 15:40:12 ]
- >715
edより先におまえが日本語をうまく扱えるようになる必要がありそうだ
- 718 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/26(火) 15:44:41 ]
- 誰がうまいこといえと
- 719 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/26(火) 21:37:41 ]
- てか、蒸し返すようで恐縮だけど
シェルスクリプトって、基本的に ash と ksh と bash で動けば 移植性で問題になることは極めて低いよね? この三つで動いても駄目な環境って今どれほど実運用されているのだろうか?
- 720 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/26(火) 23:39:23 ]
- >>719
Solarisが問題だな。Solarisにはkshが標準で付いてるとは言え、 シングルユーザモードでは使えない。 シングルユーザモードを含めたシステムスクリプトは依然、 /bin/shか/sbin/sh(単にstatic linkというだけで中身は/bin/shと同じ)の 範囲内で書く必要がある。 誰かが書いてたように、Solarisが無くなる(もしくは影響力が無くなる)なら、 シェルの互換性の問題は一気に解決するだろう。
- 721 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 00:25:59 ]
- Solarisの/binは/usr/binへのシンボリックリンクだからkshやbash使ってもいいんじゃない?
/usr/binの中には/bin/kshで書かれたコマンドもけっこうある。 Solarisのshの動きがヘンなのはたしかにときどきちょっと困る。
- 722 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 00:42:18 ]
- > Solarisの/binは/usr/binへのシンボリックリンクだから
マジで?
- 723 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 00:46:28 ]
- > シングルユーザモードでは使えない。
> シングルユーザモードでは使えない。 > シングルユーザモードでは使えない。
- 724 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 00:50:42 ]
- >>721
マジだよ。/sbinは別れてるけど。 >>720は/usrがマウントできない状況のことを言ってるんだと思うけど最近は/と/usrを分けないのもふつうなんじゃないかな。
- 725 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 00:53:11 ]
- どっちかっつーとそういう問題でなくて、
ふつースクリプトは#!/bin/shで書くけど/bin/shが何だかわかんねーじゃん? って話では?
- 726 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 02:29:26 ]
- >>722
HP-UXもだな。
- 727 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 02:31:28 ]
- ashもいろいろ修正入ってる。
Solarisの/bin/shはそれこそSystemV7のころのものとほとんど変わっていない。
- 728 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 03:37:47 ]
- ・・・ってシェルを使えじゃなくてPOSIXだか何かのsh規格に沿って書けって事だよな。
- 729 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 07:44:21 ]
- >>721
じゃなくて、シングルユーザーモードの時、 /sbin/shはあるが、 /sbin/kshは無い。 /sbin/shはstatic linkの/bin/sh(/usr/bin/sh) だから、シングルユーザーモードも含めれば、 結局 /bin/shの文法の範囲で書かざるを得ないという話。 しかも、Solarisの/bin/shは古いままなので、 export a=b も、$(command)も test -e も、 ちょっと新しい書き方はすべて使えない。
- 730 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 08:03:47 ]
- 互換性の話に便乗だけど、
一部のスクリプトで、未だに ${1+"$@"} って書いてあるのがある。 これ、もう "$@" でいいんじゃないか? 引数が0個の時に ""が残らないようにする措置だろうけど、 Solarisの/bin/shですらそんな不具合は発生しない。(確認済み) なので、"$@"と書いて問題ないし、視認性上も "$@"と書くべきと思うんだが。 本当に ${1+"$@"}と書く必要がある /bin/shを搭載したOSって、 現存してる?
- 731 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 22:07:07 ]
- >>729
なんか Solaris のシングルユーザモードって不便そうですね。 CD 6枚焼いたけど、インストールを躊躇してしまうよ。
- 732 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 22:19:42 ]
- / と /usr をわけたりしなければ気にする必要ないよ。
- 733 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 23:07:41 ]
- >>724, >>726
なるほどねぇ、知らんかったよ。ありがと。 >>730 書き換えるのが面倒なだけなんじゃないか? 目障りだと思うなら、君が片っ端から書き換えて動作検証してあげればいいと思う。
- 734 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 23:19:19 ]
- >>732
すんません BSD ユーザなもので、 / と /usr を分けるというのが イマイチ良く解かりません。 ad0s1a に全部突っ込めって事ですか? /var も /tmp も含めて・・・(よーするに swap 以外は同じパーテーション?) Solaris だとそんなの有りなんだぁ。(BSDでも無いことは無いけど、なんだか・・)
- 735 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 23:36:43 ]
- OSは別に関係ない。パーティションの切り方なんて好みの問題だ。
- 736 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/27(水) 23:43:05 ]
- >>735
でも、その好みの問題に対して Solaris はシングルユーザモードの 挙動をもってして、ユーザに介入してくる分けでしょう? >>732 のレスからは、そういう風に読めるのだが?
- 737 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 00:09:08 ]
- どうでもいいけどよそでやってくんないかな。
- 738 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 05:10:23 ]
-
>>730 の ${1+"$@"} てどうゆう意味なの?? なんか理解できん・・・(TT
- 739 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 05:18:04 ]
- >>734
NetBSDのデフォルトは分けないからBSDユーザーってのは言い訳にならない。
- 740 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 07:33:15 ]
- あと、未だに
if [ X$HOGE = X ] なんてのも見かける。これも、 if [ "$HOGE" = '' ] と書いたほうがいい。 むかーしのバージョンのtestで、$HOGEの内容が = だったような場合、 [ = = '' ] みたいになるとエラーになるtestに対する対処として、 X$HOGE とかいう回避法があったけど、今の testコマンドでそれが必要なのは もう現存しないはず。
- 741 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 14:01:16 ]
- >むかーしのバージョンのtestで、$HOGEの内容が = だったような場合、
ちがう。 $HOGE の内容が -f だったような場合に対する対処だから、今でも有効。
- 742 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 14:16:42 ]
- >>741
$HOGE の内容が -f でも正常に動くんだけど。 [ -f = hoge ] みたいに、項が3つある時は、 -fはファイル存在オプションとはみなされないから -f だった時駄目になるような/bin/sh搭載した OSって 何?
- 743 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 14:36:59 ]
- >>742
a="-f" b="-a" c="=" d="" test X"$a" = X"$b" -a X"$c" = X"$d" echo $? test $a = $b -a $c = $d echo $? FreeBSD の ash、Solaris の sh, ksh、GNU bash いずれでも異なる結果になりました。
- 744 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 14:39:58 ]
- >>743
それは、複数の式を -a (AND) でつないだ場合の話。 それだと確かに式の評価がおかしくなることがあるが、 [ $HOGE = hoge ] なら、X$HOGE とする必要はなし。 Solarisの/bin/sh でも [ -f = -f ] は無問題。
- 745 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 14:43:14 ]
- -a 使ってるかどうかで場合わけするより
一律で X$HOGE にしといた方がおしゃれ。
- 746 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 14:48:53 ]
- >>745
-a 使う場合は、各評価式ごとに \( \) で括るのを推奨。 [ \( "$a" = "$b" \) -a \( "$c" = "$d" \) ] ↑みたいにね。これで、X"$HOGE" は不要。
- 747 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 14:54:19 ]
- >>744
> [ $HOGE = hoge ] なら、 クォート忘れてる。 > X$HOGE とする必要はなし。 ダウト。 そのへんの対バカ性能をどこまで頑張るかはヒューリスティックで実装依存。 たとえばFreeBSDのtestでは $ HOGE='!' $ [ "$HOGE" = hoge ]; echo $? [: =: unexpected operator 2 となるので変数に任意の値を想定するなら "X$HOGE" = Xhoge は依然必要。 常にtestの引数が正しい式となるよう書くにしくはなし。
- 748 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 15:06:47 ]
- >>747 氏に聞きたいのだが、
>>730 についてはどうお考え? ${1+"$@"} は以前必要? もう不要で "$@"で桶?
- 749 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 15:09:08 ]
- ここでポリシー決めても
どこ使うんだろ。
- 750 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:18:00 ]
- こういう突っ込んだ話まで網羅してる本は無いの?
- 751 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:20:30 ]
- 結局トラディショナルな書式に落ち着くんだよな...
- 752 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:25:52 ]
- 文字列の比較なら [ X"$HOGE" = hoge ] なんてするより
case $HOGE in hoge) にするなぁ。 caseだと、たとえ$HOGEの中身が ! だとか -f -a とか特殊記号だったとしても すべて無問題だから。
- 753 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:31:27 ]
- >>750
詳解シェルスクリプトを企画するか
- 754 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:35:22 ]
- 需要ないだろー
- 755 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:37:22 ]
- wikiでいいんじゃね
- 756 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:38:15 ]
- 需要とかそういうことに興味あるのかしら?
- 757 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:39:17 ]
- >>756
本売るつもりなら大事でしょ。
- 758 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:40:07 ]
- 需要ないだろ。問題になるのSolarisだけだし、Solarisユーザーの人数が、、、
- 759 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:41:25 ]
- >>757
>>756 が言ってるのは、ユーザーがシェルの互換性に興味あるのか? ってことでは (需要に興味があるかどうかじゃなく)
- 760 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:49:09 ]
- 今時、シェルスクリプトの本なんて、全く売れないとは言わないにしても
何冊くらい売れるんだ? このスレでも>>4にある本の話なんて全然出ないし。
- 761 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:50:30 ]
- 入門書はそれなりに売れるんじゃないの?
そういうの読む人がここの話に参加しづいらいだけで。
- 762 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:52:47 ]
- getopts は互換性あるの?
- 763 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 17:59:17 ]
- >>762
よほど古いシェルじゃない限り互換性ある。でもなぜか出番なくてあまり使わない。
- 764 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 18:02:34 ]
- 詳説正規表現もこんなのみんな興味あるのかよとかおもったけど
意外に受けたらしいから
- 765 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 18:11:11 ]
- 互換性があって、どのシェルでも使えるのに、
使ってるの見たことないコマンドの筆頭が readonly だな。
- 766 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 18:12:21 ]
- >>763
ありがとうございます。 もうひとつ質問なんですが、ポータブルかつ安全に一時ファイルを作成するにはどうすればいいのでしょうか。
- 767 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 18:12:31 ]
- UNIXシェルの新刊はここ2年くらいやたら出たが、
もうこの分野で出ても意味ないわな。 カーニハン&パイクとブルース・ブリンけあればいいんじゃないか。
- 768 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 18:17:41 ]
- >>766
どこまでの安全性を言ってるのかわからないけど、 (unask 77; > /tmp/hoge$$) じゃだめかい? mktempコマンドは、必ずしもあるとは限らないと仮定するべきなのだろうか?
- 769 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 18:21:56 ]
- mktemp(1) を勧める文書は「pidは容易に推測できるので危険」とか書いてますよね。
実用上はほとんど問題にならないのでしょうが、気持ち悪いので何か安全な方法があるのかお尋ねしました。
- 770 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 18:31:34 ]
- 本当に安全でないといけないなら、
mkdirとかでちゃんとロックして、 失敗したら別の名前で試すとかするしかない。 作るディレクトリのパーミッションちゃんとしとけば 推測されてもかゆくもないでしょ。
- 771 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 18:49:36 ]
- cat /dev/urandom | od -x
- 772 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 19:09:45 ]
- >>771
/dev/urandom はポータブルではないわけで、、
- 773 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 19:10:47 ]
- こういう時はお約束だろ
>>771 catが無駄です。
- 774 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 19:45:41 ]
- 正規表現もそれぞれで実装がまちまちなのに、なにを言ってるのか
- 775 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 19:53:31 ]
- そもそも正規表現エンジンが内蔵されてる sh なんかあったっけ?
- 776 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 20:07:27 ]
- 詳説シェルスクリプトが必要とされているな
- 777 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 20:09:05 ]
- なんで正規表現の話が出てきたんだ?
- 778 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/28(木) 20:13:15 ]
- 774さんの説明に期待
- 779 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/29(金) 01:27:29 ]
- 激しくどうでもいいが、Solarisの/sbin/shは動的リンクされているぞ。
ていうか、間違いだらけの知識を持ってるやつほどSolarisをバカにする傾向があるな。
- 780 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/29(金) 01:33:43 ]
- >>779
Sol10 からね。Sol9 までは static link。
- 781 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/29(金) 03:23:19 ]
- 最近Solarisを使いだした奴に限って、Solarisをマンセーしたがる傾向があるな
の間違いでした
- 782 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/30(土) 16:06:14 ]
- >>748
747じゃないけど "$@" -> ${1+"$@"} とするのは set -u でもエラーにならない為かと すくなくともある環境では0を除いた位置変数が未設定なら前者はパラメータ未設定エラーになるから 別に""の互換性の理由だけで${1+"$@"}にする訳ではないでしょ
- 783 名前:782 mailto:sage [2007/06/30(土) 16:14:29 ]
- 誤) 為かと
正) 為でもあるかと
- 784 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/30(土) 17:05:31 ]
- >>782
実際に ${1+"$@"} が使われてるのは set -u のところじゃない。 コマンドのラッパーで引数を渡す時の話。 なので、>>782 の話は当たっていない。
- 785 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/30(土) 17:10:16 ]
- ${1+"$@"} と書くのは、位置パラメータがない場合に
空文字列が残らないようにするため。 他に、${@+"$@"} という書き方もある(あった)。 今議論になってるのはそこじゃなくて、 未だに ${1+"$@"} が必要なシェルが現存しているかどうか、 現存しているなら そのOS名は? という質問。
- 786 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/30(土) 17:59:27 ]
- >>784-785
「でもあるかと」と訂正してるんだが 実際 set -u 設定状態でコマンドラッパーに"$@"で渡そうとしても $@ を評価(展開)する段階で未設定と判定された訳で 空文字列が残るかどうかなんて今時大抵解消されてるでしょ 幾つかのOS、幾つかのB系シェルを触ったことはあるけど個人的には見たことがない ただ単純に ${1+"$@"} -> "$@" として問題ないか?と聞かれたら set -u で問題が起きるからダメだと
- 787 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/30(土) 18:24:29 ]
- >>786
で、その set -u で問題が出たOSって何?
- 788 名前:782 mailto:sage [2007/06/30(土) 18:25:32 ]
- 上の文、言葉のチョイスが変だわ
もともと空文字列対応で今時 ${1+"$@"} とする必要はあるか?かもしれんが、 たとえその為の対応が不要になったとしても、${1+"$@"} -> "$@" にしていいことにはならんよと言いたい 理由は以下のスクリプトを実行するとエラーになる環境もあるからと #!/bin/sh set -u echo "$@"
- 789 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/30(土) 18:29:44 ]
- >>788
だから、そのエラーになる環境は何なのかと。 俺のところの *BSD/Solarisとあと犬で、エラーになるのはひとつもないのだが。
- 790 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/30(土) 18:56:23 ]
- >>789
そのSolarisじゃないの? ほんとに試してみた? バージョンによるのかな? 結局互換性の最大の問題はいつもSolarisだなww
- 791 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/30(土) 20:36:50 ]
- 古いSolarisで見限っちゃったやついっぱいいるからな
いまのSolarisをしらない奴がいてもしょうがない
- 792 名前:名無しさん@お腹いっぱい。 [2007/07/03(火) 01:38:27 ]
- 今のソラリスは早いの?
おそーーーーーーーーいので、あまり使いたくない。
- 793 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/03(火) 12:33:55 ]
- 昔からCPUなりのスピードは出てると思うがな...
- 794 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/04(水) 12:36:32 ]
- rm -rf /なんてもう古い
時代はmv /bin /ms.green
- 795 名前:名無しさん@お腹いっぱい。 [2007/07/04(水) 22:29:33 ]
- 誰か教えて。Bシェルで
test 1000000 -lt 9999999999 の結果が正にならないんだけど。数値型の値に制限とかあるのかな?
- 796 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/04(水) 22:31:41 ]
- >>795
bashだと無問題。「正」じゃなくて「真(0)」な。
- 797 名前:名無しさん@お腹いっぱい。 [2007/07/04(水) 22:35:06 ]
- 小さい値だとちゃんと真(0)になるんだけどなんでかな。
- 798 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/04(水) 22:35:10 ]
- >>795
実装依存だな。シェルによっては 31bit整数最大の 2147483647 が扱える最大値。
- 799 名前:名無しさん@お腹いっぱい。 [2007/07/04(水) 22:37:55 ]
- >>798
ありがと。ちなみに対処法って何かあったりする?違う言語使うしかないか。
- 800 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/04(水) 22:42:13 ]
- >>799
bcに喰わせるとか。bcだともっと大きい数まで扱える。 echo '1000000 < 9999999999' | bc bcでは、testとは逆で、真の場合1になって、それが標準出力に出る。
- 801 名前:名無しさん@お腹いっぱい。 [2007/07/04(水) 22:55:38 ]
- ありがとう。試してみます。
- 802 名前:名無しさん@お腹いっぱい。 [2007/07/05(木) 22:47:11 ]
- ipアドレスを0101って2進数にするにはまず・・・・・・・・なにすればいいの?
- 803 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/05(木) 23:01:13 ]
- 小数点までを取り出す
- 804 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 01:13:45 ]
- こんなのでどうだろう
(echo obase=2; echo 1.2.3.4 | tr '.' '\012') | bc | xargs -n 1 printf %.8d
- 805 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 01:23:00 ]
- もちょっとカイゼン:
旧:(echo obase=2; echo 1.2.3.4 | tr '.' '\012') | bc | xargs -n 1 printf %.8d 新:printf %d%.8d%.8d%.8d `echo obase=2.1.2.3.4 | tr . \; | bc`
- 806 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 10:00:27 ]
- shebang が #!/bin/shのシェルスクリプト test.shを PATHの通った$HOME/bin に置いたところ、
tcsh では $ test.sh で動作するのに、 bash では $ test.sh で動作せず、 $ bash -c test.sh でも動作しませんでした。 /usr/local/bin/以下に置いたところ、 bash上の $ test.shは動作しましたが、 やはり、$ bash -c test.sh は動作しません。 この原因は、どのあたりにあるのでしょうか。 ヒントでよいので教えてください。
- 807 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 10:26:25 ]
- >>806
(t)cshと(ba)sh では、PATHの変数が違う。本当はPATHを通し忘れているというオチ。 あるいは、.bashrcでPATHが再設定されてしまっているとか。
- 808 名前:806 mailto:sage [2007/07/06(金) 10:42:36 ]
- >>807
bash上で、$ set | grep PATH すると、$HOME/binも入っているのですが、 やっぱり、PATH関係っぽいですよねぇ。 $ bash -c test.shができないのが気持ち悪いです。 ちなみに、$ $HOME/bin/test.sh では実行できました。
- 809 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 10:46:13 ]
- >>808
setじゃなくて、printenvで確認した方がいい。 シェル変数のPATHのみセットされていて、exportされてない可能性がある。 すると、bash -c とかやった時、新しいbashにはPATHが引き継がれないから、 そういう現象が起きる。
- 810 名前:806 mailto:sage [2007/07/06(金) 10:59:27 ]
- >>809
exportされないというのは盲点でした。 おっしゃるとおり、 $ printenv | grep PATH をしたところ、$HOME/binも含まれていました。 一応、.bashrcでの設定はきいているんですよね。 ググったところ、Cygwin上では、 bashのバグ?かなにかで、bash -c がきかない現象があるようです。 遅くなりましたが、自分の環境は linux 、bash 3.1 です。
- 811 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 11:09:47 ]
- ユーザ名だけ伏せていいから、完全なスクリーンダンプ出せ
- 812 名前:806 mailto:sage [2007/07/06(金) 12:10:14 ]
- >>811
席を外していまして、遅くなってすいません。 スクリーンダンプは以下のようなものでよろしいでしょうか。 実はtest.shは、navi2chインライン画像表示のためのシェルスクリプトで引数もとります。 i) bash上で実行 $ bash --verbose -c navi2ch.makethumb www.google.co.jp/intl/ja_jp/images/logo.gif navi2ch.makethumb $ sh -x navi2ch.makethumb www.google.co.jp/intl/ja_jp/images/logo.gif + tmp=/tmp/navi2ch-thumbnails + origfile=/tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif + thumbfile=/tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg + thumbsize=300x150 + '[' '!' -f /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif ']' + '[' -z '' ']' + /usr/bin/wget www.google.co.jp/intl/ja_jp/images/logo.gif -q -N -x -P /tmp/navi2ch-thumbnails + '[' '!' -f /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg + thumbsize=300x150 + '[' '!' -f /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif ']' + '[' -z '' ']' + /usr/bin/wget www.google.co.jp/intl/ja_jp/images/logo.gif -q -N -x -P /tmp/navi2ch-thumbnails + '[' '!' -f /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif ']' ++ identify -format %n /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif + scene=1 + '[' '!' -s /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg -o /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg -ot /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif ']' + '[' 1 -gt 1 ']' + convert -sample 300x150 /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg + echo -n /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg
- 813 名前:806 mailto:sage [2007/07/06(金) 12:13:07 ]
- >>812
上の方の $ bash --verbose -c では、画像は取得されませんでした。 下の方の $ sh -x は、画像が取得されました。
|

|