- 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/
- 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 は、画像が取得されました。
- 814 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 12:18:15 ]
- なんかよくわからんけど
フルパス指定じゃだめ?
- 815 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 12:32:04 ]
- 改行コードが CRLF になってないか?
- 816 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 12:39:22 ]
- >>812
test.shが問題だというから、 ちゃんと問題を切り分けて小さくしてるのかと思ったら、それかよ .bashrcの中身も、printenv PATH そのものも、隠さず出したら?
- 817 名前:806 mailto:sage [2007/07/06(金) 12:52:00 ]
- /usr/local/bin/下のnavi2ch.makethumbを消し、~/bin/navi2ch.makethumbだけにして、
もう一度試したところ、bash上でも $ navi2ch.makethumb 引数 が実行できました。 しかし、 $ bash -c navi2ch.makethumb 引数 は、やはり実行できませんでした。 >>814 フルパス指定だとbash上でも実行できます。 一応、回避策として、/usr/local/bin/に置いているので、具体的な支障はないのですが、 "bash -c"だけがうまく動いてくれないのはなぜだろうと不思議に思って、質問しました。 だから、本当はこんなにレスしていただくほどのことでなくて、申し訳ないです。 >>815 nkf でチェックしたところ、EUC-JPでした。(環境はja_JP.UTF-8) cat -v で見ても、改行コードらしきものはありませんでした。
- 818 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/06(金) 13:06:23 ]
- PATHの問題は知らんけど、引数を渡すのなら
bash -c 'navi2ch.makethumb 引数' じゃないと駄目だろ
- 819 名前:806 mailto:sage [2007/07/06(金) 13:07:41 ]
- >>816
#!/bin/sh echo test のようなシェルスクリプトですと、~/bin/以下に置いて、 $ bash -c test.sh test と実行できます。 $ printenv PATH /home/mona/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games ふだんbashを使っていないので、~/.bashrcはありものです。 ~/.bashrc PATH=$HOME/bin:$PATH ↑とりあえず、これだけにしました。 これでもやはり、 $ bash -c navi2ch.makethumb www.google.co.jp/intl/ja_jp/images/logo.gif では画像を取得できませんでした。 "bash -c"はいろいろときびしそうですね。
- 820 名前:806 mailto:sage [2007/07/06(金) 13:12:21 ]
- >>818
$ bash -c 'navi2ch.makethumb 引数' で画像を取得出来ました。 超基本的なことに気付かず、おさわがせして申し訳ないです。 どうもすみませんでした。 ほんとうにごめんなさい。
- 821 名前:名無しさん@お腹いっぱい。 [2007/07/15(日) 17:20:37 ]
- blog.miraclelinux.com/thethird/2006/12/post_4e7b.htmlo
(sleep $ALIVE_TIME; ps $$ && kill -INT $$; sleep 1; ps $$ && kill -KILL $$) 1秒待ってもう1度だけkillしてるのはなぜなんですかね?
- 822 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/15(日) 17:56:03 ]
- >>821
よく見ろ。-INT と -KILL で違うだろ。
- 823 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/15(日) 22:02:12 ]
- 本当だ。失礼しますた。
- 824 名前:名無しさん@お腹いっぱい。 [2007/07/16(月) 22:04:04 ]
- シェルスクリプトでif文に正規表現による文字列一致条件を記述できないでしょうか?
sedなどを使ってやればできないことはないですが、 if文一発でできればいいなと。。
- 825 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/16(月) 22:07:47 ]
- >>824
できない。 正規表現と言ってるが、実際にはワイルドカードで十分なことが多い。 ワイルドカードなら ifの代わりに caseを使えばできる。
- 826 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/16(月) 22:08:01 ]
- case使え。
- 827 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/16(月) 22:25:25 ]
- モレはいっつもテストコマンドの中でegrep使ってるけど・・・・素人なのでアフォな事やってるのかも。
- 828 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/16(月) 23:48:40 ]
- if expr $string : $regex >/dev/null; then
...
- 829 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/17(火) 23:10:26 ]
- >>827
機能・性能に問題なきゃそれで充分だろ。 コンピュータ (て言うか、道具) なんて楽するためにあるんだから。
- 830 名前:827 mailto:sage [2007/07/17(火) 23:45:10 ]
- じゃあ、>>824もそれでよろ(w
- 831 名前:名無しさん@お腹いっぱい。 [2007/07/22(日) 20:41:39 ]
- UNIX上からリモートでWindowsのバッチを起動させるシェルスクリプトを
作りたいのですが、実装イメージがまったくわからず困ってします。 Win相手に対してrshは使えないであろうし。。。何かいい方法をご存知の方 いらっしゃいませんか。よろしくお願いいたします。
- 832 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/22(日) 20:44:38 ]
- スレ違い
- 833 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/22(日) 21:38:16 ]
- >>831
cygwin + sshdとかな。
- 834 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/22(日) 23:07:17 ]
- >>831
Windows が 2k / XP なら、telnet でどうぞ。
- 835 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/22(日) 23:07:46 ]
- >>831
>Win相手に対してrshは使えないであろうし 使えるよ sohda.net/cygwin/treebbs/treebbs.cgi?kako=1&all=232&s=232 www.uhero.info/techinfo/CygwinSSH_setup/index.html
- 836 名前:824 [2007/07/22(日) 23:08:49 ]
- 実行時間は case < expr < sed だったので
結局、caseにしときました。
- 837 名前:831 mailto:sage [2007/07/22(日) 23:48:25 ]
- >>833>>835
アドバイスありがとうございます。cygwinについて あまり知識がないので調べてみます。 >>834 telnetで可能ということは、Win上でtelnetサービスを 稼動させておけばいいということでしょうか? 明日にでも実施してみようと思います。 ありがとうございました。
- 838 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 01:24:43 ]
- > telnetで可能ということは、Win上でtelnetサービスを
> 稼動させておけばいいということでしょうか? 手元の 2k だと特にわざわざ入れた覚えはないから、多分 標準で入ってると思う。 サービスの中に telnet ってあるはずだから、それを起動 するだけ。 常用するなら、スタートアップの種別を「自動」にする。
- 839 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 03:17:55 ]
- telnetは対話型だから、ダメというかめんどくさいだろ。
- 840 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 07:39:36 ]
- expectとか使えばいいだけじゃないの?
- 841 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 21:43:20 ]
- 下記のようなファイル検索をするシェルを作ったのですがうまく動きません
#!/bin/csh echo 検索するファイル名を入力してください: set filename = $< (find /* -name $filename -type f -print > /dev/tty) > & /dev/null 「hoge.txt」を検索する場合はうまくいくのですが、 ワイルドカードを用いた「hoge\*」の検索をすると検索を行わずに一瞬で終了してしまいます。 setで変数に"\*"を入力するのは不可能なのでしょうか?
- 842 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 21:45:14 ]
- 今日はカレーにする
- 843 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 21:50:39 ]
- >>841
>>1
- 844 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 21:52:21 ]
- ・シェルスクリプトのことをシェルってゆーな
クオートすれば?
- 845 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 22:31:26 ]
- シェルってゆうな。クズ。
csh捨てろ。クズ。
- 846 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 22:34:46 ]
- スルーカ
- 847 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/24(火) 22:44:48 ]
- >>843-845
すんまそん、会社でシェルシェル言ってるもんで癖がついてました。 クオート試してみることにします。 cshは会社の都合なんすよ
- 848 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 06:21:28 ]
- >>847
最初の行に sh と書きゃいいじゃん。
- 849 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 12:34:58 ]
- >>848
実社会で勉強してね cshからshに変えるのは容易ではないのだよ シェルスクリプトは1人で作るのではないし 1つの会社で作るものでもない
- 850 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 14:06:37 ]
- つまり、1人だけではなく1つの会社だけでもなく、
いくつもの会社にまたがって何人もの人がよってたかって >>841みたいなスクリプトを書いているわけだな。すげぇ。 つーか、csh を使うにしてもせめて #!/bin/csh -f にしろよ。
- 851 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 14:13:50 ]
- >>841
の例は、わざわざcshの欠点が目立つような典型例だな。 ワイルドカードの展開の問題とか、 findのstderrを捨てるために苦労してるところとか。 そもそも、findをインタラクティブに実行させるようなスクリプトは、 システム管理用スクリプトじゃない。初心者ユーザー向けに作ったものだろ。 こんなの、/bin/shで書き直せば一発。 >>841 が抱えているcshでの問題も一気に解決する。 >>849 へ。 みんな実社会で「cshスクリプトは使わない」が常識だといってるんだよ。 >>849 は自分の会社名を公表しない方がいいよ。会社の不名誉になるからね。
- 852 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 14:15:45 ]
- cshじゃなきゃだめな会社ってどこ?
- 853 名前:849 mailto:sage [2007/07/25(水) 14:57:09 ]
- >>851
ま、会社名を挙げる気は無いけど、 おれんとこでは全部のスクリプトがcshだし スクリプトの作成・保守を依頼している会社も cshで作るようになっている。 OSが古いもの・新しいものが混在しているのも 理由ではあるが、 常識など、会社によって違うものだろ。 シェルがダメなのは分かるが、 シェルを変えろとか無理な話だ
- 854 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 14:59:19 ]
- HP-UXでkshを使っているのですが、C-p・C-nで履歴検索ができるとmanpageに書いてあるのですが、
実行しても何も起きません。 どうすればよいのでしょうか? また、linuxのbashみたいに↑↓キーで履歴表示をしたいのですが、 kshで実現可能でしょうか?
- 855 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 15:07:05 ]
- >>853
> OSが古いもの・新しいものが混在しているのも理由ではあるが、 /bin/shが存在しないUnixなんて無いんじゃないのか > シェルがダメなのは分かるが、シェルを変えろとか無理な話だ へえ。cshがダメなのははるか前からの常識なのに、誰もその やりかたを変えようとせず、変えるのは「無理」だと思ってるんだ。 しかも古いスクリプトだけでなく、新しいスクリプトもわざわざ cshで書き、ゴミを製造し続けていると。 勿論、C++やJavaやPythonなんて誰も使わないんだろうな。 ソース管理は未だにCVSでさえない、いやソース管理なんて概念もないね? お前さんがアホなのか、会社がアホなのかは知らないが、実に見事に アホだな。
- 856 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 17:35:21 ]
- 会社の都合なら仕方ないんだから
そんなに必死に弁解しなくていいよ
- 857 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 20:55:10 ]
- >>853
だってさ、起動スクリプトとかOSに元々内蔵されてるスクリプトはshだよね? そういうスクリプトを修正する時も、cshで書き直してるの?
- 858 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 23:13:35 ]
- 棄てる気になれば簡単に捨てられる。棄てられないのは>>853がヘタレなだけ。
- 859 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/25(水) 23:54:41 ]
- 恐ろしいことにうちはコーディングルールでcsh使うことになってるorz
おまけに最近スクリプトでsql実行してるのを、「COBOLで実装しろ」って指摘された… SQLの使い方調査があって、スクリプトが調査範囲から漏れたからだと。
- 860 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/26(木) 00:27:56 ]
- >>859
つまりOSインストール時からあるスクリプトも全部cshで書き直してるって事か?
- 861 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/26(木) 00:40:11 ]
- 間違っているルールを変更できないなんて将来の無い会社だな。
- 862 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/26(木) 01:32:53 ]
- >>859
なんでcsh使うことになったの?
- 863 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/26(木) 04:05:17 ]
- 袋叩きw
csh好きな勉強不足の若者の脳内会社なんだから許してやれよw
|

|