1 名前:名無しさん@お腹いっぱい。 [2008/02/11(月) 19:21:07 ] シェルスクリプトの総合スレです。 スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずは注意点、リンク、地鎮祭など(>>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 でトレースしましょう。 前スレ シェルスクリプト総合 その9 pc11.2ch.net/test/read.cgi/unix/1187130302/
571 名前:553 [2008/04/02(水) 17:52:14 ] >> 567 誤解してました。 >> 568 shell関数まで添削してもらえるとは恐縮です。 >> 569 ありがとう。[[ ]]ではなく[ ] を使います。 あと、"$i"の記法はshellの本を注意深く読んだらちゃんと書いてありました。 下記のように直して、実行したら意図どおりに動いてます。m(_"_)m ========================================== #/bin/bash -x do_iconv(){ mv $1 "$1".old /usr/bin/iconv -f euc-jp -t utf-8 < "$1".old > $1 touch "$1".old } for i in *.html do if [ -e "$i".old ] then if [ "$i" -nt "$i".old ] then do_iconv "$i" fi else do_iconv "$i" fi done ======================================
572 名前:553 mailto:sage [2008/04/02(水) 17:52:54 ] bash -x の実行例 + for i in '*.html' + '[' -e SandBox.html.old ']' + '[' SandBox.html -nt SandBox.html.old ']' + do_iconv SandBox.html + mv SandBox.html SandBox.html.old + /usr/bin/iconv -f euc-jp -t utf-8 + touch SandBox.html.old + for i in '*.html' + '[' -e Travel.html.old ']' + '[' Travel.html -nt Travel.html.old ']' + for i in '*.html'
573 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 19:12:56 ] >>554 の言うように、 "$i".oldの方を編集しない限り、 必ず"$i"の方が新しいのに、(iconvの結果) > if [ "$i" -nt "$i".old ] してる。逆に"$i".oldを編集したら何も行われない。 仕様を日本語で書いたらどうか? たぶん.iconvedを作って、 "$i"と時間比較して新しいものだけiconv、 最後に必ずtouch .iconved、 これでやりたいことに合うんじゃないか?
574 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 19:43:56 ] >>573 その問題は、 >>557 >touch ${i}.old をiconvの後にしてみましたが ↑ で解決済。 というか、>>571 で、「実行したら意図どおりに動いてます。」 ですべて解決済なんだから、これ以上言うことはない。
575 名前:名無しさん@お腹いっぱい。 [2008/04/02(水) 20:00:06 ] カレントディレクトリが /abc/def/ghi/jkl/mno/pqr/stu/ とフルパスであったときに一番最後の部分(stu)を取り出したいのですが どのように書けばよいのですか
576 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 20:18:40 ] basename /abc/def/ghi/jkl/mno/pqr/stu/
577 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 20:19:16 ] basename `pwd`
578 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 21:33:15 ] >>551 はいはい、それがお前が出した唯一の根拠ね。 で、それが何かの標準になってるのか? ところで、>>516 ので試みた捏造に関しての弁明はどうした?
579 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 21:49:00 ] まだやってんのかw
580 名前:sage [2008/04/05(土) 16:40:16 ] リナックス等の研究やってます。 www.ine.sie.dendai.ac.jp/homepage/ www.ine.sie.dendai.ac.jp/wiki/index.php?FrontPage
581 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 07:37:45 ] シェルスクリプトから以下のようなテキストを呼びだして、 環境変数を展開した上で、位置変数に set したいのですが、 お知恵を拝借したく、どうかよろしくお願いします。 $ cat test.txt $HOME/doc/ いまは、シェルスクリプト内部で、 sed -e 's/\$HOME/$HOME/g' のようにしています。
582 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 07:40:42 ] >>581 eval set `cat < test.txt`
583 名前:581 mailto:sage [2008/04/10(木) 08:20:51 ] >>582 どうもありがとうございます! eval を使ってもう一度、$HOMEを変数展開をするのですね。 独力では全く思いつきませんでした。 本当にありがとうございました。
584 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 08:25:30 ] >>582 catが無駄です。
585 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 08:28:30 ] >>584 catなしでどう書くの?
586 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 08:29:07 ] eval set `< test.txt`
587 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 09:30:12 ] はいはい。bash依存。
588 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 08:28:49 ] 質問です! timeコマンドの結果をファイルに出力したいのですが、 どうやっても0バイトで出力されます。 以下、やってみたことを記載します。 $ time sleep 1 real 0m1.004s user 0m0.000s sys 0m0.001s $ time sleep 1 > hoge.dat real 0m1.439s user 0m0.000s sys 0m0.001s $ cat hoge.dat $ time sleep 1 > hoge.dat 2>&1 real 0m1.009s user 0m0.000s sys 0m0.001s $ cat hoge.dat やってみたこと以上です。 なぜ出力されないのでしょうか?どのようにすれば出力されますでしょうか?
589 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 08:32:44 ] >>588 bash使ってるだろ。 timeはbashの特殊な内部コマンドで、リダイレクトできない。 解決するには一旦サブシェルを通す。 $ (time sleep 1) 2> hoge.dat
590 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 11:19:02 ] >>588 /usr/bin/timeならファイルに出力できるよ。
591 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 11:37:22 ] >>590 >>589 /usr/bin/time は表示書式が違う
592 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:39:52 ] \time
593 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:40:30 ] bashってtimeが内部コマンドなのかw
594 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:44:15 ] 正確には shell keyword
595 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:50:22 ] あれ? マニュアルではtimeじゃなくて、timesになっているけど?
596 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:51:30 ] >>595 ぉぃぉぃ、timesとtimeは全く別のコマンド
597 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:58:21 ] times Print the accumulated user and system times for the shell and for processes run from the shell. The return status is 0. ごめん。マニュアル読んだだけでは何が違うのか分からん。 それに、timeの項目自体が見つからんし。
598 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 15:05:56 ] bash なら help time
599 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 15:06:37 ] man bash なら Pipelines の節。
600 名前:名無しさん@お腹いっぱい。 [2008/04/12(土) 00:11:45 ] しぇるすぷりくとでHTML書いて ボタン押したらhoge.shを実行したい ヒントください><;
601 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 01:02:36 ] >>600 実行環境を限定しなさい。 OSは? httpサーバは? 使用可能なCGIは? CGI実行時のセキュリティ要件は?
602 名前:名無しさん@お腹いっぱい。 [2008/04/12(土) 01:29:51 ] OS: FreeBSD 6.3-RELEASE-p1 http: Apache HTTP Server 2.2.8 CGI: This is perl, v5.8.8 built for i386-freebsd-64int セキュリティ要件: 無し
603 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 01:40:48 ] >>600 すみません、日本語でお願いします。
604 名前:名無しさん@お腹いっぱい。 [2008/04/12(土) 02:00:52 ] 日本語で書いたつもりなのに文字化けしてるんですか?><
605 名前:>>588 mailto:sage [2008/04/12(土) 06:09:32 ] >>589 ありがとうございます。
606 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 06:21:07 ] これシェルスクリプトの話か・・・?
607 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 07:16:24 ] >>601 答えられないくせに実行環境だけ聞くなよ。 実行環境あまり関係ないだろ。
608 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 07:24:57 ] >>600 エスパーすると、Webのフォーム入力でシェルスクリプトを入力して [送信]ボタンを押すと、そのシェルスクリプトが実行されて、 実行結果がWeb上に表示される、って感じのものを作りたいのかな?
609 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 09:21:01 ] エスパーじゃなくてもシェルスクリプトでCGIプログラム作りたいという事はわかる、>>601 が無能なだけ。 >使用可能なCGIは? この質問に至っては噴飯ものだ。 CGI/1.1と答えればいいのだろうか? >>600 CGIというサーバー上でプログラムを動かす仕組みがあるから、検索してわからない事があったらまた来なさい。
610 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 09:52:37 ] >>609 「シェルスクリプトでCGIプログラム作りたい」のじゃなくて、(さすがにそれは知ってるだろ) ユーザーがWeb上で入力したシェルスクリプトを実行してくれるような CGIを作りたいんじゃないのか?
611 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 10:26:00 ] まぁまぁ、ここは有能な>>609 に任せておいたらどうだ
612 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 10:38:47 ] >>610 >>600 からそこまで読み取れるなんて想像力がたくましいな。 でも俺に聞かれても困る。元質問者に聞いてくれ(そして、板違いだからwebprog行け) それとも「CGIを作る? CGI/1.2とかいう新しい規約でも作りたいのか?」と突っ込んで欲しいのか? >>611 == >>601 だな。無能という事実を突きつけられて悔しかったのか? > 使用可能なCGIは? この質問で意図した事を答えてみろ。
613 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 10:43:06 ] hoge.sh は実在します。例示には example.com 等を使いましょう。
614 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 10:51:55 ] >>612 > >>611 == >>601 だな。 違うよ。
615 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 11:11:59 ] >>602 読むと、CGI自体はperlで作るらしいから、 >>610 の解釈が正しそうだな
616 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 11:53:43 ] saryのように高速でかつgrep並みの正規表現検索ができるユーティリティってありませんかね? libstreeとか使って誰か作ってそうな気がするんですが、ぜんぜん見つかりません
617 名前:名無しさん@お腹いっぱい。 [2008/04/12(土) 21:54:43 ] hoge.sh はドメインじゃなくて スクリプト名では・・・
618 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 22:01:28 ] ネタにマジレス
619 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 23:54:44 ] 実際にwhoisしてみると、空いているらしい。>hoge.sh
620 名前:600 mailto:sage [2008/04/13(日) 00:33:33 ] >>602 |しぇるすぷりくとでHTML書いて $create.sh > /usr/local/www/html.html $cat create.sh #!/bin/sh echo \<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\> echo \<HTML LANG=ja\> echo \<HEAD\> echo \<meta http-equiv=\"content-style-type\" content=\"text/css\"\> echo \<META HTTP-EQUIV=Content-Type CONTENT=\"text/html\; charset=EUC-JP\"\> echo \<META name=\"generator\" content=\"shell script\"\> echo \<LINK REV=made HREF=\"mailto:yourmailaddress@your.mail.domain.com\"\> echo \<LINK REL=contents HREF=\"./index.htm\"\> echo \<LINK REL=stylesheet HREF=\"./default.css\" TYPE=\"text/css\" TITLE=\"./default.css\" MEDIA=\"screen,tv\"\> echo \<TITLE\>sample\</TITLE\> echo \</HEAD\> echo \<BODY\> echo \<FORM ACTION=\"/cgi-bin/hoge.cgi\" METHOD=\"POST\" ENCTYPE=\"text/plain\" LANG=\"ja\"\> echo \<div\>\<INPUT TYPE=\"submit\" TABINDEX=\"0\" ACCESSKEY=\"S\"\>\</div\> echo \</FORM\> echo \</BODY\> echo \</HTML\> |ボタン押したらhoge.shを実行したい セキュリティ要件:なしなら、perlスクリプト内に以下のように書けば... $list[0] = "hoge.sh" system "/bin/sh", @list;
621 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 07:32:30 ] >>620 お前 >>600 じゃなくて >>601 だろ。 echoが無駄です。echoは1個だけでできます。 perlのsystemでも、一旦listに入れるのが無駄です。 あと、そもそも >>600 の質問意図とは違うと思います。
622 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 10:30:33 ] echo1つで済むつーか、catとヒアドキュメントの出番じゃね?
623 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 10:37:58 ] ヒアドキュメントはテンポラ作るから嫌い。echo 1つがスマート。
624 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 11:44:04 ] テンポラリ作るとまずいことでもあるんですか?
625 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 11:51:04 ] >>623 どこにできるんだ?
626 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 12:16:26 ] >>624 意味もなくHDDに書き込むのが無駄。 >>625 教えて欲しければ「教えてください」と家。 普通は /tmpにできる。シェル側からすぐに unlinkされるから lsでは見えないけど。トレースすればわかる。
627 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 12:57:52 ] >626 実装による? Linuxのzshとbashで strace cat <<HOGE hoge HOGE としてみたけど別にテンポラリファイル作ってなかった。 fd3番以降を開いてるのは共有ライブラリのリンク時くらい。 "hoge¥n"のreadは0から。 dupとかなかったから、ファイル開いてリダイレクト処理をしたわけでもないな。
628 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 13:18:32 ] >>627 トレースが下手だな catをstraceしてもしょうがないだろ。 bashやzshをstraceすること。 catに渡される時にはすでにunlinkされてるから、 catをstraceしても見つからないはず。
629 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 13:35:53 ] (bashの場合) $ strace -f bash -c 'cat << EOF hoge EOF ' (中略) : [pid 11486] open("/tmp/sh-thd-1208089889", O_RDONLY|O_LARGEFILE) = 4 [pid 11486] unlink("/tmp/sh-thd-1208089889") = 0 テンポラリファイル作ってるね。 (zshの場合) $ strace -f zsh -c 'cat << EOF hoge EOF ' (中略) : open("/tmp/zsh6MaAd3", O_RDONLY|O_NOCTTY|O_LARGEFILE) = 3 unlink("/tmp/zsh6MaAd3") = 0 テンポラリファイル作ってるね。
630 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 13:36:32 ] $ strace -o bash.log bash bash-3.1$ cat <<HOGE > hoge > HOGE hoge bash-3.1$ exit $ egrep '(creat|unlink)' bash.log (なにもなし) だめか。どうやって確認すればいいか、正しいやり方を教えてけろ。
631 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 13:37:09 ] あああ、-fか。理解。
632 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 16:38:06 ] /tmpの日付見ればいいんじゃないの?
633 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 16:59:54 ] catだとすぐ終了しちゃうから、tail -fを使うと良い。 $ tail -f << EOF hoge EOF ってやっておいて、別のxtermから、 $ lsof | grep tail ってやると、(deleted)って表示されてる /tmp以下の一時ファイルがあるのがわかる。
634 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 17:23:23 ] >>632 それだけだと、無関係のプロセスが/tmpをいじくった可能性が残る。
635 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 17:33:54 ] 忙しくないマシンで何回かやれば可能性は実用上0になるだろ
636 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 17:36:00 ] それで満足ならいいんじゃね?
637 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 17:59:36 ] >>633 がもっといい方法示してるじゃないか。
638 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 19:53:17 ] >>626 礼儀知らずで申し分けありませんでした。テンポラリファイルを作るというこ とは、シングルユーザーモードなどで、リードオンリーファイルシステムだと here doc を使ったシェルスクリプトは動かないということでしょうか?
639 名前:名無しさん@お腹いっぱい。 [2008/04/13(日) 20:15:12 ] エディタの置き換えでも出来る事なのですが良ければ教えてください わるs わるk わるi わりこn わりこm わりあt じょうち じょうちょう じょうなん のように語尾にアルファベットが付いているのと付いてないのがあるんですけど アルファベットを削除する方法とかってSEDではどのようにするのでしょうか?
640 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 20:20:09 ] >>639 sed 's/[a-z]$//'
641 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 20:56:04 ] >>586-587 bash依存じゃないだろ。kshでも使えるから、標準で使っていいんじゃないの?
642 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 02:04:22 ] >>641 読まずにりぷらい、まあ、もちつけ共通拡張かも知れないだろ。 POSIXに規定されているか読みなおすんだ。
643 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 13:18:12 ] 配列の値の設定ってバックスラッシュか何かで 複数行にまたがって書くことはできないのでしょうか?
644 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 13:36:12 ] >>643 できる。シングルクォートを使うのがいい。 $ hoge=('aaa aaa aaa' 'bbb bbb bbb') $ echo "${hoge[0]}" aaa aaa aaa $ echo "${hoge[1]}" bbb bbb bbb
645 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 14:56:04 ] >>644 どうもありがとうです
646 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 15:00:53 ] はいはい、バッシュ依存。
647 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 21:22:58 ] kshでも使えるからデファクトだろ?
648 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 13:24:12 ] Solaris8上でBourne Shellを用いてスクリプトを書いています。 dateコマンドを整形する際にシングルクォートで括りますが、 $ echo `date '+%H%M` などとしても通ってしまうのは何故なんでしょうか?
649 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 13:54:55 ] >>648 Solarisのバグです。シングルクォートはちゃんと閉じましょう。
650 名前:名無しさん@お腹いっぱい。 [2008/04/15(火) 20:40:12 ] シェルを始めたのですが、変数でいきなり詰まりました >< $i = 123; =: command not found もしかしてシェルでは = は外部コマンドなんでしょうか?
651 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 20:47:30 ] 何シェルかくらいかこうぜ・・・ i=123
652 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 20:49:37 ] >>651 今度はこうなります i = 123 i: command not found
653 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 20:57:39 ] >>651 のをコピペしな あと、何シェルかくらいかこうぜ・・・
654 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:03:03 ] >>653 この場合何シェルか関係あるか??
655 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:24:30 ] 関係有るから指摘している。 が、cshだったら他所へ行ってくれ。
656 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:26:27 ] cshだったらエラーメッセージが違うじゃん。回答者はそれくらい見抜かないと。
657 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:27:17 ] >□お約束 >・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 > bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
658 名前:650 mailto:sage [2008/04/15(火) 21:30:24 ] #!/bin/shです。 i = 123; ってやっても、やっぱり i: command not found と出ます><
659 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:31:33 ] 650はネタなのかマジなのか。
660 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:50:24 ] シェルでは = は比較を表す (例: [ $i = 123 ] ) 代入は := で。
661 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:50:27 ] i = 123でなくてi=123です。スペースを入れてはいけません。
662 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 22:08:02 ] ネタはほっとけ。
663 名前:名無しさん@お腹いっぱい。 [2008/04/16(水) 08:48:00 ] 質問させて下さい。 あるディレクトリ以下の、特定の拡張子(.tig)をもつファイルの(find ./ -name "*.tig") 名前を変えて( hoge.tig -> hoge_org.tig) その二つの名前を与えたコマンドを実行したいです。( hoge -t hogu hoge_org.tig hoge.tig) for org_name in `find ./ -name "*.jpg"` do $name = $org_name + "_org"; echo $org_name; echo $name; done と言うのを考えてみたのですが、エラーでうまく行きません。 あと、拡張子の前に名前を追加したいのですが、実現方法が分かりません。 もしよろしければ、教えて頂けると助かります。 よろしくお願いします。
664 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 08:53:43 ] >>663 とりあえず、 $name = $org_name + "_org"; の部分のみに回答。 まず、perlみたいな書き方の癖はやめろ。 name=`basename $org_name .jpg`_org.jpg あと、質問が、最初は .tigと言ってるのに下のfor文は .jpgで、矛盾してるぞ。
665 名前:663 mailto:sage [2008/04/16(水) 08:58:21 ] ありがとうございます。 それがわかれば、なんとかできそうです。 .jpgなのは、ローカルな環境でテストをしたため違うファイルを使っていました。
666 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 13:41:14 ] findでやってるから'/'含みのpathnameになる。 しかしbasenameは最後のコンポーネントだけ切り出してしまう。 name=`echo $org_name | sed 's/.jpg$/_org.jpg/'` の方が良いと思われ。あるいは、 dir=`dirname "$org_name"` org=`basename "$org_name"` new=`basename "$org_name" .jpg`_.org.jpg orgpath="$dir/$org" newpath="$dir/$new"
667 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 18:41:06 ] phpのsystem関数から シェルコマンドを実行を試してます。 lftp -f hoge.conf rm hoge.conf したいのですが、 lftp -f hoge.conf がかなり時間がかかるため、 lftp -f hoge.conf > /dev/null & してから rm hoge.conf を実行したいと思います。 system("lftp -f hoge.conf > /dev/null & rm 000 hoge.conf"); とすると lftpが正常に実行されません。 おそらくrmがlftp完了前に実行されているからと思いますが、 どのように記述すれば良いでしょうか? どなたかご教授くださいませ。
668 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 18:56:25 ] >>667 system("lftp -f hoge.conf > /dev/null ; rm hoge.conf"); じゃだめなの?
669 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 19:08:25 ] OSコマンドインジェクションを入れ込まないように気をつけろよ
670 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 19:08:44 ] & を何だと思ってるんだ
671 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 19:26:22 ] system("(lftp -f hoge.conf > /dev/null ; rm hoge.conf) &"); こうかな
672 名前:667 mailto:sage [2008/04/16(水) 19:36:29 ] >>668 これだと rm hoge.conf が lftp 完了前に実行されたようです >>671 "("なんてしらねーよ、みたいなエラーが出てしまいました。
673 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/16(水) 19:49:57 ] >>672 system("sh -c 'lftp -f hoge.conf > /dev/null ; rm hoge.conf' &");
674 名前:667 mailto:sage [2008/04/16(水) 20:08:22 ] >>673 神サンクスです!!それでいけました!
675 名前:667 mailto:sage [2008/04/16(水) 20:35:38 ] すいません、 いけたと思ったら、lftpが終わるまでブラウザで読み込みが続いてしまいます。 www.stackasterisk.jp/tech/php/php02_02.jsp ---------------------------------------------- > /dev/null」 が「リダイレクト」に相当する記述です。 /dev/null というのは、「ゴミ箱」と思って頂いて構いません。 すべての出力を捨てます。 最後の & は、バックグラウンドで実行するという意味です。 このあたりの詳しいことは UNIX のシェルの本をみれば載っています。 「PHPはそのプログラムの実行が終了するまでハングします」というのは、 つまり IE の地球マークが廻りつづける状態をいいます。 ---------------------------------------------- というのを参照しています。
676 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 02:33:27 ] ぐぐって得た付け焼き刃の知識をこねくるんではなく 一度基礎から勉強した方がよろしいかと。
677 名前:名無しさん@お腹いっぱい。 [2008/04/17(木) 08:36:16 ] >>675 結局jpgなんだねw
678 名前:名無しさん@お腹いっぱい。 [2008/04/17(木) 12:33:53 ] シェルスクリプトで関数計算とかできるの? A= 2√3/0.0000456789*π+$hoge echo $A 小数点以下なげーとか・・・・
679 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 12:47:28 ] >>678 $ hoge=123 $ echo "2*sqrt(3)/0.0000456789*(a(1)*4)+$hoge" | bc -l 238368.58352774053454525488 注: πは (a(1)*4) で表す。(atan(1) = π/4 を利用)
680 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 12:53:56 ] そういう場合はbcとか関数計算を行うプログラムに実行させる。 POSIXシェルならば整数の四則演算が行えるので、この上に(関数演算を含む) 浮動小数点演算を実装すればシェル単独でも可能。
681 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 13:00:42 ] >>679 少し分かりやすく hoge=123 pi="(a(1)*4)" echo "2*sqrt(3)/0.0000456789*$pi+$hoge" | bc -l
682 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 13:14:45 ] 実例 >>679 が投稿された「あと」で、 実例示せずに能書きだけ書いてる >>680 ってマヌケだよなぁ。
683 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 14:29:32 ] 「やりかた」を書くだけで間抜けなのか
684 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 14:33:27 ] 具体的な「やりかた」を書いているのは >>679 の方。 >>680 は具体的な「やりかた」を何ひとつ書いていない、だから間抜け。
685 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 14:34:14 ] そんなことより、批判だけするやつのほうが・・
686 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 15:55:30 ] シエルで、フォントサイズを変えるのはどうやるんですか A$ = "エラーが発生しました" echo A$ のところで、「エラー」の文字だけ大きくしたいんですが
687 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 16:00:27 ] banner Error; echo 'が発生しました'
688 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 16:46:29 ] 仮想端末のエスケープシーケンスにフォントサイズ変更があれば 「エラー」の前後にそのエスケープシーケンスを書けばいい。 色やブリンクの有無といった変更も同様。
689 名前:名無しさん@お腹いっぱい。 [2008/04/17(木) 19:13:26 ] スクリプトの神様 今日もありがとうございました 勉強になりました!!!
690 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/17(木) 19:54:36 ] banner面白いなw
691 名前:名無しさん@お腹いっぱい。 [2008/04/17(木) 22:12:31 ] >>679 >>680 >>681 神よ! d(゚Д゚)☆スペシャルサンクス☆( ゚Д゚)b さて、Excelを窓からブン投げるかw
692 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 01:03:30 ] このスレは定期的に神が現れるな。的確で即レス、何者なんだろ
693 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 01:38:31 ] >>686 少し目的からずれる気がするが、以前どっかのスレに 投下したスクリプトをちょっと改造したもの。 #! /usr/bin/env bash # vivid_error.sh -- 標準エラー出力に色を付ける # Original: # ttp://d.hatena.ne.jp/goth_wrist_cut/20080122/1201003827 name='vivid_error.sh' (( $# > 0 )) || { echo "error: $name: No argument." 1>&2 exit 1 } temp=$( mktemp "$TEMP/$name.$PID" ) rm -f "$temp" mkfifo "$temp" sed 's/.*/1m\0m/' < "$temp" 1>&2 & "$@" 2> "$temp" status=$? rm -f "$temp" exit "$status"
694 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 02:37:38 ] ESC=$(printf '\033') とかするのおすすめ
695 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 08:19:53 ] terminfoなsystemじゃないとtputはないかも。 BOLD=`tput bold` EXIT=`tput sgr0` printf "${BOLD}This ${EXIT}is a ${BOLD}test${EXIT}.\n" カラーも可能。 文字列加工はsed等で。
696 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/18(金) 13:32:39 ] fifoなんていらないよね。 #!/bin/sh # 標準エラー出力に色をつけてコマンドを実行 if [ $# -eq 0 ] then echo "Usage: $(basename $0) command args..." 1>&2 exit 1 fi exec 3>&1 ESC=$(printf '\033') "$@" 2>&1 1>&3 | sed "s/.*/$ESC[1;31m\0$ESC[0m/" 1>&2
697 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 18:50:18 ] 初歩的な質問ですが LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined を LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined の様に変更したいのですが・・・ sed -i "s/^LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined/LogFormat \"%h %l %u %t \\\"%!414r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined/g" /root/test で良い様に思うのですが・・・ "%h \"の様な所でエラーが出て変換ができません よろしくです
698 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 18:51:56 ] 初歩的な質問ですが LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined を LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined の様に変更したいのですが・・・ sed -i "s/^LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined/LogFormat \"%h %l %u %t \\\"%!414r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined/g" /root/test で良い様に思うのですが・・・ "%h \"の様な所でエラーが出て変換ができません よろしくです
699 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/20(日) 18:53:14 ] なんとなくワロタ
700 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/20(日) 19:48:07 ] >>698 まず、sedプログラム本体は " " じゃなくて ' 'で囲むこと。 " " だといろいろエスケープが面倒。
701 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 21:47:22 ] >>700 ありがとうございました 修正できました
702 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 22:34:02 ] シェルスクリプトでPerlとかRubyのchopと同等なことって、 どうすればいいですか? bash限定でもかまいません。
703 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/20(日) 22:42:41 ] >>702 シェルでは、何も考えなくても readとかで読み込んだら自動的に chopされてる。
704 名前:名無しさん@お腹いっぱい。 [2008/04/20(日) 23:31:00 ] >>703 さっきは、 「echo -nで改行が取れないなあ、あれ?」って状態で質問したのですが、 readでも取れませんでした。で、ようやく\r\n改行だったことに気づきました。 bashの%*\r*で解決しました。
705 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 00:26:14 ] 質問させてください テキストファイル内に 建造物 (けんぞうぶつ) 構築物 (こうちくぶつ) 構造体 (こうぞうたい) ()でくくられた文字のみを取り出したいのですが可能でしょうか?
706 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 00:36:23 ] >705 いくらでも方法はある。 sed、awk、perl あたりなら一行野郎でいける。 awk -F '\\(|\\)' 'length($2)>0{print $2}'
707 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 00:44:02 ] >>706 レスありがとうございます! ちなみにsedだと、どういう風になりますか?
708 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 02:15:09 ] >>706 建造物 (けんぞうぶつ) 構築物 (こうちくぶつ) 構造体 (こうぞうたい) こういうテキストのこともないかな。
709 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 02:19:44 ] $ echo '建造物 (けんぞうぶつ) 構築物 (こうちくぶつ) 構造体 (こうぞうたい)' | sed 's/[^(]*(\([^)]*\))/\1/g' けんぞうぶつこうちくぶつこうぞうたい
710 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 18:20:49 ] 多分、作りこまないと駄目だと思うんですが、駄目元で質問します。 `find .`の結果を各ディレクトリ毎に、 第1のソートキー:ディレクトリorファイルの別(ディレクトリが先) 第2のソートキー:更新時間の降順 でソートしたものが欲しいです。 ファイルブラウザとかだと、そういう表示が出来るので、 もしかすると、簡単におこなう方法があるのかな?と密かに期待してます。 宜しくお願いします。
711 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 18:56:59 ] 普通に考えたら出来る
712 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 19:01:20 ] >>711 結果をファイルに出力してもいいのであれば、 find -type dでループを回していけばやれるのはわかっているのですが、 作業ファイルを介さずにそのままwhile readで受け取れるくらい 簡単な方法がないかな?と思って質問させて頂きました。
713 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 19:12:16 ] 多分スクリプト言語使った方がいいと思う
714 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 19:19:38 ] >>713 ちょっとごめんなさい ディレクトリは名前順でもいいです。 当初>>710 で書いたよりはずっと簡単に実現できます。
715 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 19:19:44 ] >>711 そういうことはお前の考えた結果を貼ってから家。
716 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 19:26:48 ] >>714 「ディレクトリが先」という条件さえなければ、 単に ls -latR で行ける。findすらいらない。 >>712 結果をファイルに出力する方法でやる方法がわかってるなら、 それをファイルに出力しない方式に書き換えることは多分できる。
717 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 19:31:02 ] >>710 GNU ls使えば、 ls -latR --group-directories-first で一発。
718 名前:名無しさん@お腹いっぱい。 [2008/04/21(月) 20:23:19 ] みなさんどうもありがとうございました。 結局(とりあえず)、 find -d でループを回して作業ファイルを作る方法にしました。 ディレクトリは名前順でファイルは更新時間降順にしました。 ちなみにGNU ls 5.21で--group-directories-firstはサポートされてませんでした。
719 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 21:04:47 ] find ... -print0|xargs -0 ... と区切りをわざわざ^@にするのが推奨されてるのって何故なんですか?
720 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 21:13:18 ] 他の文字はファイル名に使われてるかもしれないから。
721 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 21:55:46 ] -print0|xargs-0を使うのは石器人。 現代人なら-exec utility_name [argument ...] {} +
722 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 21:57:15 ] いまさら-execはちょっと…という気分 気分だけね
723 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 22:08:08 ] >>722 お前、行末の「+」の意味知ってて発言してるのか?
724 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/21(月) 22:15:16 ] >>718 GNUコマンド群くらい最新にしとけよ。6.xなら使える。
725 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 02:59:08 ] >>724 バージョンアップできない(許可されない)環境って結構多いぞ。 (*nix系ならローカルに実行環境つくれば済む話だが)
726 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 07:04:01 ] >>725 もしそういう環境なら、GNU lsを入れること自体許可されないだろ。 (古いバージョンとは言え)GNU lsが入っているということは、 OS標準じゃないコマンドを自分でインストールしてもいい環境と考えられる。
727 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 10:39:16 ] システム構築時にGNU系を入れて構築、運用開始した後、 バージョンアップの費用(現システムの稼働確認費用)が認められないため、そのままってパターンが多い。 そういうトコだと、ローカルに新版lsをコピーしてくる方が(手続き的に)楽だったり。
728 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 12:30:34 ] >>710 タイムスタンプが、 2008-04-22 12:30 こういう形式で、 $6, $7にあると仮定すれば、 ls -l | sort -k 6,7 | sort -sr でいい。-sはstable sort。
729 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 13:27:05 ] >>728 それだと symbolic link が先頭に来てしまうので失格。
730 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 13:30:00 ] >>728 というか、せっかく sort -k 6,7 したあとで sort -sr したら 最初の sort -k 6,7 が無意味になってしまうし、全然ダメじゃん。
731 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 19:43:49 ] つ sort -srk 1,1
732 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/22(火) 19:58:42 ] >>731 >>729 失格。
733 名前:名無しさん@お腹いっぱい。 [2008/04/23(水) 15:40:13 ] Apache の mod_ext_filter モジュールを利用したスクリプトを作成しています。 Apache --標準出力--> script --標準出力 --> Apache を行うスクリプトにて、 Apache からの標準出力を $temp_file に書き出して主な処理をした後に cat $temp_file を行い Apache に返しているのですが、 #!/bin/sh temp_file=`mktemp` while read line do echo "$line" >> $temp_file done ファイル操作 cat $temp_file rm -f $temp_file 上記コードだと、HTML ソースに \ $ ` などが入っていた際に、 echo "$line" >> $temp_file で意図せぬ動作が起きてしまいます。 またファイルに書き出す事で処理速度の低下も考えられるので、 Apache からの標準出力(複数行)を変数に格納する方法はないかと思ったのですが、 どなたかご教授ください。
734 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/23(水) 20:08:40 ] >>733 それはシェルのreadの仕様だから仕方ない。 そもそも while readで読む必要ないだろ。 while do ... done の部分全部を、 cat > $temp_file に置き換えればよろし。
735 名前:733 mailto:sage [2008/04/23(水) 20:31:31 ] >>374 おぉ、色々と勘違いしていたみたいですね。 ご指摘の方法でやってみたところちゃんとできました。 すみません、ほんと有難うございます。
736 名前:733 mailto:sage [2008/04/24(木) 00:18:33 ] 733です。 度々すみません。 #!/bin/sh temp_file=`mktemp` cat > $temp_file ファイル操作 cat $temp_file rm -f $temp_file 確かにご教授いただいた上記コードで可能なのですが、 Apache からの標準出力をファイルに書き出さず、変数として処理する事は出来ないのでしょうか?
737 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/24(木) 00:55:16 ] そんなに速度が気になるなら他の言語でやったほうがいい
738 名前:733 mailto:sage [2008/04/24(木) 01:45:55 ] >>737 ありがとうございます。 色々試行錯誤してみます。
739 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/24(木) 06:52:22 ] >>736 その「ファイル操作」の内容が、 sed 's/hoge/boke/' < $temp_file だとすると、そもそもcatは2つとも要らない。 #!/bin/sh sed 's/hoge/boke/' ↑の2行だけでOK。 sedは、何も指定しないと標準入力から読んで標準出力に出すから。
740 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/24(木) 06:56:05 ] >>736 一旦変数に入れたいなら、 tmp=`cat` とする。これで変数tmpに入る。 参照する時は、 echo "$tmp" とする。シェルに特殊文字を解釈されないように" "を付けるのを忘れないように。
741 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/24(木) 19:36:45 ] >>739 返信ありがとうございます。 標準入力の内容によって条件わけがしたかったので、ご指摘の方法は断念しました。 >>740 返信ありがとうございます。おかげさまで出来ました。 一つ疑問が残るのですが、ダブルクォート (") は $ ` \ 以外を普通の文字として扱うと認識していますが。 # echo "`date`" Thu Apr 24 17:55:30 JST 2008 # cat sample.html <html> <body> `date` </body> </html> # cat filter.sh #!/bin/sh temp=`cat` echo "$temp" # cat sample.html | sh filter.sh <html> <body> `date` </body> </html> なぜ echo "$temp" では ` が普通の文字として扱われているのでしょうか? お恥ずかしい質問で済みません。
742 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/24(木) 19:38:59 ] 変数、サブシェルなどの展開は一度だけ。 再度展開したい時はeval。
743 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/24(木) 20:15:21 ] >>742 eval をさっそく調べ、勉強になりました。 ありがとうございます。
744 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 00:26:56 ] 質問させてください。 シェルスクリプトで16進数を2進数に変換するにはどうしたらいいでしょうか?
745 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 00:49:57 ] どうしてもシェルスクリプトというならこんな感じか。 最適なのはbc。sedだけでもできる。 h2b() { for h in `echo $1 | sed 's/\(.\)/ \1/g'`; do case $h in 0) echo -n 0000;; 1) echo -n 0001;; 2) echo -n 0010;; 3) echo -n 0011;; 4) echo -n 0100;; 5) echo -n 0101;; 6) echo -n 0110;; 7) echo -n 0111;; 8) echo -n 1000;; 9) echo -n 1001;; a|A) echo -n 1010;; b|B) echo -n 1011;; c|C) echo -n 1100;; d|D) echo -n 1101;; e|E) echo -n 1110;; f|F) echo -n 1111;; esac done echo }
746 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 00:54:10 ] >>755 あ、どうしてもってわけじゃないです。 コマンドとかありますか?何度もすいません。
747 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 01:17:50 ] bcで16進数を2進数に変換。 できそうでよくわからない・・・orz
748 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 01:18:21 ] bcならこんな感じかな、便利だね知らなかったよ。 echo "obase=2; ibase=16; $1" | bc
749 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 01:32:27 ] >>748 ありがとう。しかしながら 例えば 0xffffff00 これを10進数に変換したいと思い echo "obase=10; ibase=16; 0xffffff00" | bc とやってみましたがsyntax errorがでました・・・orz
750 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 01:40:21 ] 頭に0xは付けずに,それから大文字で書かないといけないっぽい.
751 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 02:03:41 ] >>750 なるほど。ありがとうございました。
752 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 06:48:02 ] >>749 bcなんか使わなくても printfで一発だろww $ printf '%d\n' 0xffffff00 4294967040
753 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 08:48:45 ] んっと、釣られとくけど、 志村ー
754 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 13:18:18 ] >>753 なにが釣りなのかわからないゆとりな俺にkwskたのむ シェルスクリプトのtmtowtdiな感じって好きだ
755 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 13:28:34 ] printf(3)は二進がないからなあ。 printf(1)の%bは違う意味だし。
756 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 13:35:12 ] >>775 欲嫁。 >>749 は 16進→10進の質問。 >>752 はそれに最適解を答えている。
757 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 22:01:10 ] 昨日質問した者です。ちょっと間違ってました。ごめんなさい。 正しくは ffffff00 これを 255.255.255.0 に変換したい。です。 これってできるのでしょうか?
758 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 22:09:13 ] 簡単だね >>757 $ hex=ffffff00 $ printf '%d.%d.%d.%d\n' `echo $hex | sed 's/../0x& /g'` 255.255.255.0
759 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 22:57:09 ] >>758 すごいなぁ。ありがとう。
760 名前:名無しさん@お腹いっぱい。 [2008/04/26(土) 12:50:24 ] >>758 これは(・∀・)イイ!! もれももらた
761 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/26(土) 16:59:52 ] よく読まずに余計な突っ込みした >>753 は今ごろ赤面ww
762 名前:名無しさん@お腹いっぱい。 [2008/04/28(月) 17:23:56 ] >>761 kannke-nexekedo お前のレスうざい
763 名前:名無しさん@お腹いっぱい。 [2008/04/29(火) 09:04:12 ] シェルで、拡張子の付いていないファイルを一発でワイルドカード指定するには どうすればいいですか? あるいは、何かのオプション変更とかで、 * で、hogeとかだけにマッチして、 hoge.hog にはマッチしないようにして、 *.* とやった時だけ hoge.hogにマッチするようにしたいんです。
764 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 09:43:06 ] 一部シェル限定ならできる 一発でなくていいならできるようにはできる
765 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 11:18:22 ] >>764 kwsk
766 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 12:33:12 ] >>764 は、具体的な「やりかた」を書かない(書けない)知ったかの >>680 と同一人物、に1俵。
767 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 12:39:25 ] >>765 シェルは何だ? ワイルドカード使うシチュエーションは?カレントディレクトリだけなのか? ファイルの表示ができればいいだけなのか?各ファイルに何かするのか? >>766 あいにく違うな 1俵よこせ
768 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 12:43:35 ] >>767 じゃなくて、逆にその「できるシェル」を教えて欲しい。 シチュエーション関係なしに、すべての場合において * が hoge.hogにはマッチしないようにしたい。
769 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 12:46:16 ] EXTENDED_GLOBつきのzshで*~*.*かな。
770 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 12:55:22 ] * 1個の動作を変えられるようなシェルはないかと思う 同じくzshで setopt EXTENDED_GLOB ls -d [^.]#
771 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 12:57:46 ] command.com
772 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 13:01:56 ] 少なくとも >>766 だけうざいな
773 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 13:50:40 ] シェルを秘密にしたいのだからエスパースレに行くべきだな。 全ての場合を見通して答えてくれるエスパー様(>>766 )に任せよう。
774 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 13:58:03 ] できるシェルを教えてくれっていう質問だから、 シェルを秘密にしてるのとは違うかと
775 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 20:45:09 ] よく読まずに余計な突っ込みした >>773 は今ごろ赤面ww
776 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 21:08:40 ] >>775 お前のレスうざい
777 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 21:32:45 ] OSを秘密にしているのだから、エスパー様の出番だな。 余計な突っ込みした、知恵足らずの>>775 は今ごろ赤面ww
778 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 21:41:31 ] シェルはOSには依存しないな。 余計な突っ込みした、知恵足らずの>>777 は今ごろ赤面ww
779 名前:名無しさん@お腹いっぱい。 [2008/04/29(火) 21:43:02 ] > シェルはOSには依存しないな。 > シェルはOSには依存しないな。 > シェルはOSには依存しないな。 > シェルはOSには依存しないな。 > シェルはOSには依存しないな。 > シェルはOSには依存しないな。
780 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 21:54:17 ] まあよくある願望とごっちゃにしたな
781 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 22:04:17 ] たとえば最近の例を引き合いに出すが、 >>757 の質問(OS不明)に >>758 が的確に回答してる。 どこにもOSに依存してるところはないな。 >>757 に対して「OSが秘密じゃ答えられない」なんていってる奴は 無知をさらけ出してる奴。OSがわかったところで答えられないだろう。
782 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 22:06:52 ] 全然関係ない事例を持ち出して > シェルはOSには依存しないな。 > シェルはOSには依存しないな。 > シェルはOSには依存しないな。 > シェルはOSには依存しないな。 > シェルはOSには依存しないな。 > シェルはOSには依存しないな。 を誤魔化そうとする>>778 憐れ。
783 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 22:08:34 ] 本件事例の >>769 の回答は、OSには依存しないな。
784 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 22:17:34 ] 糞みたいな雑談でスレを延ばすなよ コードで語れ
785 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 22:22:29 ] G Em7 Am7 Am7/D D7 G
786 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 22:23:36 ] >>769 は誤回答。お題は「* で、hogeとかだけにマッチして、hoge.hog にはマッチしない」
787 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 22:25:33 ] OSに依存しない誤回答ですね。
788 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/29(火) 22:45:17 ] 誤解答を例示して > シェルはOSには依存しないな。 を誤魔化そうと必死の>>778 憐れ。
789 名前:名無しさん@お腹いっぱい。 [2008/05/02(金) 11:38:05 ] $ls test1.jpg test10.jpg test2.jpg test3.jpg test4.jpg test5.jpg test6.jpg test7.jpg test8.jpg test9.jpg と1桁の数字からなる連番ファイルがあるときに $ls test0001.jpg test0002.jpg test0003.jpg test0004.jpg test0005.jpg test0006.jpg test0007.jpg test0008.jpg test0009.jpg test0010.jpg というように4桁の連番ファイルにリネームしたいのですが、 ご教授お願いします。
790 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 11:40:37 ] >>789 mv sed printf for これだけ調べればできる
791 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 11:41:07 ] 書き忘れた、 test10.jpg これ 1桁の数字じゃないよな
792 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 11:43:03 ] >>789 環境依存かつ汎用性ナシだけど、 おれならこうやっちゃう。 $ for i in {1..9}; do mv test$i.jpg test000$i.jpg; done $ mv test10.jpg test0010.jpg
793 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 11:49:01 ] >>789 #!/bin/sh for file in *.jpg do num=`expr $file : '[^0-9]*\([0-9]*\)'` base=`expr $file : '\([^0-9]*\)'` num=`printf %04d $num` echo mv $file $base$num.jpg done
794 名前:789 mailto:sage [2008/05/02(金) 11:52:46 ] >>791 最初1桁の例だけ書いてたんで、 2桁も混じっているということを書き忘れました。 >>792 $ for i in {1..9}; do mv test$i.jpg test000$i.jpg; done $ for i in {10..99}; do mv test$i.jpg test00$i.jpg; done ってかんじですかね。ありがとうございます。
795 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 11:52:51 ] >>790 具体例を示さない奴は黙ってろ。あと、sedよりexprの方がいいな。
796 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 11:53:29 ] >>794 >>793
797 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 11:55:18 ] 3桁のときは、0を一つ、2桁の時は、0を2つ 一桁のときは、0を3つってつけてけばいいねん sedだけでできる
798 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 11:56:45 ] >>797 そんなことをしなくても >>793 で一発。
799 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 11:57:56 ] でしたね^^ 解決したようで
800 名前:793 mailto:sage [2008/05/02(金) 12:09:21 ] sedだけでやるならこうかな ↓ #!/bin/sh for file in *.jpg do new=`echo $file | sed 's/[0-9]/0000&/; s/[0-9]*\([0-9][0-9][0-9][0-9]\)/\1/'` mv $file $new done
801 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 12:11:08 ] ごちゃごちゃしてるなぁ
802 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 12:13:48 ] そう思うならprintfの方がすっきりする
803 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 12:16:28 ] カレントディレクトリ配下で自分が所有者のファイルを探してすべて消したいのですが、 どのように書けばいいですか?
804 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 12:17:35 ] find . -user `whoami` -exec rm -f {} \;
805 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 12:18:06 ] ありがとうございます 試してみます
806 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/02(金) 20:11:05 ] >>795 > >>790 > 具体例を示さない奴は黙ってろ。あと、sedよりexprの方がいいな。 お前が真っ先に黙れ。
807 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/05(月) 12:08:46 ] 若干スレ違いですが、 シェルスクリプラーなみなさんが詳しそうなので質問させてください。 unix,linuxで、 カーネルの脆弱性なんかでrootに権限昇格の可能性があるのって 特定コマンドを利用不可にしていたら難しい、 なんてことあるでしょうか? また、特定コマンドを利用した回数、利用したユーザ、 とか調べる方法ってないでしょうか?
808 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/05(月) 13:02:50 ] つ BSD acct & lastcomm
809 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/05(月) 13:55:52 ] >>807-809 具体例を出さない書き込みは禁止。
810 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/05(月) 15:43:33 ] 若干どころじゃなくスレ違い。
811 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/05(月) 15:47:30 ] 「シェルスクリプロ」って何ですか?
812 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/05(月) 15:57:16 ] シェルスクリプる
813 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 08:56:10 ] a 5 9 2 b 7 3 6 c 5 3 2 d 8 3 7 e 4 4 4 のようなテキストファイルから a 5 9 2 16 b 7 3 6 16 c 5 3 2 10 d 8 3 7 18 e 4 4 4 12 のように行の値の合計を右端に出力したいのですがどうしたらできますか? awk '{print $1,$2,$3,$4,$1+$2+$3}' のようにではなく、列の値の数が3でなくても対応できるようにしたいです。
814 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 09:01:46 ] >>813 簡単だね。 #!/bin/sh while read line do set $line shift sum=0 for i in "$@" do sum=`expr $sum + $i` done echo "$line $sum" done < file
815 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 09:20:27 ] 適当にがんばってみたらできたました。 ありがとうございました。 awk '{sum=0;for(i=1;i<=NF;i++)sum+=$i; print $"$i",sum}' test.txt
816 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 09:38:50 ] >>815 ちゃんと「シェルで」答えてくれた >>814 に礼もなしで 自己解決かよ。 しかも、awkでやるならスレ違い。awkスクリプトはシェルスクリプトにあらず。
817 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 09:41:33 ] おいおい、 >>815 の awkだと間違ってるぞ。 1列目の文字がたまたま数値的に 0 と評価されたら 結果的に正しく動いてるように見えるけど、 1列目に数値と解釈される文字があったらアウト。 このスレ的には >>814 が正解。
818 名前:名無しさん@お腹いっぱい。 [2008/05/06(火) 20:45:33 ] unix初心者ですが、シェルについて教えてください。 if文で、if〜then〜else〜endif を使用しています。 if文の判定は、ファイル有無の判定です。 判定対象のファイルを正規表現で記述すると、elseまで辿り着きますが、 メタキャラ"?"で判定すると、elseまで辿り着かず、 「照合パターンに合いません」 と出力され終了してしまいます。 シェルの構文は下記の通りです。 #!/bin/csh if ( -f /tmp/a?a.log ) then echo "ファイルが見付かりました" else echo "ファイルが見付かりませんでした" endif メタキャラを使用して、ファイル判定をする方法を教えて頂けませんでしょうか。 宜しくお願い致します。
819 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 20:50:12 ] >>818 cshでスクリプトを作ってはいけません。 どうしてもcshが良いなら独学でどうぞ。
820 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 21:05:42 ] >>818 #!/bin/sh if [ -f /tmp/a?a.log ]; then echo 'ファイルが見付かりました' else echo 'ファイルが見付かりませんでした' fi
821 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 21:15:22 ] #!/bin/sh [ -f /tmp/a?a.log ] && { echo 'ファイルが見付かりました' } || { echo 'ファイルが見付かりませんでした' }
822 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 21:19:42 ] #!/bin/sh s=; [ -f /tmp/a?a.log ] || s='せんで'; echo 'ファイルが見付かりま'"$s"'した'
823 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 21:27:57 ] s=;(</tmp/a?a.log)2>/dev/null||s='せんで';echo 'ファイルが見付かりま'"$s"'した'
824 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 22:16:35 ] ゴルファーがいるw
825 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 22:21:36 ] すんません、検索したけど見つからなかったので教えてください。 bash + awk, bc, perl あたりで、小数部が3桁の計算をして、 その結果を変数に格納してます。その後、その変数の値を 絶対値にして返してくれるコマンドはありませんか? 上記のbash, awk, bc, perl あたりでできれば一番良いのですが。 よろしくお願いしまつ。
826 名前:名無しさん@お腹いっぱい。 [2008/05/06(火) 22:44:52 ] > 820、821 ありがとうございました。 Bシェルで作成します。 … 作成したのですが、複数ファイルがマッチした場合、 ファイル名: binary operator expected が表示され、マッチしたにも関わらず、elseが適用されます…。 ご存知でしたら、複数マッチしても、真となるような方法を教えて頂けませんでしょうか。
827 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 22:58:20 ] >>825 マイナス符号を取ったらいいだけだろ $ var1=-123.456 $ expr $var : '-*\(.*\)' 123.456 $ var2=123.456 $ expr $var : '-*\(.*\)' 123.456
828 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 23:01:42 ] >>826 #!/bin/sh if ls /tmp/a?a.log 2>/dev/null; then echo 'ファイルが見付かりました' else echo 'ファイルが見付かりませんでした' fi
829 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 23:14:46 ] >>825 $ var=-123.456 $ echo ${var#-} 123.456 $ var=123.456 $ echo ${var#-} 123.456
830 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 23:22:26 ] bash依存乙。
831 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 23:29:02 ] だからksh由来だと何度(ry まあテンプレにもあるようにsh以外ならそう明記すべきだな。
832 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 11:40:42 ] カレントディレクトリ配下のファイルにsedをかけたいのですが、 どのようにしたらできますか?
833 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 11:50:19 ] >>832 要エスパー質問だなw for file in * do sed 's/hoge/hage' "$file" > "$file".new done てことをやりたいのか?
834 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 11:54:09 ] >>832 OSやシェルの種類/バージョンは秘密ですか? それを秘密にしたままでは誰も答えられないでしょう。 このレス以外、レスは0件でしょう。
835 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 11:58:42 ] OSはわかりません。(アウトソーシングでunameが使えないため) ShellはBashです。 $ bash --version GNU bash, version 3.1.17(1)-release >>833 それだと、カレントディレクトリのファイルしか置き換えできません。 カレントディレクトリ配下をすべて置き換えたいです。 また、置き換えしたいので、.newファイルを作成したいのではないです。 (名前を変更すればいいだけですが。)
836 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 12:02:49 ] >>835 find . -type f -exec sed -i 's/hoge/hage' {} \;
837 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 12:06:32 ] >>834 OS関係ないだろw すでに適切な回答がなされた後で再読み込みもせずに余計なことを書いた >>834 は今ごろ赤面。
838 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 12:09:01 ] >>835 「カレントディレクトリ配下」という言葉の使い方を間違ってます。
839 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 14:40:31 ] >>832 , >>834-835 , >>837-839 具体例を出さない書き込みは禁止。
840 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:20:43 ] >>838 配下っていう意味的にはあってるでしょ
841 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:21:36 ] >>840 合ってない。直下のディレクトリのみ指す用語。
842 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:24:34 ] >>841 配下って言うのは、傘下って意味。 参加は直下以外も指す。 ダイハツの下もTOYOTAの傘下でしょ。
843 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:39:44 ] >>842 勝手に言葉を定義されても、困るのですが。
844 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:46:27 ] その人の支配に属していること。また、その者。手下。部下。 - 三省堂提供「大辞林 第二版」より 類語: ⇒ 関連語 てした【手下】 ⇒ 関連語 さんか【傘下】 ⇒ 関連語 したやく【下役】 - YAHOO辞書より
845 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:47:48 ] 一言「サブディレクトリ以下も含む」と付け加えれば意味が通じたのに、 >>832 は「サブディレクトリ」という用語を知らないに1票。
846 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:52:45 ] 例えば、 /aaa/bbb というディレクトリがあって、 touch /aaa/bbb/ccc.txt ってやりたい時、 bbbディレクトリに書き込みパーミッションがあれば、 aaaディレクトリは書き込み禁止であっても書き込める。 よって、bbbはaaaに支配されているわけではない。 aaa自体の書き込みパーミッションは、 aaa直下に作成するファイルにしか効かない。 つまり、bbbはaaaの支配には属していない。
847 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 19:10:11 ] 基本的には親ディレクトリを削除したら下は全部削除されるんだから支配されてるでしょ。 孫請け会社が親とは直接的なやり取りがないのとおなじ
848 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 19:19:12 ] リンク
849 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 19:19:17 ] >>846 >>847 だから、勝手に言葉を定義されても困るのですが。 >>845 「再帰的(reccursive)に」というキーワードがありますね。 よくあるオプションは-rですか。
850 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 19:21:22 ] -Rだな
851 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 19:33:05 ] >>849 言葉を定義してるはあなたも同じでしょ。 YAHOO辞書に従うと、類義で傘下があるから傘下としてはただしいんだし。
852 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 19:42:10 ] >>851 いや、してませんけど。 言葉は流動的なもので、大辞林や広辞苑にこう書かれている、としても、 それがすべての場合に同様に正確にあてはまるわけではないのは、日常の 言葉のやりとりで体得していないのですか? プログラム言語じゃあるまいし。
853 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 20:20:38 ] >>847 逆。下のディレクトリがあると親ディレクトリは削除できない。 そういう意味では子に親が支配されてる。 あと、NFSとかnullfsでループバックマウントする場合、 子のディレクトリを別の場所にマウントすると まさに親ディレクトリに関係なく子のディレクトリにアクセスできる。 ディレクトリ間は単にリンクしあっているだけであって、支配関係はない。
854 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 22:40:38 ] >>852 指標にはなるでしょ。 根拠をしめしてるだけ、ちゃんと示してる。 >>853 削除できないようにしてるだけ。
855 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 22:59:03 ] いったいなんのスレだここはw
856 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/08(木) 05:17:48 ] こういう宗教戦争があるのがUNIX板のいいところ
857 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/08(木) 08:25:57 ] どうでもいいが、>>836 で正解もらってるのに、 >>835 = >>832 から礼の一言もなしに書き逃げしてるなw