1 名前:login:Penguin [2007/07/10(火) 23:17:13 ID:qGthZdME] UNIX板のスレを見ている方も多数おられるかと思いますが、 まあそれはそれとして、BASHウゼーとか言われる心配なく 平和にLINUX的スクリプト談義しましょうよ。 初めての自作スクリプト、自信ないから見てください。な初心者から トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで いろいろな人に参加して頂けると嬉しいです。 perlやらPythonやらの話が混ざっても良いんでない? 【sed】シェルスクリプト総合@LINUX Part2【awk】 pc11.2ch.net/test/read.cgi/linux/1154578200/ pc8.2ch.net/test/read.cgi/linux/1121994321/ >>2-5 あたりに色々と。
844 名前:login:Penguin mailto:sage [2008/03/25(火) 02:03:33 ID:+i6zdHek] 訂正orz ls -1 ero_dir | ruby -nle 'print "mv " + $_ + " " + $_.sub("お宝画像\(", "ero-pic").delete("\)")' | sh
845 名前:login:Penguin mailto:sage [2008/03/25(火) 02:05:27 ID:6V9ksjI9] >>841 > prenameは Debian のパッケージメンテナが独自にパッケージ生成時に追加したスクリプト ↓だってさ。 # This script was developed by Robin Barker (Robin.Barker@npl.co.uk), # from Larry Wall's original script eg/rename from the perl source.
846 名前:login:Penguin mailto:sage [2008/03/25(火) 03:45:05 ID:mfggD9uB] ラクダ本のだってのはだいぶ上の方で言及されとるがな。
847 名前:login:Penguin mailto:sage [2008/03/25(火) 06:52:15 ID:Mm1m5DLO] >>845 prenameは Debian のパッケージメンテナが独自に 「the perl source(perlのオルジナルセット、いわゆるラクダ本)」から パッケージ生成時に追加したスクリプト、つーことですね。 /usr/bin/renameがC版の代わりにこれで置き換えて拡張してあるのが debianの方言ということで。 実はラクダ本のやつは見たことがあるな。
848 名前:login:Penguin mailto:sage [2008/03/25(火) 17:01:59 ID:7L4Qk+Sn] ・>>840 にある元のシェルスクリプトはsed版正規表現を理解する ・Here a C versionは正規表現を全く理解しない ・perl版はperl版正規表現を理解する というわけでLinuxでも三種類あるんですね。
849 名前:login:Penguin mailto:sage [2008/03/25(火) 17:59:25 ID:Mm1m5DLO] こういう微妙な違いってひょっとするとトリごとに結構あるのかもしれないね。 スレからはずれるけど、apache/httpdのコンフィグがバージョン系列は 一緒なのにDebian系(ubuntuも)とRH系(RedHat/Fedora/CentOS)で まるっきり違ってて面くらったことがある。
850 名前:login:Penguin mailto:sage [2008/03/25(火) 18:02:21 ID:IQ4Jbr/0] コマンドなんかもちょっと違うくらいだから、設定ファイルの書き方なんて違っていて当たり前。
851 名前:login:Penguin mailto:sage [2008/03/26(水) 21:17:50 ID:B6BxqxUi] ツリー表示について find / -type d|sort|sed -ne'1b;s/[^\/]*\//┗━━/g;s/┗━━┗━━/┃ ┗━━/g; s/┗━━┗━━/┃ ┗━━/g; s/┗━━┃/┃ ┃/g;p' これだと下記のような表示になるのですが ┗━━proc ┃ ┗━━1 ┃ ┃ ┗━━attr ┃ ┃ ┗━━fd ┃ ┃ ┗━━task ┃ ┃ ┃ ┗━━1 ┃ ┃ ┃ ┃ ┗━━attr ┃ ┃ ┃ ┃ ┗━━fd ┃ ┗━━1106 ┃ ┃ ┗━━attr 不要な線を無くして見栄えを良くしたいのですが、何か良い方法はありませんでしょうか ┗━━proc ┃ ┗━━1 ┃ ┃ ┗━━attr ┃ ┃ ┗━━fd ┃ ┃ ┗━━task ┃ ┃ ┗━━1 ┃ ┃ ┗━━attr ┃ ┃ ┗━━fd ┃ ┗━━1106 ┃ ┃ ┗━━attr
852 名前:login:Penguin mailto:sage [2008/03/26(水) 21:52:30 ID:f9ufLLgD] よくわからんけど tree -dA じゃダメなの?
853 名前:851 mailto:sage [2008/03/26(水) 22:04:51 ID:B6BxqxUi] そういうコマンドがあるのは知ってるのですが # which tree /usr/bin/which: no tree 残念なことに入ってないんです。 いろいろ調べまわった結果がこれなんです。 もう少し自分でも調べてきます。
854 名前:login:Penguin mailto:sage [2008/03/26(水) 22:31:33 ID:f9ufLLgD] そうかtreeのないトリもあるのか。
855 名前:login:Penguin mailto:sage [2008/03/26(水) 23:21:22 ID:5Znd97qm] yumとかaptで入れられないっけ?
856 名前:login:Penguin mailto:sage [2008/03/27(木) 00:04:09 ID:ZXE2f6WU] >>853 PATH が通ってないだけとか。locate 辺りで調べてみたら? 他に何かあったっけ>探す方法
857 名前:851 mailto:sage [2008/03/27(木) 00:35:50 ID:yDbPGpUf] なんとか自己解決できました 下記のシェルスクリプトを「/usr/bin/tree」に置いて代用することにしました。 #!/usr/bin/perl use strict; my($top)=$ARGV[0]; if($top eq ""){ $top="."; } print "[$top]\n"; &tree("",<$top/*>); sub tree { my($bar,@dir)=@_; for my $i(0..$#dir){ my($bl1)=($i<$#dir)?"┣":"┗"; my($bl2)=($i<$#dir)?"┃":" "; my(@path)=split(/\//,$dir[$i]); if(-d $dir[$i]){ print "$bar $bl1 [$path[$#path]]\n"; tree("$bar $bl2",<$dir[$i]/*>); }else{ print "$bar $bl1 $path[$#path]\n"; } } } ちょっと中身を理解するのは難しいですけど、使いこなせたらperlも結構便利そうですね。
858 名前:login:Penguin mailto:sage [2008/03/27(木) 01:47:43 ID:nVTK+35Z] >>857 > 下記のシェルスクリプト ちょっとマテ
859 名前:login:Penguin mailto:sage [2008/03/27(木) 04:19:25 ID:LOwKjqa0] どう見てもシェルスクリプトでなくPerlスクリプトだなw ちなみに、鳥は何なの?
860 名前:851 mailto:sage [2008/03/27(木) 19:23:00 ID:yDbPGpUf] あ、確かにperlスクリプトですねw ちなみに鳥はCentOS4.6で、サーバー構築の勉強用で使ってます。 最小構成でインストールしたからtreeコマンドが入って無かったのかもしれないです。
861 名前:login:Penguin mailto:sage [2008/03/27(木) 19:43:49 ID:ysMS9Gn7] 美女の現われるスクリプトを教えて下さい。
862 名前:login:Penguin mailto:sage [2008/03/27(木) 19:56:21 ID:ORW3s1IJ] >>861 emerge beautiful_girl
863 名前:login:Penguin mailto:sage [2008/03/27(木) 23:51:02 ID:QsCLAAyg] >>851-857 pstreeだと思うんだ・・
864 名前:login:Penguin mailto:sage [2008/03/28(金) 00:18:06 ID:jk3nWqNP] >>863 find / だけど?
865 名前:login:Penguin mailto:sage [2008/03/28(金) 00:18:55 ID:deyesKz0] >>864 そだったw
866 名前:789 [2008/03/28(金) 01:42:56 ID:QgSpL7VJ] にやにや もりあがってんじゃねーかw
867 名前:login:Penguin mailto:sage [2008/03/28(金) 01:46:42 ID:deyesKz0] >>866 javascriptをjavaと呼ぶひと、こんばんはw
868 名前:login:Penguin mailto:sage [2008/03/28(金) 14:06:32 ID:Z7X2dF3N] cshで質問です。 下記のように変数をperlに渡したいんですが、変数を認識してくれません。 どうすれば良いですか? set hoge = funi perl -pe 'print $hoge' file
869 名前:login:Penguin mailto:sage [2008/03/28(金) 15:16:41 ID:KjmTtujq] >>868 シングルクォートをダブルクォートに変える
870 名前:login:Penguin mailto:sage [2008/03/28(金) 15:47:45 ID:Z7X2dF3N] >>869 ありがとうございます。 試してみましたが、ダメのようです。 setenvで与えると上手く行きましたが、setで出来る方法も知りたいです。
871 名前:login:Penguin mailto:sage [2008/03/28(金) 16:04:18 ID:UFHtgKJC] 無理。 あえてやるなら perl -e 'print "'"$hoge"'"' これはperlに print "funi" という式を渡したに等しい。
872 名前:login:Penguin mailto:sage [2008/03/28(金) 17:22:58 ID:Z7X2dF3N] >>871 ありがとうございます。 やってみたら出来ました。 意味は分かんないのでこれから調べてみようと思います。
873 名前:login:Penguin mailto:sage [2008/03/28(金) 17:26:00 ID:s6QtoqP9] csh じゃなきゃいかんの? sh 系で書いた方がいいんじゃない?
874 名前:login:Penguin mailto:sage [2008/03/29(土) 22:39:26 ID:Je2/7f5V] リダイレクト 「>&-」 (ディスクリプタ番号に 「-」 を指定した場合) の振舞いについて記述している manpage を探しています。 (manpage でなくともそれに準ずる文書であれば構いません) JM Project の bash(1) などや google で検索してみたのですが見つかりません。 >&- を使用しているシェルスクリプトは見つかりましたが、そこには正式な説明はありませんでした。 google って記号検索がとても弱いようなので シェルスクリプトとか GAME言語みたいな記号で頑張るタイプのを探すのは大変。 何か効果的な検索技があるんですかね。
875 名前:login:Penguin [2008/03/29(土) 22:48:22 ID:6BdICwv7] シェルスクリプトで連番を振る際に 1から100を1、2、3…ではなく 001、002、003…と出力させたい場合どうしたらよいでしょう? val=1 while $val lt 100 do echo $val val=expr`$val+1` done
876 名前:login:Penguin mailto:sage [2008/03/29(土) 22:53:17 ID:z7EKOxA5] >>875 for i in {0..9}; do printf "%03d\n" ${i}; done
877 名前:login:Penguin mailto:sage [2008/03/29(土) 22:57:09 ID:ZodWq0Ht] printfが嫌なら echo "000$i" | sed 's/0*¥(...¥)$/¥1/'
878 名前:874 mailto:sage [2008/03/29(土) 23:01:58 ID:Je2/7f5V] すみません。事故解決しました。 JM Project の bash(1) に記述されてました。
879 名前:875 [2008/03/29(土) 23:02:33 ID:6BdICwv7] >>876-877 凄まじくソッコーのレス ありがとうございます。 形式を指定してるってことくらいは分かりました。 調べてきます! ありがとございました。
880 名前:login:Penguin mailto:sage [2008/03/29(土) 23:06:18 ID:z7EKOxA5] >>875 単純に、必要な個数の名前のリストがありゃいいだけなら、 これでもいいと思う。 seq -f "moe_ero_guro_%03g.png" 0 9
881 名前:login:Penguin mailto:sage [2008/03/29(土) 23:16:52 ID:U1N+QPd9] >>876 {0..9} は bash3 じゃないと動かないはず。 まだ bash 2.05b の環境ってけっこうあるよね?
882 名前:login:Penguin mailto:sage [2008/03/29(土) 23:19:47 ID:ZodWq0Ht] seqは、あーここLinux板だからまず間違いなく入ってるな。
883 名前:login:Penguin mailto:sage [2008/03/29(土) 23:23:13 ID:ZodWq0Ht] seqだととびとびの値とかも作れるんだが、 単に連番がつくりたいとき個人的によくやるのは yes '' | cat -n | sed 100q とか。
884 名前:login:Penguin mailto:sage [2008/03/29(土) 23:30:36 ID:WiwCN3W0] seqって便利だね。知らんかった。 seq -f %03g 1 100
885 名前:login:Penguin mailto:sage [2008/03/29(土) 23:33:55 ID:z7EKOxA5] >>881 聞かれたから一応、答えておこう。そんな環境は知らん。 bash 2.05bなのはRHEL3かVineか、2005年ぐらいで閉鎖空間へ移行したやつだけだろ。
886 名前:login:Penguin mailto:sage [2008/03/29(土) 23:36:52 ID:WiwCN3W0] そうなのか。ある意味Vine恐るべしだな。
887 名前:874 mailto:sage [2008/03/29(土) 23:41:18 ID:Je2/7f5V] 組込系だったりすると bash どころか busybox ん中の sh (ash) だったりもする。 La Fonera の seq は -f オプションなんか無いので printf "%03d\n" `seq 1 10`
888 名前:login:Penguin mailto:sage [2008/03/30(日) 00:08:49 ID:36hI9fyL] この仕様は初めて知ったw $ printf "%03d%03d\n" 1 2 3 4 5 001002 003004 005000
889 名前:login:Penguin mailto:sage [2008/03/30(日) 00:34:47 ID:91o/3wOF] おまいらのseq には -w ってオプション無いの? seq -w 1 100
890 名前:874 mailto:sage [2008/03/30(日) 00:48:35 ID:VLE1BQAD] BusyBox v1.1.3 (2006.11.21-19:49+0000) multi-call binary Usage: seq [first [increment]] last Print numbers from FIRST to LAST, in steps of INCREMENT. -w ? そんなオプション見たこと無い。(笑)
891 名前:login:Penguin mailto:sage [2008/03/30(日) 15:18:36 ID:AAKkqqTb] 拡張子の変換ってどうやってる?俺は for f in *.hoge; do mv $f ${f%.hoge}.fuga done っていちいち打ち込んでるんだけど、なんかいい方法ない?
892 名前:login:Penguin mailto:sage [2008/03/30(日) 16:16:42 ID:SBrBro/C] >>891 過去ログ読め。
893 名前:login:Penguin mailto:sage [2008/04/01(火) 00:07:30 ID:mTzNKv6N] ニコ動の動画IDをwgetで落とせる直リンに変換するスクリプトないっすか?
894 名前:login:Penguin mailto:sage [2008/04/01(火) 00:12:45 ID:+SHNTduy] >>893 仕様出てるだろ。
895 名前:login:Penguin mailto:sage [2008/04/01(火) 00:12:57 ID:bWFHq2/G] >>893 nicovideo-dl
896 名前:login:Penguin mailto:sage [2008/04/01(火) 22:06:47 ID:Mk5CpRwr] $ oppai bash: oppai: command not found
897 名前:login:Penguin [2008/04/04(金) 13:09:23 ID:Lie/X+/S] 質問させて下さい。 ubuntu7.1 server を使用しています。 シェルスクリプトを勉強し始めてLinuxの設定セットアップシェルを作ろうとしています。 ■入力受付状態を省略し、自動入力にするにはどのようにすればいいのでしょうか? 例えばsambaのコマンドですが smbpasswd -a root をするとパスワードの入力を求められます。 普段なら手動でxxxxと入力するのですが、この作業を自動化したいのです。 色々調べてsedの使い方等はわかりファイルの書き換えによる設定はおおむね出来たのですが 上記のやり方は見つけることができませんでした。 どうかアドバイス頂けないでしょうか? 宜しくお願い致します。
898 名前:login:Penguin mailto:sage [2008/04/04(金) 21:25:51 ID:WDSwmhLm] >>897 Windowsから接続しているなら、TeraTermのマクロで何とかできるかもね。 ただユーザー名やパスワードが見えてしまう状態でファイルに保存するから セキュリティ上には良くないかも sambaの設定ファイルだけバックアップ取って ユーザーとパスワードはその都度入力するのが無難かと
899 名前:login:Penguin mailto:sage [2008/04/05(土) 11:09:58 ID:co3/wC9l] >>897 expectスクリプト expectに突いてくるサンプルを読んで
900 名前:login:Penguin mailto:sage [2008/04/05(土) 11:16:23 ID:co3/wC9l] すまん、サンプルついてないわ。 apt-get source expect して、サンプル見て。
901 名前:login:Penguin mailto:sage [2008/04/06(日) 14:52:52 ID:20te6qz4] シェルスクリプトできるけどPerlスクリプト出来ないやつなんなの?
902 名前:login:Penguin mailto:sage [2008/04/06(日) 15:42:41 ID:6d0Si0sC] 単にawkとかpythonが好きなんじゃないの?
903 名前:login:Penguin mailto:sage [2008/04/06(日) 17:08:40 ID:Y81bdbYI] >>901 シェル・スクリプトは基本だが、perl は awk やら python やらのワン・オブ・ゼムに過ぎないので、それが普通。 MS-Windows95の頃、cgiはperlスクリプトでという謎の風潮があった名残で、あなたのような疑問が出て来るのだろう。
904 名前:login:Penguin [2008/04/07(月) 02:13:58 ID:WGY+O99D] >>903 そうそう。 別に、cgiがシェルスクリプトでも問題ないし(使いにくいけど)、なんでもいい。 perlだろうが難だろうが、所詮手段なんだから、どうでもいいじゃんw
905 名前:login:Penguin mailto:sage [2008/04/07(月) 08:01:37 ID:DKzh8iuy] >>901 多分、 同じ構造化手続き型言語なのに何で方言によって使える使えないみたいなこと言ってんの? ということかと。
906 名前:login:Penguin mailto:sage [2008/04/07(月) 20:27:53 ID:ky4RCRjO] >>905 そうなら「シェル」スクリプトスレで何言ってんだこのバカは? ってな話しにしかならんからそれはなかろ。
907 名前:login:Penguin mailto:sage [2008/04/08(火) 00:22:25 ID:xWC78uSv] つまり、シェルスクリプターはアホです。
908 名前:login:Penguin mailto:sage [2008/04/08(火) 21:18:54 ID:mlftshp4] Aho氏 ttp://en.wikipedia.org/wiki/Alfred_V._Aho
909 名前:login:Penguin mailto:sage [2008/04/08(火) 21:20:29 ID:L1HkWImv] ahoさんはawkの偉い人でしょ
910 名前:login:Penguin mailto:sage [2008/04/09(水) 01:18:06 ID:8anDW64k] フィンランドではよくある名字。
911 名前:login:Penguin mailto:sage [2008/04/09(水) 01:40:20 ID:vyKS0pT6] えっほ
912 名前:login:Penguin mailto:sage [2008/04/09(水) 02:03:59 ID:JRgbXb6K] スキーでアホネンさんっていたな この人もフィンランドだったな
913 名前:login:Penguin mailto:sage [2008/04/09(水) 13:12:39 ID:vyKS0pT6] だれがあほやねん!
914 名前:login:Penguin mailto:sage [2008/04/09(水) 18:16:40 ID:pjxRKuKN] >>911 ,913 しょーもないレスして悲しくなってこないか?
915 名前:login:Penguin mailto:sage [2008/04/09(水) 19:47:59 ID:D07VbGXN] $ shoumo bash: shoumo: command not found
916 名前:login:Penguin mailto:sage [2008/04/09(水) 21:12:29 ID:HudBzGNB] $ which show /usr/local/mh/bin/show なんていう時代もありました。
917 名前:login:Penguin mailto:sage [2008/04/11(金) 16:25:19 ID:3vnovWPW] 000から999までリストを作りたいんですが、どうすればいいでしょう?
918 名前:login:Penguin mailto:sage [2008/04/11(金) 16:30:16 ID:p4V9vMAs] seq -w 0 999
919 名前:login:Penguin mailto:sage [2008/04/11(金) 16:38:37 ID:3vnovWPW] >>918 めちゃくちゃありがとうございます!!!
920 名前:login:Penguin mailto:sage [2008/04/11(金) 16:41:55 ID:h4xwic1O] 最近の bash なら echo 00{0..9} 0{10..99} {100..999} zsh なら echo {000..999}
921 名前:login:Penguin mailto:sage [2008/04/13(日) 00:08:59 ID:C50QhsEF] 端末に他の端末から書き込むようなデーモンとクライアントが欲しいです 例として、mltermとurxvtを立ちあげ、 mltermでhogedを起動して、もうurxvtでhogec -e 'echo aaa'ってやったら mltermの画面にaaaとか表示されるようなものです 同時に複数の作業をさせてるときにその進捗を1つのコンソールで見通せたらなとか思いまして…
922 名前:login:Penguin mailto:sage [2008/04/13(日) 00:37:03 ID:tBy+WuAg] 適当なログファイルに書き出して、端末の方にはtail -f (tailf)で流せば
923 名前:login:Penguin mailto:sage [2008/04/13(日) 08:41:28 ID:LTuSsBD0] 端末A $ echo 'term A' > /dev/console 端末B $ echo 'term B' > /dev/console に類したことは、まれにやる。
924 名前:login:Penguin mailto:sage [2008/04/13(日) 09:11:42 ID:DHms7wov] >>921 mlterm$ screen urxvt$ screen -x
925 名前:login:Penguin mailto:sage [2008/04/13(日) 09:16:44 ID:DHms7wov] つ ttysnoop
926 名前:login:Penguin mailto:sage [2008/04/13(日) 10:23:50 ID:+bcR3tRW] >>921 wall
927 名前:login:Penguin mailto:sage [2008/04/13(日) 15:29:10 ID:7nxEkg5V] >>924 それは違うんじゃね?
928 名前:login:Penguin mailto:sage [2008/04/14(月) 21:52:01 ID:yIAGZ+M9] rm -rf /* ┐('〜`;)┌ モウツカレタ
929 名前:login:Penguin mailto:sage [2008/04/15(火) 07:03:22 ID:KF+FiULr] dd if=/dev/zero of=/dev/hda
930 名前:login:Penguin mailto:sage [2008/04/18(金) 07:50:33 ID:9axeonkq] 運用しているマシンでちょっとした作業を行うとき、 nice bash したシェルで作業することがあるのですが、 いま自分が動かしているシェルの nice 値を簡単に 知る方法ってないですかね・・・
931 名前:login:Penguin mailto:sage [2008/04/18(金) 08:23:44 ID:JZJIXmIH] $ ps -o %n $$ そんなことも知らない人がniceするの? それに対話型のコマンドにniceはあまり意味がない。
932 名前:login:Penguin mailto:sage [2008/04/18(金) 09:08:39 ID:9axeonkq] その中でmakeしまくるので
933 名前:login:Penguin mailto:sage [2008/04/18(金) 09:57:57 ID:JZJIXmIH] alias make='nice --adjustment=-30 make'
934 名前:login:Penguin mailto:sage [2008/04/18(金) 11:45:33 ID:u356hJZU] reniceじゃダメなんでしょうか?
935 名前:login:Penguin mailto:sage [2008/04/18(金) 20:06:00 ID:xUbq9+ce] alias nice='ジャズ + クラシック / ロック'
936 名前:login:Penguin mailto:sage [2008/04/18(金) 23:11:33 ID:cOa8NbkQ] nice boat.
937 名前:login:Penguin [2008/04/19(土) 13:43:25 ID:khf4hkQE] >>934 >reniceじゃダメなんでしょうか? topでもいいよな。
938 名前:login:Penguin [2008/04/19(土) 16:17:44 ID:SCXXqtIf] bashのシェルスクリプトで、 文字列に正規表現のフィルタをかけたいのですが 以下の場合、なぜエラーになるかわかりません。 何が悪いですか? expr `ps` : ".*" -> expr: syntax error var1="aaa" expr $var1 : ".*" -> expr: syntax error
939 名前:login:Penguin mailto:sage [2008/04/19(土) 18:02:41 ID:XPjpMm+j] expr "`ps`" : ".*" var1="aaa" expr "$var1" : ".*"
940 名前:login:Penguin [2008/04/19(土) 20:46:24 ID:SCXXqtIf] >>939 それで出来ました。ありがとうございます。 でも理由がいまいちわかりません。 ” ”で囲っていない為 → 文字列型ではない為 → では$var1は何を返すのか?
941 名前:login:Penguin mailto:sage [2008/04/19(土) 21:02:50 ID:SyasDtFa] hdやbdみたいに 2進数表示するプログラムありませんか?
942 名前:login:Penguin mailto:sage [2008/04/19(土) 22:41:34 ID:QZlXANdf] >>941 od
943 名前:login:Penguin mailto:sage [2008/04/19(土) 22:50:17 ID:SyasDtFa] odだと2進数は表示ですう。 もう自分で作っちゃいました・
944 名前:login:Penguin [2008/04/20(日) 10:43:22 ID:C3cqRfnQ] >>940 >” ”で囲っていない為 → 文字列型ではない為 → では$va >r1は何を返すのか? 確かに、おれも気になるぞ