1 名前:login:Penguin mailto:sage [2008/05/17(土) 13:44:57 ID:9hFWtCOD] UNIX板のスレを見ている方も多数おられるかと思いますが、 まあそれはそれとして、BASHウゼーとか言われる心配なく 平和にLINUX的スクリプト談義しましょうよ。 初めての自作スクリプト、自信ないから見てください。な初心者から トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで いろいろな人に参加して頂けると嬉しいです。 perlやらPythonやらの話が混ざっても良いんでない? Part3 : pc11.2ch.net/test/read.cgi/linux/1184077033/ Part2 : pc11.2ch.net/test/read.cgi/linux/1154578200/ Part1 : pc8.2ch.net/test/read.cgi/linux/1121994321/ >>2-5 あたりに色々と。
331 名前:login:Penguin [2008/07/04(金) 08:23:27 ID:jR7hqKfT] プロセスをkillするシェルを作成しましたが、そのシェルそのものも引っかかってしまいます。 下記を実行すると、test のプロセスはKillされますが、 ./kill_test.sh: line 6: kill: (17914) - No such process と、エラーが出ちゃいます。 どのようにすれば、そのシェルそのものを検知しなくできますでしょうか。 例えば、test というプロセスをKillするプログラム #!/bin/bash # kill_test.sh ID=ps axo pid,cmd | grep test | awk '{print $1}'` if [ -n "$ID" ]; then kill $ID fi 実行結果 test のプロセスはKillされますが、エラーも出る ./kill_test.sh: line 6: kill: (17914) - No such process
332 名前:login:Penguin mailto:sage [2008/07/04(金) 08:32:51 ID:dZZeWoZr] >>331 pkill test
333 名前:login:Penguin mailto:sage [2008/07/04(金) 08:55:04 ID:jR7hqKfT] ありがとうございます。 プロセスはKillされますが こんどは Terminated と出ちゃいますが... #!/bin/bash # kill_test.sh pkill test
334 名前:login:Penguin mailto:sage [2008/07/04(金) 16:17:24 ID:8eslOrWY] >>331 grep -v $$ とかやって シェルスクリプトの pid を除く。 grep -v grep とか grep [t]est とかやって grep の pid を除く。
335 名前:login:Penguin mailto:sage [2008/07/04(金) 23:59:25 ID:/fP/UZlP] most なんて初めて知ったよ。 ttp://www.jedsoft.org/most/
336 名前:login:Penguin mailto:sage [2008/07/05(土) 05:45:46 ID:zldIi++e] >>335 同じく support multiple windowsの意味がわからんwww
337 名前:331 mailto:sage [2008/07/05(土) 08:21:10 ID:f1ZF3ker] ps axo pid,cmd | grep test| grep -v ' grep' | awk '{print $1}' で、できました。 m(._.*)mペコッ pkill 知りませんでした。pgrepも知ることができ感謝です
338 名前:login:Penguin mailto:sage [2008/07/05(土) 15:47:51 ID:9A3h5Tdb] >>335 漏れも漏れも can scroll left and rightの意味がわからん。
339 名前:login:Penguin mailto:sage [2008/07/05(土) 16:46:32 ID:QzBtt5r9] 文字どおり左右にもスクロールできる、ってことじゃないのか 複数のファイルが見られるとか書いてあるし ttp://www.slackbook.org/html/file-commands-pagers.html
340 名前:login:Penguin mailto:sage [2008/07/05(土) 19:44:37 ID:wIp47NAo] perlとかrubyとかpythonとかはシェルスクリプトよりも確かに優れてる面もたくさんあるけど、 classpathの設定とかで混乱する手間と暇を総合的に考えると、単純なシェルスクリプトの範囲内で 問題を解決する能力がある人のほうが貴重。
341 名前:login:Penguin mailto:sage [2008/07/06(日) 00:07:36 ID:H+bXS9E7] >>340 めんどいからさっさと結論を出すと、適材適所だな。 次の方どうぞ。
342 名前:login:Penguin mailto:sage [2008/07/06(日) 00:17:49 ID:KiLBqQPD] >>340 > classpathの設定とかで混乱する手間と暇 ちょっとまてw。perlとかrubyとかpython使ったことないだろ? java男ご乱心。
343 名前:login:Penguin mailto:sage [2008/07/06(日) 00:19:29 ID:H+bXS9E7] >>342 例えばperlとかには@INCとかあるから、その辺のことを話したいんだろうと理解。 行間くらい読んでやれ。
344 名前:login:Penguin mailto:sage [2008/07/06(日) 00:29:37 ID:KiLBqQPD] >>343 行間読んでJython,Jrubyみたいな話かとおもた。あんなキモいもん認めん。
345 名前:login:Penguin mailto:sage [2008/07/06(日) 00:31:39 ID:fSJWsnfA] 作るスクリプトが動かされる環境を予測できて,ちゃんと互換性をもたせる能力があればperlでもgnu依存でもなんでもいいよ.
346 名前:login:Penguin mailto:sage [2008/07/06(日) 00:33:14 ID:KiLBqQPD] それでもjavaライブラリ依存は認めない。
347 名前:login:Penguin mailto:sage [2008/07/06(日) 20:32:11 ID:Bp8Wp40b] テキスト処理について質問させてください SQLを格納した以下のようなログファイルがあります。 select * from table1 where 名前='田中' select * from table1 where 名前='佐藤' and 年齢 > 20 select * from table1 where 名前='鈴木' これの条件部分('田中'とか'佐藤'の部分)を'*'に一括で変更する方法はありますか? 環境としてbash、awk、sedは使えますがperlは使えません。 よろしくお願いします
348 名前:login:Penguin mailto:sage [2008/07/06(日) 21:12:08 ID:9FSHXxTH] $sed "s/名前='.*'/名前='*'/g" hoge > foo $mv foo hoge
349 名前:login:Penguin mailto:sage [2008/07/06(日) 21:36:34 ID:7sKhRIVr] >>348 $ sed -i "s/名前='.*'/名前='*'/g" hoge
350 名前:login:Penguin mailto:sage [2008/07/06(日) 21:42:16 ID:9FSHXxTH] そのオプションマニュアルに載ってないな、初めて知った勉強になりました
351 名前:login:Penguin mailto:sage [2008/07/06(日) 22:12:09 ID:ksmXqbT3] 再起動(shutdown -r now)後、 数分後に指定シェルを起動させたいのですが、 何か良い方法ないでしょうか? centos4で、 /etc/rc.local に記述すると即時起動は可能なのですが、 時間指定ができないため悩んでおります。 再起動を行うのが一定時刻ではないので atも使えません。 どなたかお助けくださいませ。
352 名前:login:Penguin mailto:sage [2008/07/06(日) 22:14:33 ID:fSYsy/u2] >>351 sleep
353 名前:login:Penguin mailto:sage [2008/07/06(日) 22:21:54 ID:WvrNzaWB] >>348-349 ありがとう
354 名前:login:Penguin mailto:sage [2008/07/06(日) 22:28:07 ID:fMUp8CRa] >>351 at now + 数 minutes などと /etc/rc.local に書いたらどうだろう。
355 名前:351 mailto:sage [2008/07/06(日) 22:45:55 ID:ksmXqbT3] >>352 >>354 サンクスコです!! 試してみます!!
356 名前:login:Penguin [2008/07/07(月) 21:33:14 ID:pcTeT086] uClinux2.6上のBusyBoxのmshというシェルで質問です。 BusyBoxのバージョンは以下です。 BusyBox v1.4.1 (2008-06-02 10:22:52 CST) Built-in shell (msh) mshでループ処理をさせていると、いつのまにか Shell input nested too deeply というエラーになり、スクリプトのプロセスが死んでしまうのですが、 何か良いやり方はあるでしょうか。 やりたい事は、アプリケーションの裏方で、1秒毎にサーバに pingを打つなどしてネットワークが見えているかを確認し、 通じないならリカバリをするポーリング処理です。 autorun.sh内からsrvwatch.sh &として起動しています。 srvwatch.sh -------- #!/bin/sh server=192.168.0.1 while [ 継続条件 ] do ping $server -c 1 if [ $? != 0 ]; then # ( pingが通じない時の処理 ) fi sleep 1 done 最悪、他のシェルが使えない事もないのですが、mshで解決できれば それに越したことはないので、よろしくお願いします。
357 名前:login:Penguin mailto:sage [2008/07/07(月) 21:34:48 ID:2WJ5nXyr] >>356 キリの良いところで別のスクリプトにして子プロセスとして動かせば?
358 名前:login:Penguin mailto:sage [2008/07/07(月) 21:44:55 ID:pcTeT086] >>357 なるほど。 例えばアプリケーション内のループをトリガにできれば問題を回避できそうですね。 その方向で検討してみます。
359 名前:login:Penguin mailto:sage [2008/07/13(日) 16:02:53 ID:XKteJijz] quotaのedquotaだとテキスト形式でエディタで編集しなきゃいけないですが、 コマンドのみで指定ユーザを指定容量に変更、ってどうすればできるでしょうか?
360 名前:login:Penguin mailto:sage [2008/07/13(日) 18:28:58 ID:Ixz1lkH8] 実は、ここは「シェルスクリプト総合」スレ。
361 名前:login:Penguin mailto:sage [2008/07/13(日) 23:41:37 ID:2nzKAI8F] a,1 a,2 b,3 c,1 d,15 d,1 d,1 e,3 こんな感じのファイルを、1カラム目でユニークにして、2カラム目は1カラム目の値ごとに合計を出したい という場合なんですが、シェルではむずいですか? a,3 b,3 c,1 d,17 e,3 この結果を求めてます
362 名前:login:Penguin mailto:sage [2008/07/14(月) 00:16:50 ID:pAKMtVeu] いいえ 容易です
363 名前:login:Penguin mailto:sage [2008/07/14(月) 08:20:36 ID:Nv/tP5Or] >>361 cutとsort、uniqでキーのリストを作る。 grepとcutでキーごとの値を得る。 それをexpr
364 名前:login:Penguin mailto:sage [2008/07/14(月) 16:52:54 ID:6AUtGr7x] >>361 awk 使えば〜
365 名前:login:Penguin mailto:sage [2008/07/14(月) 18:28:30 ID:Mh/R7fAz] >>361 awk -F, '{dat[$1]+=$2}END{for(i in dat) print i","dat[i]}' hoge
366 名前:login:Penguin mailto:sage [2008/07/17(木) 15:31:48 ID:8xNJ++Yc] 指定した変数の中に、ある文字列があれば〜 という条件式、どのように書けばいいですか。
367 名前:login:Penguin mailto:sage [2008/07/17(木) 15:59:24 ID:RxW1jeOx] #!/bin/sh hoge=$1 hogehoge=$2 if [ `echo $hoge | grep $hogehoge` ]; then echo "$hogehoge exist in $hoge" fi exit 0
368 名前:login:Penguin mailto:sage [2008/07/17(木) 16:09:53 ID:RxW1jeOx] と思ったけど >>228 のほうがいいな
369 名前:login:Penguin mailto:sage [2008/07/17(木) 20:02:22 ID:8xNJ++Yc] >>367 ども ですが、ひとつ質問です たとえばhogeにunko is hogehogeにu とした場合、ちゃんと動かないですがこれはどう扱えばいいですか。
370 名前:login:Penguin mailto:sage [2008/07/17(木) 20:35:02 ID:IIv1XTjU] よろしくおねがいします bkfile=$dest/$2.$timestamp.tar.gz tar cpzf $bkfile $1 >/dev/null 2>&1 if [ $? != 0 -o ! -e $bkfile ]; ここのでの if [ $? != 0 -o ! -e $bkfile ]; 意味を教えて下さい、エロイヒト
371 名前:login:Penguin mailto:sage [2008/07/17(木) 20:49:36 ID:wB0Vu+2C] >>370 cyberam.dip.jp/linux_command/shellscript/shellscript_main.html
372 名前:login:Penguin mailto:sage [2008/07/17(木) 21:05:28 ID:6zoBsCIm] それも、変数に 'unko is' を入れられない糞スクリプトだね。
373 名前:login:Penguin mailto:sage [2008/07/17(木) 21:10:39 ID:IIv1XTjU] $? != 0 -o は終了ステータス ! -e $bkfile はファイルで無い場合 すなわち 終了ステータスがO以外、且つ、bkfileがファイルの場合 ということでok?
374 名前:login:Penguin mailto:sage [2008/07/17(木) 21:14:48 ID:ZrSZoUoY] >>372 unkoは入れるものじゃなくて出すものだからな #/bin/sh hoge=$1 hogehoge=$2 if [ "`echo $hoge | grep $hogehoge`" = "$hoge" ]; then echo "$hogehoge exist in $hoge" fi
375 名前:login:Penguin mailto:sage [2008/07/17(木) 21:21:49 ID:wB0Vu+2C] >>373 終了ステータスが0以外、もしくは、$bkfileファイルが存在しない場合
376 名前:login:Penguin mailto:sage [2008/07/17(木) 21:27:09 ID:IIv1XTjU] >>375 thx if [ $? != 0 -o ! -e $bkfile ]; [ $? != 0 ]且つ [-o ! -e $bkfile ] -oの意味と [ $? != 0 -o ! -e $bkfile ]; スクリプトの区切り方がわかんらんのですが・・・ 面倒かけてスマソ よろしくお願いします
377 名前:login:Penguin mailto:sage [2008/07/18(金) 00:26:56 ID:djfoTRoL] >>374 助かりましたどうもです。
378 名前:login:Penguin mailto:sage [2008/07/18(金) 00:47:41 ID:JinxhkI+] >>376 man test で -o を探せ。
379 名前:login:Penguin mailto:sage [2008/07/23(水) 12:37:01 ID:AKylUJRP] 「あるディレクトリにAA.bbというファイルがなかったら AA.ccというファイルを削除する」 これをどう書いたらいいか教えてください
380 名前:login:Penguin mailto:sage [2008/07/23(水) 12:42:19 ID:XuVewefN] [ ! -f AA.bb ] rm AA.cc
381 名前:login:Penguin mailto:sage [2008/07/23(水) 12:43:53 ID:x1Crms/C] 宿題は自分でやりなさい。
382 名前:379 mailto:sage [2008/07/23(水) 21:51:48 ID:AKylUJRP] >>380 ありがとうございます!できました。 別件でもう一つ教えてください。 「m2eという拡張子のものをコンバート(m2t化)、成功したらm2eを削除する」 というスクリプトを書きました。 #!/bin/sh for file in *.m2e do /usr/local/bin/b25 $file ${file%m2e}m2t EXITCODE=$? if [ 0! = $EXITCODE ]; then rm -f $file fi done m2eファイルは複数あるんですが、4行目でありったけのm2eを処理し終わらないと 5行目以降の処理に進まないようで、 m2eを削除することなくばんばんm2tができていきます。 これを、1ファイルごとの処理にするにはどこを変えたら良いでしょうか・・・?
383 名前:login:Penguin mailto:sage [2008/07/23(水) 21:59:02 ID:XuVewefN] >>382 >381 in `ls *.m2e`
384 名前:login:Penguin mailto:sage [2008/07/23(水) 22:18:42 ID:jePbQOfG] 分からない時は変数を出力してみるといいよ!
385 名前:login:Penguin mailto:sage [2008/07/23(水) 22:22:18 ID:Ec8ZyKSx] 終了判定の if文がおかしいから、rm行が実行されないのでは? sh -x script してデバッグしてちょ。
386 名前:379 mailto:sage [2008/07/23(水) 23:27:36 ID:AKylUJRP] 皆さんほんとありがとうございます。 sh -x すら知りませんでした。超便利ですねこれ…。 で、b25コマンドが成否に関わらず終了コード0を返していました。 成功したら1を返すだろうという先入観が敗因でした。 今日教わったことを踏まえ以下のとおりにしたら成功しました。 #!/bin/sh for file in `ls *.m2e` do /usr/local/bin/b25 $file ${file%m2e}m2t if [ -f ${file%m2e}m2t ]; then echo complete rm -f $file else echo fail fi done 初めて書くシェルスクリプトですが、おかげさまで思ったとおりできました。 どうもありがとうございました。
387 名前:login:Penguin [2008/07/23(水) 23:30:38 ID:bXJC8PaP] >>383 ls する必要あるか?
388 名前:login:Penguin mailto:sage [2008/07/23(水) 23:31:06 ID:HicxYVC5] >>386 蛇足かもしれんが、成功したときの終了コードは0だ。
389 名前:login:Penguin mailto:sage [2008/07/24(木) 01:05:36 ID:cIOzBtbq] 空白を含んだファイル名の処理がおかしくなるので,ls しない方がベター。 元の > for file in *.m2e のままでよい。 >>382 = の否定は != ね。 ! と = の間に空白を入れてはいけないよ。
390 名前:login:Penguin mailto:sage [2008/07/24(木) 08:32:37 ID:BJInmIaX] >>387-389 遅いよおまいら。 遅刻の罰として、5分毎にこのスレの新規書き込みをチェックするスクリプトを上げること。 bashの内部コマンド以外は使ってはいけません。
391 名前:login:Penguin mailto:sage [2008/07/24(木) 10:40:03 ID:jtU4rAt4] curlも使っちゃいかんのかい・・・
392 名前:login:Penguin mailto:sage [2008/07/24(木) 20:20:13 ID:Hhban5lk] あきまへん。bashのソケットで。
393 名前:login:Penguin mailto:sage [2008/07/24(木) 22:02:07 ID:pIyY20xI] wgetは認められるはず。 なんせ左手だけで入力できるんだぜ?
394 名前:login:Penguin mailto:sage [2008/07/24(木) 23:00:05 ID:yNUWiOQr] >>392 詳しくは知らないけど/dev/tcp/host/portじゃダメかな?
395 名前:login:Penguin mailto:sage [2008/07/25(金) 08:02:37 ID:5wHuLUjg] ええのではないでしょうか bashでcurlを代替するには、それで双方向ソケットを実現するしか多分ないだろうから。
396 名前:login:Penguin mailto:sage [2008/07/30(水) 16:48:07 ID:JUVwIDuC] あるファイルの、ファイル名を先頭から10文字分取得してOSの変数に入れたいのですが 拡張子もない日時そのままのファイル名(080730151530 とか)なので for文すら書けずにいます。 どう書いたらいいですかと聞ける段階にもないのですが、 こういったファイル名の扱い、前方一致のさせ方について 参考になりそうなサイトなどないでしょうか?
397 名前:login:Penguin mailto:sage [2008/07/30(水) 17:37:14 ID:8Rj3UHKM] まずは正規表現について学ばれるといいと思います
398 名前:login:Penguin mailto:sage [2008/07/30(水) 17:47:11 ID:sE7Hyt0D] #!/bin/sh tmp="9999444422228888" for file in ${tmp}; do #先頭から8文字目まで切り出し echo ${file} | cut -c 1-8; done プロトタイプつくって、色々試してみるといいかもよ あとは、tmpをどのように持っていくか find使いたかったら tmp=`find -tpe f` とかだろうし 色々やってるうちに、スペースが入ったファイル名とかで疑問もでてくるだろうし
399 名前:login:Penguin mailto:sage [2008/07/31(木) 02:05:26 ID:kxeNsmhd] 目的のファイルがあるディレクトリで(そのディレクトリに cd して) スクリプトを実行するという前提で、、、 for FILE in * で、そのディレクトリにある隠しファイル以外のファイルの名前が順に変数 FILE に入る。 拡張子のあるなしは関係ない。 もし、日時そのままのファイル名(数字12文字のみからなる?)以外のファイルが ディレクトリ内に存在する場合には、以下のような if 文で弾く。 if echo $FILE | grep '^[0-9]\{12\}$' > /dev/null あとは>>398 のを組み合わせて全体はこんな感じ。 #!/bin/sh for FILE in * do if echo $FILE | grep '^[0-9]\{12\}$' > /dev/null then echo $FILE | cut -c 1-10 fi done
400 名前:login:Penguin mailto:sage [2008/07/31(木) 10:18:05 ID:JpgVGgaY] そもそも CUI 環境の UNIX, Linux に拡張子という概念は無いと思われます。
401 名前:login:Penguin mailto:sage [2008/07/31(木) 14:53:26 ID:a31/vqCD] 概念という言葉が適切かどうか。
402 名前:login:Penguin mailto:sage [2008/07/31(木) 15:54:04 ID:SAvKwoDD] kakutyou.c
403 名前:login:Penguin mailto:sage [2008/07/31(木) 16:54:35 ID:CDeZt19d] >CUI 環境の UNIX, Linux に拡張子 CUIと拡張子に何の関連があるんだ。 MS-DOS時代には拡張子が無かったという主張なのか。
404 名前:login:Penguin mailto:sage [2008/07/31(木) 17:22:53 ID:JpgVGgaY] >>403 文字通りの意味だよ KDEなど使用したX環境では拡張子を判断してプログラム動作を変えるものが一部にあるからね もう一度言うが、「文字通りの意味」だ そんなに解らん日本語だったかね
405 名前:login:Penguin mailto:sage [2008/07/31(木) 17:24:39 ID:FFTlQwAQ] mailcapはあるけど
406 名前:login:Penguin mailto:sage [2008/07/31(木) 17:26:02 ID:+AWBOmCl] 拡張子ではなく suffix だ、とかそういう話じゃなかったのか。
407 名前:login:Penguin mailto:sage [2008/07/31(木) 17:29:51 ID:6oedF87g] >>404 胸張って屁理屈言ってどうするかね。 大人気なく反例を提示するなら、CUIで動く代表的なプログラムであるgccは拡張子を見て呼ぶコンパイラを変えたりするが、見解を求む。
408 名前:login:Penguin mailto:sage [2008/07/31(木) 17:35:59 ID:JpgVGgaY] >>407 めんどい
409 名前:login:Penguin mailto:sage [2008/07/31(木) 18:09:02 ID:RztDzhJY] >>407 座布団あげる。 柔軟だというだけだよね。
410 名前:login:Penguin mailto:sage [2008/07/31(木) 18:18:49 ID:6oedF87g] gzipも拡張子見るなw
411 名前:login:Penguin mailto:sage [2008/07/31(木) 18:21:00 ID:9ySiTva1] make !! , make !!
412 名前:login:Penguin mailto:sage [2008/07/31(木) 20:26:30 ID:54icAPXL] ID:JpgVGgaY 恥ずかしいなw 全部言い返されてやんの
413 名前:login:Penguin mailto:sage [2008/07/31(木) 22:03:49 ID:zM7TOaQk] >>406 拡張子でなく接尾辞だという点には誰も異論だ無いんじゃないか。 >KDEなど使用したX環境では拡張子を判断してプログラム動作を変えるものが一部にあるからね などと強弁してるのを皆に笑われているだけで。
414 名前:login:Penguin mailto:sage [2008/07/31(木) 23:00:46 ID:XBLFfbqE] hoge.gz.20080101 を gunzip しようとしたら怒られましたよ
415 名前:login:Penguin mailto:sage [2008/07/31(木) 23:27:25 ID:9ySiTva1] >>413 gcc も gunzip も manページの表現は接尾子でもsuffixでもなく、「拡張子」ですな。
416 名前:login:Penguin mailto:sage [2008/07/31(木) 23:30:11 ID:F09gGQyB] もう いじめはやめましょうw
417 名前:login:Penguin mailto:sage [2008/07/31(木) 23:43:03 ID:W0fu7NON] >>415 そら、まあ C:\>gzip.exe -dc < hoge.gz > hoge なんてときの .gz は拡張子だもの。 というか、実のところ「拡張子」という呼称が既に人口に膾炙してるから、そう表現してるんじゃないかな。 たぶん、>>406 の言ってることはもっと厳格で、FAT(だっけ?)には8文字のファイル名と3文字の拡張子を入れる覧があるが、inodeにはファイル名覧しか無いといったことだと思うよ。 あっと、俺は ID:JpgVGgaY ではないよ。話をたどれば分かると思うが。
418 名前:login:Penguin mailto:sage [2008/07/31(木) 23:50:25 ID:9ySiTva1] >>417 >>417 ≠ ID:JpgVGgaYは了解しています。直接レスつけるのは忍びなかったので。 あとsuffixつーとドメインネーム則なんかのジャンルも含む気がして ちょっと拡張子とはニュアンスが違うと思いました。
419 名前:login:Penguin mailto:sage [2008/08/01(金) 00:09:05 ID:Z+D1IjNX] >>415 suffix って表現もあるじゃん。 extension と混在してる。
420 名前:login:Penguin mailto:sage [2008/08/01(金) 07:18:11 ID:K/umwhS+] まぁまぁ、404のオモシロ発言でもたどって和んで。 >>400 そもそも CUI 環境の UNIX, Linux に拡張子という概念は無いと思われます。 >>403 >CUI 環境の UNIX, Linux に拡張子 CUIと拡張子に何の関連があるんだ。 MS-DOS時代には拡張子が無かったという主張なのか。 >>404 >>403 文字通りの意味だよ KDEなど使用したX環境では拡張子を判断してプログラム動作を変えるものが一部にあるからね
421 名前:login:Penguin mailto:sage [2008/08/01(金) 09:33:44 ID:9ncfYug9] 人口に膾炙←読めない
422 名前:login:Penguin mailto:sage [2008/08/03(日) 20:26:52 ID:z2v8StjQ] ループか? ループスレなのか?うひょーーーーーーーーーー
423 名前:login:Penguin mailto:sage [2008/08/05(火) 09:41:49 ID:GjmRcMaB] 拡張子はファイル名の接尾辞として使われるっていう、ただそれだけの話。
424 名前:login:Penguin mailto:sage [2008/08/05(火) 11:31:30 ID:P4vieYD2] *.bak と *~ で見た目は違うが用途はほぼ同じなんだけど *.1 *.2 … はlogとmanで意味合いが変わるもんな
425 名前:login:Penguin mailto:sage [2008/08/10(日) 15:12:11 ID:3WlJmUth] bash の配列の話です。 添え字を付けて定義すれば要素がかけた配列を作れますよね? x=(a b c) x[4]=e x[6]=g こんな風に定義すると要素の数 ${#x[@]} は 5 を返しますが 実際には x[6] まで定義されているわけです。 こういう歯抜けの配列から添え字と要素をセットで全て取り出す方法 何かありませんか? for i in ${x[@]} ; do echo $i ... だと添え字がわかりません。 for (( i=0 ; i < ${#x[@]} ; i++ )) ; do echo ${x[i]} ... だとかけた部分に対応できません。 bash の配列処理が貧弱なのは知っていますが 何か知恵がありそうな気もするんです。
426 名前:login:Penguin mailto:sage [2008/08/10(日) 16:39:06 ID:YtTqhIm8] >こんな風に定義すると要素の数 ${#x[@]} は 5 を返しますが うちでは 6 になる。 $ set x=(a b c e '' g) なので、 x[5]が空だからきっと代入されなかったんだろう という判断しか思い付かない。
427 名前:426 mailto:sage [2008/08/10(日) 19:20:40 ID:OrrhkboJ] 読み返すと我ながらバカな日本語でイヤになった。式で書く for ((i=1; i <= ${#x[@]}; i++)) do if [ "${x[i]}" != "" ]; then echo "$i ${x[i]}" という判断文を付け加えることぐらいしか思い付かない。
428 名前:login:Penguin mailto:sage [2008/08/10(日) 21:22:42 ID:3WlJmUth] >>426 >> こんな風に定義すると要素の数 ${#x[@]} は 5 を返しますが > うちでは 6 になる。 あれ?自分の環境 (bash 2.05b @ debian) では 5 なんだけどな。 そちらの環境を教えてくれますか?
429 名前:login:Penguin mailto:sage [2008/08/10(日) 21:51:14 ID:uOwkyJaM] あ、ごめん。zsh でやっていた。 bash で set すると、 $ set x=([0]="a" [1]="b" [2]="c" [4]="e" [6]="g") で、添え字と要素がセットでズバり出るじゃないですか。
430 名前:login:Penguin mailto:sage [2008/08/10(日) 23:04:19 ID:3WlJmUth] >>429 ああ、そうでした。確かに表示されますね。 [] とか = とか変な文字が要素に入らないという前提なら そこから添え字のみを取り出せればいけそうですね。
431 名前:login:Penguin mailto:sage [2008/08/14(木) 21:23:54 ID:6SkumsSk] 基本的なことで、すいまん bashで、たとえば # login : root # passwd : foo なんて場合、シェルからの問い合わせに対して、スクリプト側で rootやfooを自動的に入力したいのですが、どのように書いたらいいのでしょうか?
432 名前:login:Penguin mailto:sage [2008/08/14(木) 21:24:45 ID:6SkumsSk] BATU 基本的なことで、すいまん MARU 基本的なことで、すいません
433 名前:login:Penguin mailto:sage [2008/08/14(木) 21:44:42 ID:Q5H0d7m9] >>431 expect
434 名前:login:Penguin mailto:sage [2008/08/14(木) 21:52:17 ID:6SkumsSk] >>433 イクスペクトですか、ありがとう
435 名前:login:Penguin mailto:sage [2008/08/17(日) 13:04:54 ID:id1iDBNz] >>433 bashで
436 名前:login:Penguin mailto:sage [2008/08/18(月) 22:17:27 ID:P4gPyZDt] グループ sumo が存在するか? を調べる方法が思いつかない。 ユーザ hakuho の存在を調べるのは、 id hakuho などとやろうと思うが、グループの方をhelp!! grep /etc/group はやりたくない。
437 名前:login:Penguin mailto:sage [2008/08/18(月) 23:25:02 ID:Wi4hQzW9] >>436 くだらねえ質問はここに書き込め! Part166 pc11.2ch.net/test/read.cgi/linux/1217051698/
438 名前:login:Penguin mailto:sage [2008/08/18(月) 23:35:20 ID:tdXNnNro] LANG=C chgrp hakuho / 2>&1 | grep -q '^chgro: invalid group' || echo ok
439 名前:login:Penguin mailto:sage [2008/08/19(火) 08:01:52 ID:GbBy+Szp] chgrpされたら困るやん。
440 名前:login:Penguin mailto:sage [2008/08/19(火) 08:17:46 ID:yV2lM3C5] root じゃなきゃ大丈夫でしょ。
441 名前:login:Penguin mailto:sage [2008/08/19(火) 11:14:23 ID:i/uDMj66] んな罠みたいなスクリプトはちょっと。
442 名前:login:Penguin mailto:sage [2008/08/19(火) 11:19:47 ID:yV2lM3C5] 他に思いつかないんだよな。 素直に /etc/group を grep するのが一番だと思う。
443 名前:login:Penguin mailto:sage [2008/08/19(火) 11:30:56 ID:Z4idUwk9] grep /etc/group はやりたくないそうだから仕方ない
444 名前:login:Penguin mailto:sage [2008/08/19(火) 11:31:37 ID:yV2lM3C5] NIS とか LDAP とか使ってるなら perl あたりで getgrnam とか。
445 名前:login:Penguin mailto:sage [2008/08/19(火) 22:33:06 ID:/3aOZv4D] NISもLDAPも使ってないが、これは良いかもしれない。ありがとう。 $ perl -e '($n, $p, $g, $m) = getgrnam 'lp'; printf "%s\n", $g' 7
446 名前:login:Penguin mailto:sage [2008/08/21(木) 00:34:13 ID:uS1Qpazh] bash使ってるのですが lsすると何も返ってこないです set +mするとかえってきます 何が悪いのかさっぱりわかりません
447 名前:login:Penguin mailto:sage [2008/08/21(木) 02:06:11 ID:hLnB3a+h] >>446 type ls するとどう出る?
448 名前:login:Penguin mailto:sage [2008/08/25(月) 22:22:20 ID:q8+dK05f] echo $"Starting XXXX daemon..." という一文の「$」の意味を解しかねてるんだども…
449 名前:login:Penguin mailto:sage [2008/08/25(月) 22:30:19 ID:TaEIkWlk] % echo $"Starting XXXX daemon..." $Starting XXXX daemon... % echo "$Starting XXXX daemon..." XXXX daemon... %
450 名前:login:Penguin mailto:sage [2008/08/25(月) 22:34:16 ID:i+OsnagO] >>448 ja.po とか作るときに $" " で囲んだところが 翻訳の対象として切り出される。 メッセージ カタログ化 とかでググれ。
451 名前:login:Penguin mailto:sage [2008/08/25(月) 23:32:42 ID:w1+LX6rA] これすか… bash(1) > --dump-po-strings > Equivalent to -D, but the output is in the GNU gettext po (portable object) file format. 試しに /usr/share/locale/ja/LC_MESSAGES/XXXX.mo を作ってみたが、日本語にならない。 あうあう。。。 「$」はぶった切ることにします。
452 名前:login:Penguin mailto:sage [2008/08/25(月) 23:49:02 ID:i+OsnagO] >>451 急ぎじゃなかったら少し頑張ってみるといいかも。 前作ったもの見たらこんな感じで作業してたらしい。 $ xgettext -o hoge.po hoge.sh $ gtranslator hoge.po $ msgfmt -o hoge.mo hoge.po hoge.sh の中にはこんなのが書いてあった。--> if [ -z "$TEXTDOMAIN" ] ; then TEXTDOMAIN="hoge" TEXTDOMAINDIR="/usr/share/locale" fi <-- TEXTDOMAIN="hoge.sh" じゃなくて TEXTDOMAIN="hoge" にしてあるのは hoge.sh をインストール時に /usr/bin/hoge に改名(hoge.sh から hoge に)するため。
453 名前:login:Penguin mailto:sage [2008/08/26(火) 23:01:28 ID:JsSv3XDz] gtranslator てのが無かったので、 $ sh --dump-po-strings XXXX > ~/XXXX.po とし、msgfmt 以降同様にすると日本語になりました。 どうもありがとう。
454 名前:login:Penguin mailto:sage [2008/08/31(日) 15:42:27 ID:aoYJcwTK] ?$
455 名前:login:Penguin [2008/09/01(月) 09:58:54 ID:LEXE4Xrt] C言語でいう for (float a=0.1;a<1.5;a+=0.1){ } の様なループはどのように書けばよいのでしょうか?
456 名前:login:Penguin mailto:sage [2008/09/01(月) 10:38:54 ID:zLmvj5ED] >>455 小数とか使いたいなら もっとまともな言語使った方がいいよ。
457 名前:login:Penguin mailto:sage [2008/09/01(月) 12:17:57 ID:qt+GSvTX] for i in `seq 1 20` do i=`echo "scale=1; $i / 10" | bc` echo $i done
458 名前:login:Penguin mailto:sage [2008/09/01(月) 17:56:42 ID:gt+0kg/y] やっぱループ変数は整数だよな。 少数は気持ち悪い。
459 名前:login:Penguin mailto:sage [2008/09/01(月) 23:52:23 ID:yMJ8hMF5] $ cat aso killall fukuda
460 名前:login:Penguin mailto:sage [2008/09/02(火) 01:01:15 ID:iTMiNYXN] >>458 気持ち悪いどころか、有害。 for(float a=0;a<=1.0;a+=0.1){printf("%g ",a);} ⇒ 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
461 名前:login:Penguin mailto:sage [2008/09/02(火) 02:16:22 ID:NrY9TL/o] >>460 勉強になります。 使った事ないし、使う場合はテストするのでだいじょぶだけど。 でも絶対やらんよねw Cやってるやつは。 すれち
462 名前:login:Penguin mailto:sage [2008/09/02(火) 04:38:59 ID:dzMMfnry] bcで計算させたとき、0以下の小数は最初の0を抜いた.2のように表示されますが、 0.2の様な表示にはできませんか?
463 名前:login:Penguin mailto:sage [2008/09/02(火) 09:52:47 ID:bHR8SDTE] 0 ≧ .2 なのか。
464 名前:login:Penguin mailto:sage [2008/09/03(水) 00:04:05 ID:aqC4nv+U] >>463 浮動小数点の比較を工夫なく行う奴はアホ。
465 名前:login:Penguin [2008/09/05(金) 21:49:46 ID:eUOT1mPo] sed を | で つなぐんじゃだめ?
466 名前:login:Penguin mailto:sage [2008/09/06(土) 00:00:19 ID:x4tIq2Vd] #!/bin/sh echo '%A4%A2' | tr % = | nkf -emQ 「あ」と表示させたいのですが、「、」」と表示されてしまいます。 正しい書き方を教えてください。
467 名前:login:Penguin mailto:sage [2008/09/06(土) 05:03:55 ID:/FPWBzOe] うち(EUC環境)では「あ」と表示される。
468 名前:login:Penguin mailto:sage [2008/09/06(土) 08:59:05 ID:6Sr65r/p] >>466 テキストに落とすとEUCで「あ」に見える
469 名前:login:Penguin mailto:sage [2008/09/06(土) 23:40:32 ID:O24UR7Eo] >>466 の環境がUTF-8なら #!/bin/sh echo '%A4%A2' | tr % = | nkf -wmQ
470 名前:login:Penguin [2008/09/08(月) 22:09:56 ID:tYV0ghqH] 引数 output-file input-file1 input-file2 ... を受け取ってinput-fileN に some-dir/ を付加したコマンド引数を他のプログラムの引数として与えたいのです。 つまり、 foo yaruo.out vip.txt vipper.txt vippest.txt でfooを実行して、そのfoo内では bar yaruo.out www/vip.txt www/vipper.txt www/vippest.txt を実行するということがしたいのです。 こんなスクリプトを作成するには、fooをどのように記述すればいいのでしょうか。 よろしくお願いします。
471 名前:login:Penguin mailto:sage [2008/09/08(月) 22:27:43 ID:UFg0tXoN] もう宿題の季節なのか?一箇所直してから使ってくれ。 #!/bin/bash org=www; ARG1=${1}; shift; echo bar ${ARG1} ${@/#/${org}/}
472 名前:login:Penguin mailto:sage [2008/09/08(月) 22:50:15 ID:4IH3dQd+] >>470 あのね、 宿題を出す先生は、このスレもチェックしてるからね、 >>471 のを出しても 0 点だからwww ゆっくり 0 点にしてってね!
473 名前:login:Penguin [2008/09/08(月) 22:54:09 ID:tYV0ghqH] >>471 残念ながら宿題ではないのです〜 ありがとうございました。
474 名前:login:Penguin mailto:sage [2008/09/08(月) 23:03:49 ID:QeMmaTeA] うちの大学の先生はプログラム板も見ていた
475 名前:login:Penguin mailto:sage [2008/09/08(月) 23:09:05 ID:/XLojU6V] 先生も激務だな
476 名前:login:Penguin mailto:sage [2008/09/08(月) 23:45:08 ID:lCRZh05X] 悪いな、おいらは数学板だけでなく、 日本語のあらゆる数学質問掲示板を巡回している。 必ず学生が質問をしやがるから。 レポートを返すときに、そのスレおよび掲示板のコピーを添付して、念のため確認をとる。 初めから正直に引用したと書いてあるものについては、改めて口頭で説明させている。
477 名前:login:Penguin mailto:sage [2008/09/09(火) 08:43:21 ID:7p63VvoV] 院生にやらせそうな案件だな
478 名前:login:Penguin mailto:sage [2008/09/11(木) 23:43:43 ID:6JSrg1Nn] 実際に教授がやってたら笑いものだな。 そこまで熱心にありがとうございます、と学生ながらに思うべきか。 ただ、ねぇ・・・
479 名前:login:Penguin mailto:sage [2008/09/12(金) 01:07:51 ID:Hfrl7+Fx] >>478 いや、日本だけってわけでなく海外でも今や引用元チェックとか行っているよ。
480 名前:login:Penguin mailto:sage [2008/09/12(金) 18:08:43 ID:9WCeRGBW] へー
481 名前:login:Penguin mailto:sage [2008/09/12(金) 21:11:04 ID:lKrrIxw4] 3年前ほどにアメリカのテレビドラマで高校の先生がエッセイの宿題を返す場面を見た。 ある学生に返しながら、「素晴らしいエッセイだったわ。 essay.com(のような感じ)ね? 月曜までに自分で書いて来てね」
482 名前:login:Penguin mailto:sage [2008/09/13(土) 02:57:01 ID:+1Gk57wR] 問題も自分で作ってね
483 名前:login:Penguin mailto:sage [2008/09/19(金) 18:18:28 ID:0H1973GE] >>479 手作業じゃないよね。日本語を解析できるツールはまだできてないよ。
484 名前:login:Penguin mailto:sage [2008/09/25(木) 00:19:59 ID:t0y6Jov+] fdisk /dev/sdb n p 1 w ↑こんな感じで、入力させていきたいのですが、 方法がわかりません。キーボード 入力 シェル スクリプト あたりでぐぐると、キーボードからの入力を受け付ける、しか見つかりませんでした。 方法を教えてください。
485 名前:login:Penguin mailto:sage [2008/09/25(木) 01:43:59 ID:Khd+tIc7] >>484 expect
486 名前:login:Penguin mailto:sage [2008/09/25(木) 09:57:28 ID:fRZ/kmS9] >>484 sfdisk
487 名前:login:Penguin mailto:sage [2008/09/25(木) 19:47:43 ID:wpIij73K] >>484 >> EOF
488 名前:login:Penguin mailto:sage [2008/09/25(木) 19:55:28 ID:oa1dgrD9] ( echo n; echo p; echo 1; echo w ) | fdisk /dev/sdb 入力が端末かどうかちゃんとチェックしてるようなモノだと動かないが、 fdisk はそんなことしてなかったはずなので、ふつーに標準入力からつっこめばよし。
489 名前:login:Penguin mailto:sage [2008/09/27(土) 00:45:11 ID:9WMmgXah] ゴミ箱スクリプト使ってるひといる?
490 名前:login:Penguin mailto:sage [2008/09/27(土) 01:12:09 ID:s/QKRkEt] あい。
491 名前:login:Penguin mailto:sage [2008/09/28(日) 03:42:58 ID:yjLf4XT+] ゴミ箱に入ってるファイルを復元させるやつなら使ってる
492 名前:login:Penguin mailto:sage [2008/09/29(月) 04:13:28 ID:nMbRNXLX] ティルダ(~)展開について質問。 #!/bin/bash ls ~/ directory="~/" ls $directory 上側のように直接書いたものは展開されますが、下側のように変数に入れたものは展開されません。 変数に入った「~」を展開するにはどうすればいいのでしょうか。
493 名前:login:Penguin mailto:sage [2008/09/29(月) 04:17:44 ID:dNtmh/2+] directory=~/
494 名前:492 mailto:sage [2008/09/29(月) 08:48:30 ID:dqlgrzbc] うわ、そんなことだったのか。ありがとうございます。 では、read directory; などでファイルから読んだ場合はどうすればいいんでしょう。
495 名前:492 mailto:sage [2008/09/29(月) 10:56:52 ID:dqlgrzbc] あ、わかりました。eval 使えばいいんですね。 ファイルからティルダ(チルダ)含んだパスを読み込むことなんかよくあると思うんだけど、 そういったシチュエーションでの展開は解説されてませんねえ。 基本的な展開の話ばかりで。
496 名前:login:Penguin mailto:sage [2008/09/29(月) 11:06:17 ID:6KBzfDQe] eval って書こうとしたら自己解決してたか。 >ファイルからティルダ(チルダ)含んだパスを読み込むこと 俺は経験無いけど、良くあることなの?
497 名前:login:Penguin mailto:sage [2008/09/29(月) 12:14:07 ID:PrjYZQYT] > 俺は経験無いけど、良くあることなの? んー、俺もそもそもスクリプトはあんまり書かないんだけど、 ちょっと今回必要があって、とあるファイルにつらつらと書かれたパスに対して 順番に処理かけていくスクリプトを組んだ。 よくあるかと思ったのは単なる想像。使ったスクリプトが悪かったかな?
498 名前:login:Penguin mailto:sage [2008/09/29(月) 12:15:02 ID:PrjYZQYT] アレ、ID 変わってる。 >>495 です。
499 名前:login:Penguin mailto:sage [2008/09/29(月) 13:09:37 ID:M1tw2hRO] むしろ勝手に解釈されたら困ることの方が多そう。
500 名前:login:Penguin mailto:sage [2008/09/29(月) 17:00:59 ID:DE65cKXI] $HOMEの方がいいと思う
501 名前:login:Penguin mailto:sage [2008/10/14(火) 23:13:02 ID:IUh0ZsYq] 16進数がずらーっと並んでいるテキストファイルを手で入力しています。 手入力なのでうっかり16進数の[0-9a-f]以外の文字がはいってしまうこと があるのですが、「このファイルには[0-9a-f]以外がはいってる」ということ を検出するいい方法はないでしょうか。
502 名前:login:Penguin mailto:sage [2008/10/14(火) 23:18:11 ID:peqExbxa] とりあえず grep -v '[0-9a-f]' みたいな
503 名前:login:Penguin [2008/10/14(火) 23:55:57 ID:VVRxoluk] >>501 なつかしい作業だね。 いまどき、そんな事やるひつようあるの?
504 名前:login:Penguin mailto:sage [2008/10/15(水) 01:23:45 ID:oM4m5G9h] >>502 試してから書けよ。 $ echo 00 | grep -v '[0-9a-f]' $ echo 0x | grep -v '[0-9a-f]'
505 名前:login:Penguin mailto:sage [2008/10/15(水) 01:26:34 ID:YCs9R2r/] grep '[^0-9a-f]' ですね、失礼しました
506 名前:login:Penguin mailto:sage [2008/10/15(水) 01:34:48 ID:IbpEXu/h] [ x"$hoge" = "x" ]というようなのをたまに見かけるんだけど [ "$hoge" = "" ]となにがちがうの?
507 名前:login:Penguin mailto:sage [2008/10/15(水) 01:46:00 ID:Z5rHmxLW] >>506 - で始まる文字列返されると困るから。
508 名前:login:Penguin mailto:sage [2008/10/15(水) 02:11:39 ID:IbpEXu/h] なるほど、どうも
509 名前:login:Penguin mailto:sage [2008/10/15(水) 21:42:29 ID:bOOa1s77] >>502-505 ありがとう。シンプルでそれでよかったんだね。なんか考えすぎてたらしい。 >>503 大昔のパソコン雑誌を押入れから発掘したんです。 そこにあったのは16進ダンプファイルで掲載されていたゲーム・・・。 そして、入力して動かそうとしてあーだこーだやっているうちに 「16進数テキストファイルの処理」が目的になってるという状態w
510 名前:login:Penguin mailto:sage [2008/10/16(木) 08:22:19 ID:tCBPvnpY] シェルの操作とかってそうやって覚えるもんだよねー 懐かしさに惹かれておいらも引っ張り出してみようかしら
511 名前:login:Penguin [2008/10/17(金) 01:32:36 ID:6ubwN3MV] >>>503 >大昔のパソコン雑誌を押入れから発掘したんです。 >そこにあったのは16進ダンプファイルで掲載されていたゲーム >・・・。 やっぱりw なつかしすぎる。てか、bit数が違うから動かない予感
512 名前:login:Penguin mailto:sage [2008/10/17(金) 11:08:59 ID:4pVt9n9N] 携帯やデジカメでダンプリストを取り込んでocrソフトでテキスト化 エディタで編集修正したものをデバッガへ食わせるなんてスレ違い
513 名前:login:Penguin [2008/10/22(水) 20:50:34 ID:VC8ljHmq] $ cat love.sh what=LOVE echo "ALL YOU NEED IS $what" というファイルを改変することなく、2行目のecho文で "ALL YOU NEED IS CASH" と出力することは可能だろうか? $ cat cash.sh declare -r what=CASH source ./love.sh というのを考えてみたが実現できなかった。
514 名前:login:Penguin mailto:sage [2008/10/22(水) 21:16:44 ID:l3U9XvVs] $ sed s/LOVE/CASH/ love.sh | sh これだと改変になる?
515 名前:login:Penguin mailto:sage [2008/10/22(水) 22:28:26 ID:VC8ljHmq] あーなるほど。いただきます。
516 名前:login:Penguin mailto:sage [2008/10/22(水) 23:35:12 ID:xR/eB2K4] what=MONEY;echo '#'`cat a.sh` | sh
517 名前:login:Penguin mailto:sage [2008/10/23(木) 19:09:43 ID:+CTFy1at] 質問なんですが、atコマンドなどのログを取得して 特定のディレクトリーに吐き出すスクリプトを作成したいと思っています。 しかし、PHPやCなどはかなり触っているのでわかるのですが シェルスクリプトは全くの初心者のため、どのようにしたらいいのか見当がつきません。 簡単な例でけっこうですので、教えていただけないでしょうか。 サーバー:CentOS5.2
518 名前:login:Penguin mailto:sage [2008/10/23(木) 19:41:07 ID:ueeORYHp] え、丸投げ!?
519 名前:login:Penguin mailto:sage [2008/10/23(木) 20:18:32 ID:y4uaRh/4] Cで書きゃええではないか。
520 名前:login:Penguin mailto:sage [2008/10/24(金) 10:02:49 ID:2zYy9Dkj] >簡単な例でけっこうですので grep 'atコマンドなど' /var/log/messages > /tmp/hoge
521 名前:login:Penguin [2008/10/24(金) 20:25:05 ID:14T+pOpU] >>517 /etc/syslog.conf とか? 外してたらごめん
522 名前:login:Penguin mailto:sage [2008/11/02(日) 21:57:45 ID:AykxzKW2] シェルスクリプト関連の本って今では結構いろいろ出てるけど、どれがいいんだろう? シェルって何?って人に最適な本もあるだろうし、実務でスクリプトを書く人に最適な本もあるはず。
523 名前:login:Penguin mailto:sage [2008/11/02(日) 22:12:17 ID:XwJU1nJV] >>522 Advanced Bash-Scripting Guide tldp.org/LDP/abs/html/
524 名前:login:Penguin mailto:sage [2008/11/02(日) 22:51:26 ID:AykxzKW2] >>523 な、なにこれスゲー。今悩んでる問題が二つ解消した。たった数分読んだだけで。
525 名前:login:Penguin mailto:sage [2008/11/03(月) 00:18:52 ID:iKa/7Y2g] その2つを語ってみたまい。 「そんなことで悩んでいたのかクソ馬鹿」と罵倒してあげるから。 …いえ、ウソです。
526 名前:login:Penguin mailto:sage [2008/11/03(月) 01:46:09 ID:jQDIWjiF] 板違いだったらごめんなさい なぜ find には -exec があるんですか?パイプ では駄目?
527 名前:login:Penguin mailto:sage [2008/11/03(月) 02:48:26 ID:bJlJMSV4] #スレ違いと思うけど、それは置いて。 findに-print0が無かった頃、 find ... -print | xargs rm としたら思わぬ結果になり、 find ... -exec rm {}\; と習慣づけるようにしたような、淡い記憶がある。 記憶違いかもしれないけれど。
528 名前:login:Penguin mailto:sage [2008/11/03(月) 11:40:47 ID:+Mz0PYlF] >>526 一個一個に対してコマンドを実行したいとき。 whileとreadで回すほどでもないときに使う。 xargsはなんかそんな気分の時に使う。
529 名前:login:Penguin mailto:sage [2008/11/04(火) 00:03:44 ID:28eBvx3Z] xargs rm だと一個一個消す訳じゃないらしいけど その理屈がようわからん どうやってんの?
530 名前:login:Penguin mailto:sage [2008/11/04(火) 01:51:16 ID:lE3PYV5Z] x68000.q-e-d.net/~68user/unix/pickup?xargs
531 名前:login:Penguin mailto:sage [2008/11/04(火) 06:42:20 ID:n6LEGgbQ] >>529 xargsの場合 rm a b c d -execの場合 rm a rm b rm c rm d
532 名前:login:Penguin mailto:sage [2008/11/04(火) 18:22:21 ID:IOim9jxY] だから、findでは -delete 使うか、末尾を\+にする。
533 名前:login:Penguin mailto:sage [2008/11/04(火) 20:33:27 ID:gko7k3GT] 「だから」って… 「findに-print0が無かった頃」と予めことわっているのに、 やはり無かった"-delete"とかを持ち出されても。
534 名前:login:Penguin mailto:sage [2008/11/04(火) 21:23:41 ID:W3AqIadF] -deleteなんてあったんだorz。 使い古したコマンドでも時々manを見るべきだな。
535 名前:login:Penguin [2008/11/08(土) 01:22:38 ID:/AB41I5S] どなたかご教授ください。 以下のような形式のログファイル(test.log)の処理を行っています。 # cat test.log 日付 ・・・・必要な情報@・・・・・・・必要な情報A・・・・・・・・・ 日付 ・・・・・・・・・・必要な情報@・・・・・・・・必要な情報A・・・・・ ※「・・・」には、ログのその他、不要な情報が入っています。 このtest.logの中で、1,2行目の必要な情報@と必要な情報Aのみを 抜き出して、別ファイルに保存したいです。 ■保存したい例 必要な情報@ 必要な情報A 必要な情報@ 必要な情報A awkを使おうと思ってたのですが、必要な情報の列(位置)が、 ログの行によって、まちまちでawkで処理する事が出来ません。 この「必要な情報」については、目印となる文字列が含まれているのですが、 grepのようなコマンドで、検索キーワードが含まれる行を抜き出すのではなく、 検索キーワードの該当する文字列そのものを抜き出すような方法は無いでしょうか。 分かりにくい説明で申し訳ありません。アドバイス頂ければと思います。 bashが良いのですが、他のシェルでも方法がありましたら、ご教授ください。
536 名前:login:Penguin mailto:sage [2008/11/08(土) 02:20:54 ID:Sn/dZhVJ] ^[^キーワード]*,と,[*キーワード]*$ をsedとかで消しちゃえばいいんじゃない?
537 名前:login:Penguin mailto:sage [2008/11/08(土) 08:26:09 ID:spq9OVhg] 「・・・」と略されたら、必要な情報と不要な情報の区切が解らへん。
538 名前:login:Penguin mailto:sage [2008/11/08(土) 10:43:36 ID:QmgRkUw9] awk を使うのなら、たとえば、こういうデータに対して aaa word1 bbb word2 ccc ddd word3 eee word4 fff zzz yyy xxx word5 ggg hhh iii #!/usr/bin/awk -f { line = "" for (i = 1; i<=NF; i++) { if ($i ~ /word/) { line = line "\t" $i } } sub(/^\t/, "", line) if (line != ""){ print line } } というのはどう? 改良の余地は大いにあると思うけれど。
539 名前:login:Penguin [2008/11/09(日) 00:42:41 ID:+8LPtwQh] bashでの配列について教えてください ファイルの内容を1行づつ読み込んで、変数に格納するには どうすれば良いでしょうか。
540 名前:login:Penguin mailto:sage [2008/11/09(日) 00:53:45 ID:WldBda9P] つ while read i; do echo $i; done < file つ IFS=' ' FILE=(`cat /etc/passwd`) echo ${FILE[21]}
541 名前:login:Penguin [2008/11/09(日) 01:04:17 ID:+8LPtwQh] >>540 ありがとうございました! こちらのほう、使わせて頂きます。 FILE=(`cat /etc/passwd`) echo ${FILE[21]}
542 名前:login:Penguin mailto:sage [2008/11/10(月) 00:15:54 ID:ZSdeBKA2] read
543 名前:login:Penguin mailto:sage [2008/11/10(月) 00:35:00 ID:KJ/5CLnz] 複数ディレクトリにある重複して存在してるファイルをリストアップしたいんですけど (同じ名前とは限らない) find dirA dirB dirC -exec cksum {} \; でチェックサムを出したところまではいいんだけど この値が一致してたらリスト出力するってのはどうすればいいでしょう?
544 名前:login:Penguin mailto:sage [2008/11/10(月) 07:43:00 ID:J2OShanR] 一致行の出力でよければ、 $ find ... | sort | uniq -OPTION 何かオプションが要るような気がするので、uniq(1)を見て。
545 名前:login:Penguin mailto:sage [2008/11/10(月) 12:58:27 ID:25jIkch2] >>535 awkでできないことなんかないよw 処理速度はきついが 普通に 【必要な情報】で検索すればいいだろ?列なんか関係なしに。
546 名前:login:Penguin mailto:sage [2008/11/10(月) 19:22:12 ID:zHbtNtaX] >>543 なんかいまいち find "$@" -type f -exec cksum \{\} \; | sort -k 1,2 | \ awk '{ if (c == $1 && s == $2) { print l, $0; l = ""; } else { c = $1; s = $2; l = $0 "\n" } }'
547 名前:login:Penguin mailto:sage [2008/11/10(月) 19:28:01 ID:K/Z638b2] 前スレの683-に出てたので参考までに
548 名前:login:Penguin [2008/11/10(月) 20:17:51 ID:TV5/2e6C] >>535 sed 正規表現 置換 パターンマッチ(\1 \2とか) ?
549 名前:login:Penguin [2008/11/10(月) 20:21:36 ID:TV5/2e6C] >>543 uniqは-wと-dが肝 あとfindには-type fも
550 名前:login:Penguin mailto:sage [2008/11/11(火) 00:28:16 ID:aoTr0xeG] 重複ファイルのリストアップ、まだやってたのか。 ほれ。 つ find a b -type f | xargs md5sum | sort | uniq -D -w 32
551 名前:login:Penguin mailto:sage [2008/11/11(火) 08:00:53 ID:bvC0wffI] いや、もうやっていない。10日が〆切だった。残念。
552 名前:login:Penguin mailto:sage [2008/11/11(火) 21:21:58 ID:sJWsKHcQ] 出力結果をテキストに書き出す時、複数行あるものを一行にまとめるにはどうすればいいですか?
553 名前:login:Penguin mailto:sage [2008/11/11(火) 21:25:37 ID:Skn7DdSq] >>552 改行を削除する
554 名前:login:Penguin mailto:sage [2008/11/11(火) 21:44:28 ID:sJWsKHcQ] 削除のためのコマンドが知りたいです。 trで改行を空白に置き換えるのはダメでした。
555 名前:login:Penguin mailto:sage [2008/11/11(火) 21:44:56 ID:CoD3HoI5] 個人的によくやるのは、 command | gawk '{printf("%s",$0)}'
556 名前:login:Penguin mailto:sage [2008/11/11(火) 22:05:38 ID:mJ48vZc0] tr -d じゃダメなの?
557 名前:login:Penguin mailto:sage [2008/11/11(火) 22:05:59 ID:sJWsKHcQ] ありがとうございます 試してみます
558 名前:login:Penguin mailto:sage [2008/11/11(火) 23:38:49 ID:et4tOJwy] cat hoge | tr -d "\n" > piyo こんなんで どうでしょうか
559 名前:login:Penguin mailto:sage [2008/11/12(水) 00:24:39 ID:xwzZIHRk] linuxのcrontab なスレが見つからなかったのでここで質問させてください Debian なのですが、 例えば 午前8時から18時まで20分おきにあるスクリプト(get-data.sh)を起動したいのですが /etc/cron.d/get-data.sh を用意して、 */20 8-18 * * * oreore /usr/local/get-data.sh というエントリを登録したのですが、実行されません。 */20 * * * * oreore /usr/local/get-data.sh だと20分おきに実行されます。 前者の記述はどこがおかしくて実行されないんでしょうか?
560 名前:login:Penguin mailto:sage [2008/11/12(水) 00:39:11 ID:eUoTfImJ] 記述はあってるけど、get-data.sh ってほんとはどこにおいてるの?
561 名前:login:Penguin mailto:sage [2008/11/12(水) 00:54:56 ID:81ljxwzq] >>559 レンジ指定を時と分で両方やるってかち合っちゃうんじゃないかな? 恐らく 0,20,40 8-18 * * * oreore /usr/loca/get-data.sh は出来るはず。
562 名前:login:Penguin mailto:sage [2008/11/22(土) 15:37:29 ID:qj5ispiW] cygwin環境なんですが P=00010001 Q=`expr length $P` R=`echo "32-$Q"|bc -l` for i in `seq $R` do P="0"`echo $P` done echo $P 不細工ですが、二進数の桁をそろえるスクリプトを書こうとしています 実行したところ、seq: invalid floating point argynebt 24 というエラーが出てしまいます bcの計算結果が整数として代入されず、seqの引数として不適当という事じゃないかな、と考えてるのですが じゃあどうしたらいいのか?とmanを読んでもさっぱり解りません どなたか教えてください
563 名前:login:Penguin mailto:sage [2008/11/22(土) 15:47:57 ID:XCvIqY7p] >>562 cygwin 使ってないから外してるかもしれんけど、 > R=`echo "32-$Q"|bc -l` > > for i in `seq $R` > 実行したところ、seq: invalid floating point argynebt 24 というエラーが出てしまいます $R に変な改行コードまで入ってるんじゃないの?
564 名前:login:Penguin mailto:sage [2008/11/22(土) 17:33:09 ID:8Embcy7k] 質問から外れるが、わしなら、 perl -e 'printf("%032b\n", 0b10001 )' とかで済ましてしまう気がする。
565 名前:login:Penguin [2008/11/22(土) 17:36:52 ID:lvsMYtv2] >>562 こっちのLinuxやCygwinは正常に実行できるよ ただ双方の環境とも $ seq "24 " って末尾にスペースくっつけてやると seq: invalid floating point argument: 24 ってなるよ もしかして後ろに何かくっついてる? # 敢えてロジック書くのは、勉強の為のシェルスクリプトかな
566 名前:login:Penguin mailto:sage [2008/11/22(土) 18:38:22 ID:qj5ispiW] >>563 >>562 試行錯誤しているうちに実行できました >$ seq "24 " >って末尾にスペースくっつけてやると ご指摘の通り、やはり余計な文字が入っていたのが原因のようでした よく解らないのですが、バッククォート部分にスペースが入り込んでいたのが悪かったかな…? >>565 >>564 >質問から外れるが ># 敢えてロジック書くのは、勉強の為のシェルスクリプトかな 一応目的があってやっていることなのですが、いちいち調べて勉強しないことには 前に進めない状態です… 正直調べる事に疲れてしまって、目的を遂げられるならもう何でもいいのですが…
567 名前:login:Penguin mailto:sage [2008/11/22(土) 18:39:59 ID:qj5ispiW] 肝心のお礼を忘れてしまいました >>563->>565 ありがとうございました これで何とか一歩前進です
568 名前:login:Penguin mailto:sage [2008/11/23(日) 01:16:33 ID:ahm0Z7lP] Cygwin は Linux じゃねーよ。
569 名前:login:Penguin [2008/11/24(月) 11:45:40 ID:qXSmazjs] echoでシングルコートで囲まれた文字列の中に、シングルコートとダブルコートを含ませた文字列を指定したいんだが、 以下のようになってしまう。 $ echo 'hello'"hello' > エスケープしてもだめだったんだが、どうすればいいんでしょうか?
570 名前:login:Penguin mailto:sage [2008/11/24(月) 11:48:58 ID:Ut9dLgFH] $ echo "hello'\"hello" hello'"hello
571 名前:login:Penguin mailto:sage [2008/11/24(月) 12:27:14 ID:lGu01kSy] 悪のりしたる。 $ echo 'hello\047\042hello' hello'"hello
572 名前:>>569 [2008/11/24(月) 14:10:49 ID:qXSmazjs] >>570 ありがとう! ちなみに、あえてシングルコートで文字列を囲みたい場合は、どうすればいいんですか? やっぱできませんかねぇ、、、
573 名前:login:Penguin mailto:sage [2008/11/24(月) 14:11:33 ID:O/sQuX/l] >>569 ダブルクオートを閉じてないから,続きの入力を求められてる。 シングルクオートの中ではエスケープできないから, シングルクオートを表示したかったら,ダブルクオートで囲むしかないね。
574 名前:login:Penguin [2008/11/24(月) 14:16:50 ID:qXSmazjs] >>573 へー、ためになります。
575 名前:login:Penguin mailto:sage [2008/11/24(月) 14:42:30 ID:UgOcYWXS] >>572 こうゆうことか? $ echo 'hello'\''"hello' hello'"hello
576 名前:login:Penguin mailto:sage [2008/11/24(月) 15:29:36 ID:WL2QfG05] >>575 シングルクォートの外じゃん。
577 名前:login:Penguin [2008/11/25(火) 01:20:38 ID:r0vzabBk] ログのディレクトリを消去したいと思うのですが、 rm -rf /var/hoge/log/* とすると/bin/rm Argument list too longと出てしまって消せません。 どうやったら 消せるでしょう? サブディレクトリもあります。
578 名前:login:Penguin mailto:sage [2008/11/25(火) 01:46:29 ID:xvFoqJfe] >>577 rm -rf /var/hoge/log mkdir /var/hoge/log /var/hoge/log/.moge は残したい、って場合はこれじゃだめだけど。
579 名前:login:Penguin mailto:sage [2008/11/25(火) 02:30:00 ID:qwKBFJS7] いや普通に考えたら find /var/hoge -exec rm {} \; とか find /var/hoge | xargs rm だろ?
580 名前:login:Penguin mailto:sage [2008/11/25(火) 02:34:44 ID:WFFUc0FW] for i in /var/hoge/log/*;do rm -rf $i;done じゃなくて?
581 名前:login:Penguin mailto:sage [2008/11/25(火) 02:36:41 ID:qwKBFJS7] >>580 ファイル多すぎて*展開できなくてエラーになってんだから無理じゃね?
582 名前:login:Penguin mailto:sage [2008/11/25(火) 02:39:23 ID:gfINAer7] >>577 echo /var/hoge/log/* | xargs rm -rf >>579 find 使うなら maxdepth とか使わないと無駄に処理が増えると思う。
583 名前:login:Penguin mailto:sage [2008/11/25(火) 02:53:59 ID:qwKBFJS7] >>582 いやだからファイル多すぎて*展開できないからエラーなんだろ? echoにも渡せないと思うんだけど・・・ 気のせいだったらすまんけど
584 名前:login:Penguin mailto:sage [2008/11/25(火) 02:57:22 ID:WFFUc0FW] シェルが*を展開するところまではできてるでしょ。 その結果をシェルからまとめて渡されたrmがエラー吐いてる訳で >/bin/rm Argument list too long
585 名前:login:Penguin mailto:sage [2008/11/25(火) 03:09:26 ID:qwKBFJS7] ああ確かにその通り echoの引数はARG_MAX超えても大丈夫?で、 xargsはrmに渡すときに調整?してくれるからこれが一番軽いと・・ 覚えときます
586 名前:login:Penguin mailto:sage [2008/11/25(火) 03:10:33 ID:gfINAer7] >>580 以前、くだ質にも同じこと書いた気がするけど rm を for 文の外に出して for i in AAAA/* ; do echo $i ; done | xargs rm -rf とかやった方が早いよ。 # 速度なんか気にしてないってのならスルーしてくれ。
587 名前:577 mailto:sage [2008/11/25(火) 04:35:06 ID:r0vzabBk] 色々提案ありがとうございます。 勉強になりました。 特に*はシェルには展開されている けどコマンドで弾かれているという認識は参考になります。 さて、最終的に採用したいと 思いますのは>>578 さんの rm -rf /var/hoge/log mkdir /var/hoge/log です。 これが圧倒的に早い。 1万個の空ファイルを削除するのに>>586 ですと 2.9秒ほどかかったのですが、>>578 ですと0.5秒ぐらいで終わっちゃいます。 やはり1つのバイナリの中で完結してしまうのは強いですね。 ありがとうございました。
588 名前:login:Penguin mailto:sage [2008/11/25(火) 07:54:57 ID:xvFoqJfe] find とか xargs の構文を忘れてても >>578 ならすぐ実行できるし。 もっと早く /var/hoge/log/ の使用を再開したいなら↓で。 mv /var/hoge/log /var/hoge/log.old mkdir /var/hoge/log rm -rf /var/hoge/log.old &
589 名前:login:Penguin mailto:sage [2008/11/25(火) 08:52:27 ID:6LjfCVVr] >>586 はまとめてrmに渡してるから同じエラーになんじゃないの?
590 名前:login:Penguin mailto:sage [2008/11/25(火) 11:08:32 ID:DFgMW53d] >>589 xargs使ってるから平気だよ
591 名前:login:Penguin [2008/11/25(火) 17:00:27 ID:JcNYShCy] 失礼します。シェルスクリプト作成がてんでわからないのでどなたか教えて下さい。 作るものは以下のものです。 1:引数に複数の整数を与えたときに、それらの和を計算するシェルスクリプトの作成。 具体的には $ ./sum.sh 1 2 3 4 5 15 のようになるシェルスクリプト 2:現在の時刻に応じて Good morning / Hello / Good evening / Good night のどれかを表示するシェルスクリプト (例えば、5:00〜11:00であればGood morningと表示) その際、引数として名前が入力されればその名前を、引数が 入力されなければ“sir”を付け加えて表示させる。 具体的には $ ./hello.sh Taro Hello, Taro. $ ./hello.sh Good morning, sir. となるシェルスクリプト どなたか宜しくお願いします。
592 名前:login:Penguin mailto:sage [2008/11/25(火) 17:03:09 ID:xvFoqJfe] >>591 来年は授業ちゃんと聞こうな。
593 名前:login:Penguin mailto:sage [2008/11/25(火) 17:04:41 ID:v/fLv6x4] 宿題丸投げとか、頭緩すぎるだろ
594 名前:login:Penguin mailto:sage [2008/11/25(火) 17:14:14 ID:D5OL3C0Q] >>591 同じところだwww 講師は2chを監視しているから注意な
595 名前:login:Penguin mailto:sage [2008/11/25(火) 17:44:18 ID:MTxeuCTC] #!/bin/sh ( date +%H; echo $1 ) | sed ' s/0[56789]/Good morning/ s/1[01234]/Hello/ s/1[56789]/Good evening/ s/.*/Good night/ N s/\n$/\nsir/ s/\n\(.*\)/, \1./ ' 足し算ってどうすんだ
596 名前:login:Penguin mailto:sage [2008/11/25(火) 17:56:31 ID:DFgMW53d] 宿題かよw shスクリプト 足し算 でググれば一発だろw
597 名前:login:Penguin mailto:sage [2008/11/25(火) 18:10:21 ID:MTxeuCTC] 一発だった^^ #!/bin/sh for i in "$@"; do echo $i; done | sed ' 1 {h; s/.*/hgfedcba/; x} H; g :a s/9$/aaaaaaaaa/; s/8$/aaaaaaaa/; s/7$/aaaaaaa/; s/6$/aaaaaa/ s/5$/aaaaa/; s/4$/aaaa/; s/3$/aaa/; s/2$/aa/; s/1$/a/; s/0$// s/\(aa*[^a]*\)\(a*\)/\2\1/ s/a\{11\}/ba/ y/hgfedcba/gfedcbah/ /^h/!ba; s/.$//; h; $!d s/\([a-z]\)\1\1\1\1\1\1\1\1\1/9/g; s/\([a-z]\)\1\1\1\1\1\1\1\1/8/g s/\([a-z]\)\1\1\1\1\1\1\1/7/g; s/\([a-z]\)\1\1\1\1\1\1/6/g s/\([a-z]\)\1\1\1\1\1/5/g; s/\([a-z]\)\1\1\1\1/4/g; s/\([a-z]\)\1\1\1/3/g s/\([a-z]\)\1\1/2/g; s/\([a-z]\)\1/1/g; s/\([a-z]\)/0/g s/^0*\(.\)/\1/ '
598 名前:login:Penguin mailto:sage [2008/11/25(火) 18:14:44 ID:DFgMW53d] >>597 sed好きなの? 一応、>>596 は >>591 に対して言ったつもりだからね^^
599 名前:login:Penguin mailto:sage [2008/11/25(火) 20:44:14 ID:b3v2wMU+] 普通はexprとかletなんだろうな あとはbcに渡しちゃうとか。 bashならこんな書き方もできるけどあまり使わないな。 $hoge=$[$1 + $2 + $3 + $4 + $5]
600 名前:login:Penguin mailto:sage [2008/11/25(火) 21:27:49 ID:Q3bl66bL] >>599 これははじめてみたなぁ $(())といいこれといい、演算機能つけるなら普通に $hoge=$1+$2+$3+$4+$5 みたいな書き方許してくれもいいのにね
601 名前:login:Penguin mailto:sage [2008/11/25(火) 22:33:31 ID:MTxeuCTC] $(( $1 + $2 )) はPOSIX shellの範囲にあるけど $[ $1 + $2 ] はbash拡張(しかもdeprecated)だ。letもPOSIXにない。
602 名前:login:Penguin mailto:sage [2008/11/25(火) 22:49:51 ID:+1wUZzkP] >>599-601 単なる宿題の手伝い、つまんね。sed狂の人ぐらいヒネってちょ。
603 名前:login:Penguin mailto:sage [2008/11/26(水) 01:23:56 ID:XqTaeM1U] $(( $1 + $2 )) これってできるんだ? $((hoge + hogehoge)) みたいな書き方しかできないと思い込んでた
604 名前:login:Penguin mailto:sage [2008/11/26(水) 16:54:19 ID:fRJ0bu/c] >>602 題意を満たしながらも難解で意味不明で実用性皆無なスクリプトを書くのも楽しいな。 #!/bin/sh echo $@`shift;echo -e \\\t|expand -t$#|tr \ +`p|dc とか。
605 名前:login:Penguin mailto:sage [2008/11/27(木) 12:25:07 ID:nbCEJRVf] 引数不定で最短なら (IFS=+;echo "$*")|bc とかどうだろう
606 名前:login:Penguin mailto:sage [2008/11/27(木) 13:28:41 ID:u0PIuWVz] >>604 シェルスクリプトにバイナリ埋め込んどくとかな。 …よく考えたら、これは悪どいな。 実行するまで何が起こるか判らないし、自分が生徒からこんなの 送りつけられたら無条件で○をあげてしまいそうだ。
607 名前:login:Penguin mailto:sage [2008/11/27(木) 17:14:51 ID:Rh4WMeZa] $ echo "#!/bin/bash" > hoge とすると bash: !/bin/bash": event not found とエラーになります。 $ echo "#\!/bin/bash" > hoge と ! をエスケープしたつもりでも $ cat hoge #\!/bin/bash と \ が余分に付いてしまいます。 !を上手くエスケープするにはどうしたら良いでしょうか?
608 名前:login:Penguin mailto:sage [2008/11/27(木) 17:30:00 ID:L8oSt/LM] よくわからないから '#!/bin/bash'
609 名前:login:Penguin [2008/11/27(木) 19:33:56 ID:JHgCmyIe] >>607 $ echo "#!/bin/bash" の解釈↓ $ man bash イベント指示子 (Event Designator) !string string で始まるコマンドのうち、一番現在に近いところで実行したものを参照します。
610 名前:607 mailto:sage [2008/11/28(金) 20:18:54 ID:yC0octAN] >>608 >>609 ダブルクォート内では ! のエスケープはできないようですね。 シングルクォートで囲むことにします。 ありがとうございました。
611 名前:login:Penguin mailto:sage [2008/12/07(日) 04:03:19 ID:wQWU7SKF] 厳密にはexpectの質問なので、スレ違いだはと思うのですが… 1 #!/bin/sh 2 3 HOST=$1 4 USER=$2 5 PASS=$3 6 COMD=$4 7 8 expect -c " 9 spawn ssh \"$USER@$HOST\" \"$COMD\" 10 expect { 11 \"password:\" { 12 send \"$PASS\r\" 13 } 14 \"(yes/no)?\" { 15 send \"yes\r\" 16 exp_continue 17 } 18 } 19 expect 20 " 21 echo $? 9行目でspawnしたsshの戻り値を得たいのですが、どうしたら良いでしょうか? 上記だと、当然ですが、21行目で表示されるのは8行目のexpectの戻り値になります。 あt、19行目のexpectが無いと動かないのですが、そんな物なんでしょうか?
612 名前:login:Penguin mailto:sage [2008/12/09(火) 09:16:00 ID:73r9bgNC] ssh-agent使った方が簡単。 1. exit statusはwaitを使って得て、exitでshellに引き渡してください。 2. 10行目のexpectで、パスワード、ホストキー以外の出力も食うようにする。
613 名前:login:Penguin mailto:sage [2008/12/13(土) 01:21:37 ID:jyj+RUH2] >>612 > 1. exit statusはwaitを使って得て、exitでshellに引き渡してください。 これのやり方をもう少し具体的にお願いできませんか? manに以下の記述はあるんだけど、 wait は、通常 4 つの整数のリストを帰す。最初の整数は、終了を待ち構え ているプロセスの pid である。 2 つめの整数は、関連する spawn id であ る。 3 つめの整数は、オペレーティングシステムエラーがあれば -1、そう でなければ、0 である。 3 つめの整数が 0 であれば、4 つ め の 整 数 はspawn さ れたプロセスからのリターンコードである。3 つめの整数が -1 であれば、4 つめの整数はオペレーティングシステムによって設定さ れ た errno の値である。 この値をどうやって受け取るのかわからないのです。 tarballのexampleの中も見てみたけど、waitから値を受け取るような処理は無いようでした。
614 名前:login:Penguin mailto:sage [2008/12/13(土) 22:44:02 ID:b12qnNPM] #!/bin/sh echo '何かオモシロいスクリプトをうpして'
615 名前:login:Penguin mailto:sage [2008/12/13(土) 22:49:30 ID:4TqEVqdZ] >>614 sudo su -c ”yes ’\(^o^)/’ > /dev/sda” これやってから、ハードディスクを覗くと楽しいよ
616 名前:login:Penguin mailto:sage [2008/12/14(日) 03:10:56 ID:YLiph78l] >>615 新しいなwww
617 名前:login:Penguin mailto:sage [2008/12/14(日) 03:51:27 ID:07cIEQdu] yesなんてコマンド始めて知ったわ。 健全な使い道あるのか?と思ってググったら 同じ疑問持ってる人が一杯いた。 rpm -e yes じゃ削除できないし。 GNUはこんなコマンド標準装備するな
618 名前:login:Penguin mailto:sage [2008/12/14(日) 04:46:19 ID:x3iOnWd3] >>617 つ yes no | rm -i ... rm -iのトコはまともにバッチ実行させてくれない色々なクサレプログラムに 置き換えて使え。
619 名前:login:Penguin mailto:sage [2008/12/14(日) 09:43:49 ID:M7gNbgdV] 誰のせいでもありゃしない みんなGNUが悪いのさ と「悲しき願い」の節で浮かんだ。 "yes"コマンドの責めまで負わせられるとはGNUも気の毒に。
620 名前:login:Penguin mailto:sage [2008/12/14(日) 09:45:30 ID:h0ChkGK1] ベースシステム=GNUなんだろうな。 だからGUI厨は・・・
621 名前:login:Penguin mailto:sage [2008/12/14(日) 10:27:04 ID:v1K8r+s5] >>613 > この値をどうやって受け取るのかわからないのです。 返すから受け取れ。
622 名前:615 mailto:sage [2008/12/14(日) 10:56:04 ID:qZcnFZNK] >>617 例えば、テキストインストーラーで、ずっと Enter でデフォルトのまま流したい場合、 例えば、vmware-config.pl とか、 $ yes | sed 's/y//' | vmware-config.pl とすると、自動インストールができるよ。 yes で有り難みを感じたのってこれくらいかな。
623 名前:login:Penguin mailto:sage [2008/12/14(日) 11:28:15 ID:v1K8r+s5] $ yes "" | apt-get install 〜 で、コンフィグファイルをパッケージの物で上書き
624 名前:login:Penguin mailto:sage [2008/12/14(日) 18:19:59 ID:vb4UhgIp] yes >/dev/null としてCPU負荷が高い状態を簡単に作り出せる
625 名前:login:Penguin mailto:sage [2008/12/14(日) 19:12:16 ID:FrsrwlIw] >>624 ああ、これは良い方法を教えて貰った。
626 名前:login:Penguin mailto:sage [2008/12/14(日) 21:39:45 ID:qZcnFZNK] yes も色々使い方があるもんだな。 今日はとても勉強になった。良スレだ。
627 名前:login:Penguin mailto:sage [2008/12/14(日) 21:43:23 ID:ntvk42pK] yes we can
628 名前:login:Penguin mailto:sage [2008/12/15(月) 00:30:34 ID:z26qt3ci] command && echo true || echo false これって if command ; then echo true ; else echo false ; fi これと同じ意味ですか? やってみると同じなんだけど 上のやつはcommandの戻り値を||のところで取れてるのが納得がいかないんですが
629 名前:login:Penguin mailto:sage [2008/12/15(月) 01:16:56 ID:JDbCwPLG] >>628 || は制御演算子だから。詳しくはman bash
630 名前:login:Penguin mailto:sage [2008/12/15(月) 01:33:20 ID:SVRwhtMn] >>628 Cと一緒やん。 ショートカット倫理演算って奴。
631 名前:login:Penguin mailto:sage [2008/12/15(月) 01:38:22 ID:qGdHBZUC] echo true のところが偽になったらまずい
632 名前:login:Penguin mailto:sage [2008/12/15(月) 11:03:10 ID:furyu78m] >>621 どうやら、Tclの知識が全く足りてなかったようでした。 set wait_ret [wait] set exit_st [lindex \$wait_ret 3] exit \$exit_st こんな感じで行けました。
633 名前:login:Penguin mailto:sage [2008/12/15(月) 11:40:13 ID:+qLfSAKJ] >>630 りんり?
634 名前:login:Penguin mailto:sage 違うか [2008/12/15(月) 14:34:12 ID:X1Zh6Thx] 倫理回路を知らんのか。 ギル博士の笛の音で制御されるんだぜ。
635 名前:login:Penguin mailto:sage [2008/12/15(月) 23:06:26 ID:yFzlGNM+] (>>634 or true) die;
636 名前:login:Penguin mailto:sage [2008/12/16(火) 05:24:51 ID:e+M4JPQL] 不完全な倫理回路は精神を抑止きれないのであった。
637 名前:login:Penguin mailto:sage [2008/12/16(火) 18:42:45 ID:JR7TYwVP] yesって何? まじでわからん。
638 名前:login:Penguin mailto:sage [2008/12/16(火) 18:45:24 ID:5tMU0aGB] >>637 man yes
639 名前:login:Penguin mailto:sage [2008/12/16(火) 20:22:10 ID:SAzVk+y/] >>637 yes man
640 名前:login:Penguin mailto:sage [2008/12/16(火) 22:17:36 ID:cBajdfGN] >>637 Siberian Khatru という名曲がありましての。 ttp://jp.youtube.com/watch?v=jpkkduTzR70
641 名前:login:Penguin mailto:sage [2008/12/17(水) 00:28:54 ID:nY30U6Zi] >>640 俺をギター弾きと知っての狼藉か。 なになに? コマンドなのか。 ちょと叩いてみよう。 $ yes っと わーーーーーーーーーーーーーーーーーーーーー!
642 名前:login:Penguin mailto:sage [2008/12/17(水) 00:41:20 ID:TMrKHF72] >>641 フいたwww
643 名前:login:Penguin mailto:sage [2008/12/17(水) 17:57:34 ID:Hofst7JZ] yes(1) yes(1) 名前 yes - kill されるまで文字列を繰り返して出力する 書式 yes [string...] yes [--help] [--version] 説明 yes はコマンドライン引数をスペースで区切って末尾に改行 (newline) を付加 し、 kill されるまで繰り返して表示する。引数が一つも与えられな い と 、 yes は ‘y’ に改行を付加したものを kill されるまで表示しつづける。
644 名前:login:Penguin mailto:sage [2008/12/17(水) 17:58:07 ID:Hofst7JZ] オプション GNU yes が引数一つだけで起動された場合には、以下のオプションが認識され る: --help 標準出力に使用方法のメッセージを出力して正常終了する。 オプション GNU yes が引数一つだけで起動された場合には、以下のオプションが認識され る: --help 標準出力に使用方法のメッセージを出力して正常終了する。 --version 標準出力にバージョン情報を出力して正常終了する。 注意 プログラムのバグについては bug-sh-utils@gnu.org に報告してください。 ペ ージの更新は Ragnar Hojland Espinosa <ragnar@ragnar-hojland.com> が行っ ています。 GNU Shell Utilities 2.1 18 June 2002 yes(1)
645 名前:login:Penguin mailto:sage [2008/12/17(水) 17:59:46 ID:Hofst7JZ] >>637 そんな君へこれを送ろう. sudo su -c ”yes ’\(^o^)/’ > /dev/sda”
646 名前:login:Penguin mailto:sage [2008/12/17(水) 18:04:23 ID:OCczPzah] >>643 なぜコピペ?
647 名前:login:Penguin mailto:sage [2008/12/17(水) 18:05:37 ID:cv0gYoNp] コピペじゃないやい 一生懸命整形したよ!
648 名前:login:Penguin mailto:sage [2008/12/17(水) 20:58:34 ID:QJhvpz4O] yes | cat -n
649 名前:login:Penguin mailto:sage [2008/12/17(水) 22:46:05 ID:nY30U6Zi] >>645 すみません。 リセットボタンを教えても起動しなくなりました。 なんつて
650 名前:login:Penguin mailto:sage [2008/12/20(土) 01:33:20 ID:6Sgnm3ob] >>649 > なんつて うん、こーゆーの、たのしーね。
651 名前: ◆Da4YWdyXjw [2008/12/21(日) 15:07:37 ID:hJtYLWzf] line 27: =/home/user1: No such file or directory こんなエラーが出るので、27行目を見てみると homedir="/home/${username}" たったこれだけ。cdとかmkdirとかしていないのに、ただ変数に代入しただけなのに このエラーはなんなの??
652 名前:login:Penguin mailto:sage [2008/12/21(日) 15:12:54 ID:YLiOEgKM] >>651 =の前に空白が入ってんじゃないの? a=bだったら、「bをaに代入する」になるけど、 a =bだったら、「aコマンドの引数に=bを渡す」になるぞ。
653 名前:login:Penguin [2008/12/21(日) 15:16:00 ID:hJtYLWzf] >>652 すまん、代入するとき変数名に$が入ってた。 他の言語からかじったもんでちょっと戸惑うわ。。
654 名前:login:Penguin mailto:sage [2008/12/21(日) 15:39:47 ID:YLiOEgKM] >>653 sh -x で実効すると、各行がどのように展開されるのかがわかる。 シェルスクリプトデバッグの基本。
655 名前:login:Penguin [2008/12/21(日) 15:44:29 ID:hJtYLWzf] >>654 まじサンクス
656 名前:login:Penguin mailto:sage [2008/12/25(木) 11:10:51 ID:fon1CsAn] >>654 マジサンクス
657 名前:login:Penguin mailto:sage [2008/12/25(木) 12:15:54 ID:moDMTMWz] マンスジクサ
658 名前:login:Penguin mailto:sage [2008/12/25(木) 14:44:55 ID:Dd8u5It4] てか知らんかったのけ?
659 名前:login:Penguin [2008/12/25(木) 14:58:41 ID:hn65XKo2] このスレって時間の流れが遅いのか? それとも過疎っているだけなのか。
660 名前:login:Penguin mailto:sage [2008/12/25(木) 19:17:43 ID:lvg0uyHv] >>654 知らなかった、これは便利そうですね
661 名前:login:Penguin mailto:sage [2008/12/25(木) 22:56:07 ID:lGWnJcnf] 他にかっこいいオプションないですか? -vは結構イカしてると思ってますよ
662 名前:login:Penguin mailto:sage [2008/12/26(金) 00:41:27 ID:W2RM7LsO] sh -nもイカしてる。 うっかり実行すると抜けられなくなる。
663 名前:login:Penguin mailto:sage [2008/12/26(金) 00:46:12 ID:K8BYEhlr] -nってmanに載ってないんだけど何が起こってるのこれ?
664 名前:login:Penguin [2008/12/26(金) 00:53:59 ID:3z8SP2D0] ん?みんなUnixいじった経験とかあるんか? 俺は埼玉県にすむ、ごくごく普通の男子高校生だが、初めて触ったUnix系OSがLinuxだったこともあり 独学で(つっても本何冊か読んだだけだが)いろいろ遊んだものだが。。 どうしたらそんなに詳しくなれるんだよ。仕事とかで使ってるんかおい!
665 名前:login:Penguin mailto:sage [2008/12/26(金) 01:11:34 ID:ivB4KFEt] >>661 -e エラーが発生したらそこで止まる。
666 名前:login:Penguin mailto:sage [2008/12/26(金) 02:52:13 ID:WW2wJ8bx] >>665 きゃー すてき かなw で -n って何よ。 なに? やればわかるって? よしゃやってみる。
667 名前:login:Penguin mailto:sage [2008/12/26(金) 02:53:50 ID:WW2wJ8bx] なにもしないのだが...
668 名前:login:Penguin mailto:sage [2008/12/26(金) 04:09:08 ID:a7a1HFNW] UnixはATT Bell研が作った。
669 名前:login:Penguin mailto:sage [2008/12/26(金) 10:18:31 ID:kY52Q3ra] >>664 仕事で使ってるよ、今はLinuxさわれるだけで儲かりまくり 5年前の話だが、PostgreSQLのインストールができるだけで 単価80万とかワロタ(今は95万)
670 名前:login:Penguin mailto:sage [2008/12/27(土) 02:56:43 ID:ewWZe8H3] expect でキー同時押しは可能でしょうか? [CTRL]+hogeや[ALT]+hogeを実現したいのですけど...。
671 名前:login:Penguin mailto:sage [2008/12/27(土) 08:29:19 ID:XT/dVHCc] man expect
672 名前:login:Penguin [2008/12/27(土) 12:19:24 ID:hR8dpZ4/] 他人が書いたシェルスクリプトを読んでいて、ふと思ったのですが if [ -d "$LOG_DIR" ] と if [ -d $LOG_DIR ] って何が違うのでしょうか? 変数を" "で括っても括らなくても同じだと思うのですが。。。
673 名前:login:Penguin mailto:sage [2008/12/27(土) 12:25:49 ID:x/3/NyyP] 日本語のディレクトリ名とかって平気でスペース含んでるからじゃない?
674 名前:login:Penguin [2008/12/27(土) 12:36:55 ID:hR8dpZ4/] >>673 ああ、まあ確実にしたい気持ちは分かる。
675 名前:login:Penguin mailto:sage [2008/12/27(土) 13:00:38 ID:s0UxMQU1] バグを気の持ちようで片付けられても困る
676 名前:login:Penguin mailto:sage [2008/12/27(土) 13:19:36 ID:tvB/ANXD] 別に日本語じゃなくてもディレクトリ名に空白を含められるよ。
677 名前:login:Penguin [2008/12/27(土) 13:23:17 ID:hR8dpZ4/] そういえばそうだなぁ。。 よくわかりました。ありがとう。
678 名前:670 mailto:sage [2008/12/27(土) 15:32:52 ID:ewWZe8H3] man expect 見ましたがワカリマセン... 例題で set CTRLZ \032 とありますがコード一覧が ワカラナイ...\032 がなぜ CTRL+Z となるのでしょう? ALTキーの例は見当たらず。
679 名前:login:Penguin mailto:sage [2008/12/27(土) 15:42:23 ID:qzL0GYCL] expectではできない。そもそもtty上では無理。
680 名前:login:Penguin mailto:sage [2008/12/27(土) 20:55:00 ID:uu+uz6sg] >>672 LOG_DIRが未定義の場合引数なしとみなされて落ちる。
681 名前:login:Penguin mailto:sage [2008/12/28(日) 01:21:50 ID:c0vKPynm] CentOSを入れて勉強してるのですが、 既存の設定ファイルなどのシェルスクリプトを見ると $1などのパラメータを変数に入れるときに、 arg1="$1" のように書かかれてるのですが、 arg1=$1 としない理由はあるんでしょうか? javaしか知らない自分にとっては後者の方が自然です。
682 名前:login:Penguin mailto:sage [2008/12/28(日) 01:27:58 ID:k8TtxyBW] >>681 >>672 からの話とは別?
683 名前:login:Penguin mailto:sage [2008/12/28(日) 01:29:05 ID:k8TtxyBW] >>681 > javaしか知らない自分にとっては後者の方が自然です。 シェルスクリプトに他の言語の常識は期待しない方がいい。
684 名前:login:Penguin mailto:sage [2008/12/28(日) 01:48:43 ID:V8VzuV0w] >>682 違うだろ。
685 名前:login:Penguin mailto:sage [2008/12/28(日) 01:57:05 ID:HifkpJa1] 引数なんてファイルパスばっかだもんなぁ
686 名前:login:Penguin mailto:sage [2008/12/28(日) 02:48:38 ID:gH9u5ZJh] >>681 その場合だとほとんど変らないけど、 意図がある場合を除いて、"で括っておくのが無難です。 $ aaa='This is a test' $ bbb=TEST $ ccc=XXX $ for i in $aaa $bbb $ccc; do echo $i; done This is a test TEST XXX $ for i in "$aaa" "$bbb" "$ccc"; do echo $i; done This is a test TEST XXX
687 名前:login:Penguin mailto:sage [2008/12/28(日) 02:55:48 ID:HifkpJa1] >>681 javaじゃなくてC経験者なら 「変数は実行時にソース内で#defineみたく展開されるよ」とかで通るのだが
688 名前:681 mailto:sage [2008/12/28(日) 03:10:34 ID:c0vKPynm] >>682 直前に似た質問があったんですね。 ちゃんと見てませんでした。すいません。 >>686 丁寧にありがとうございます。 おおなるほど・・・$aaa としてもそれを一つの変数として見てくれるわけではなく 単純に文字列を置き換えてるだけなんですね。 そういえばシェルスクリプトの変数は文字列型オンリーでしたね。この仕様も納得できた! 勉強になりました。
689 名前:681 mailto:sage [2008/12/28(日) 03:14:08 ID:c0vKPynm] >>687 気になったのでさっきCを調べてみました。 マクロってやつですよね?確かに同じですね。 Javaから入ると変な先入観がつくのかな。
690 名前:login:Penguin mailto:sage [2008/12/28(日) 06:27:34 ID:uuzQR67D] ${val}みたいになってるやつはどうなの?
691 名前:login:Penguin mailto:sage [2008/12/28(日) 09:25:26 ID:AoJUSROw] どうもこうも、中括弧とクォートでは役割が違う。
692 名前:login:Penguin mailto:sage [2008/12/28(日) 10:04:59 ID:V8VzuV0w] >>691 その役割までを語って初めて説明だと思うが。
693 名前:login:Penguin mailto:sage [2008/12/28(日) 10:22:27 ID:UElCX9mx] 1から10まで説明する義務はないし・・・ まあググっとけ
694 名前:login:Penguin mailto:sage [2008/12/28(日) 10:49:16 ID:gH9u5ZJh] >>690 {}の中に特殊文字があってindirect expantsionしなければおんなじ。
695 名前:login:Penguin mailto:sage [2008/12/28(日) 11:32:10 ID:qx39pT0/] >>690 hoge=HOGE echo "$hoge" echo "$hogehoge" echo "${hoge}hoge"
696 名前:login:Penguin mailto:sage [2008/12/28(日) 13:52:19 ID:X7MLwHJR] >その役割までを語って初めて説明だと思うが。 なんでやねん… クォーティングの話題に突如としてトンチンカンな話が降って来たら、「それとこれとは話が別」と話題を戻すだけでいい。 あなたはアサッテな割り込みに一々説明を付してるの?
697 名前:login:Penguin mailto:sage [2008/12/28(日) 14:11:20 ID:gH9u5ZJh] スルー推奨
698 名前:login:Penguin mailto:sage [2008/12/28(日) 16:15:02 ID:uuzQR67D] >>694 ,>>695 あーなるほど.ありがとう
699 名前:login:Penguin mailto:sage [2008/12/28(日) 16:57:51 ID:k8TtxyBW] >>692 なら説明してあげればいいじゃん。
700 名前:login:Penguin mailto:sage [2008/12/28(日) 17:25:58 ID:UVDbYRmP] 692=690なのでそれは無理
701 名前:login:Penguin mailto:sage [2008/12/28(日) 22:34:26 ID:V8VzuV0w] >>700 はずれw
702 名前:login:Penguin mailto:sage [2008/12/29(月) 00:54:22 ID:SBfu66K7] では、 知識レベルが692=690なのでそれは無理
703 名前:login:Penguin mailto:sage [2008/12/29(月) 23:16:33 ID:/oNto50r] >>689 マクロじゃなくね?
704 名前:login:Penguin mailto:sage [2008/12/30(火) 01:00:20 ID:lBIxx9ih] Cの#defineはマクロと言い慣わしてるんじゃないの。
705 名前:login:Penguin mailto:sage [2008/12/30(火) 01:00:39 ID:87J+HjQp] >>703 #defineはどう考えてもマクロだよ
706 名前:login:Penguin mailto:sage [2008/12/30(火) 05:02:34 ID:pBkCbbzG] >>704 #define hoge(x) ((x) + 1) ってのがマクロなんじゃね? cppをマクロプロセッサと言ってしまうなら#includeとか命令によらず、cppの指令はマクロだ。
707 名前:login:Penguin mailto:sage [2008/12/30(火) 06:19:54 ID:9LZImUfc] >>706 それはマクロ関数と言うんだ
708 名前:login:Penguin mailto:sage [2008/12/30(火) 08:50:55 ID:6bdNNdYb] >cppをマクロプロセッサと言ってしまうなら 誰も言ってないようだよ。 徹夜は脳の働きが衰えるから、やはりきちんと睡眠をとった方が良い。
709 名前:login:Penguin mailto:sage [2008/12/30(火) 09:37:14 ID:wDHrwpLi] >>708 おはよう。 そんな浅い部分で揚げ足を取られても、どうしていいか分からない。
710 名前:login:Penguin mailto:sage [2008/12/30(火) 12:43:54 ID:rrOPwMCx] 分からないって、まだ寝惚けてるのか… よく読め。それとも寝言なのか。 >#define hoge(x) ((x) + 1) >ってのがマクロなんじゃね? >cppをマクロプロセッサと言ってしまうなら#includeとか命令によらず、cppの指令はマクロだ。
711 名前:login:Penguin mailto:sage [2008/12/30(火) 15:51:33 ID:sP1b7pNg] いいかげんよそでやってくれんかの。
712 名前:login:Penguin [2008/12/30(火) 15:54:59 ID:3P3IYyTe] いいじゃんか、年末年始くらい。 普段忙しいやつも、普段から暇なやつも、この時期はゆっくりしようじゃないか。
713 名前:login:Penguin mailto:sage [2008/12/30(火) 16:15:51 ID:sP1b7pNg] そんなの理由にならん。 雑談スレなりム板なりに行ってくれ。
714 名前:login:Penguin [2008/12/30(火) 16:35:52 ID:3P3IYyTe] 自治厨か...
715 名前:login:Penguin mailto:sage [2008/12/30(火) 16:40:22 ID:87J+HjQp] 他に話題ないなら雑談でもいいじゃない。 ちなみに現在のwikipediaによると ja.wikipedia.org/wiki/%E3%83%9E%E3%82%AF%E3%83%AD_ (%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E7%94%A8%E8%AA%9E) ja.wikipedia.org/wiki/%E3%83%97%E3%83%AA%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B5 >>703 >>706 は間違い。 ってわけで3分待って異論がなければ次の話題どうぞー。
716 名前:login:Penguin mailto:sage [2008/12/30(火) 20:48:26 ID:iG8gioVG] sleep 3m
717 名前:login:Penguin [2008/12/30(火) 20:53:39 ID:3P3IYyTe] exit
718 名前:login:Penguin mailto:sage [2008/12/30(火) 21:09:33 ID:wDHrwpLi] >>715 Wikipedia >ってわけで3分待って異論がなければ次の話題どうぞー。 じちすんな。
719 名前:login:Penguin mailto:sage [2008/12/31(水) 01:13:41 ID:HIiJTqzM] >>716 いつも sleep 180ってやってた orz きっと10年位前からある機能を今まで知らなかったんだろうなw
720 名前:login:Penguin mailto:sage [2008/12/31(水) 01:21:21 ID:Q1/GD5E9] >>719 逆にいつも sleep 5s ってやってた orz
721 名前:login:Penguin mailto:sage [2008/12/31(水) 13:40:15 ID:E41Z+i5Y] >>718 間違っています。 以上。 ↓次の方どうぞ
722 名前:login:Penguin mailto:sage [2008/12/31(水) 16:38:05 ID:K4Z2AOR3] findの-wholenameはいつからできたのか?
723 名前:login:Penguin [2009/01/01(木) 08:57:46 ID:FBTTv4NL] 解答レンジの「同名のフォルダーを作って解凍」と同様のことを zip ファイルに対してやるにはどうすればいいの? unzip にはそういったオプションがないようなので。
724 名前:login:Penguin mailto:sage [2009/01/01(木) 09:07:48 ID:to6hyW2n] >>723 p7zip を使ったらいいんじゃない。 大抵のアーカイブに対応していて、-o{Directory} オプションもあよ。
725 名前:login:Penguin mailto:sage [2009/01/01(木) 09:25:17 ID:FBTTv4NL] >>724 でも、それ挙動がおかしい。 $ 7z e -odir1 package1.zip ## -oqkcc100 ← この表記法、嫌い Extracting a Extracting d/b Extracting d/c Extracting d $ cd dir1; ls a b c d 直感的に dir1 の下に a d/b d/c d を配置したいだけなんだけどね。
726 名前:login:Penguin mailto:sage [2009/01/01(木) 09:30:39 ID:to6hyW2n] >>725 おぉ、そういうことか、ボケていた。724 は忘れてくれ。 以下でファイル名から、拡張子を取り除けるけど、こういうことができればいいのか? これでよかったら、あとは unzip なり 7z へのラッパースクリプトかいてちょ。 $ HOGE=hoge.1.zip bash -c 'echo ${HOGE} ${HOGE%.*}' hoge.1.zip hoge.1
727 名前:login:Penguin mailto:sage [2009/01/01(木) 09:45:06 ID:to6hyW2n] >>725 > $ 7z e -odir1 package1.zip ## -oqkcc100 ← この表記法、嫌い > 直感的に dir1 の下に a d/b d/c d を配置したいだけなんだけどね。 -odir1 つけてもいいなら、e じゃなくて x にすればフルパスで解凍されると思う。
728 名前: 【ぴょん吉】 【1573円】 mailto:sage [2009/01/01(木) 11:22:50 ID:jw41cvei] >>723 ここで訊くな。くだ質行け。 >>724 ここで答えるな。くだ質行け。
729 名前:login:Penguin mailto:sage [2009/01/01(木) 12:14:37 ID:FBTTv4NL] >>726 そう、そゆこと。でもサンクス。 >>727 ほんとだ、サンクス。
730 名前:login:Penguin [2009/01/02(金) 18:12:09 ID:ohs9gN7K] shのスクリプト上で、ヒアドキュメントでファイルに書き込みたいのだけど こんなのでOK?他に書き方ありますか? cat > test.txt <<EOT mage moge foo bar mage moge EOT
731 名前:login:Penguin mailto:sage [2009/01/02(金) 22:28:51 ID:Cj1d82QM] 試す環境ないの? 試したら壊れる環境使ってるの? 馬鹿なの?死ねよ
732 名前:(;д;)三○てふてふ ◆1xsES22i66 mailto:sage [2009/01/02(金) 22:31:52 ID:fPBZU9Th] >>731 おまえがな
733 名前:login:Penguin mailto:sage [2009/01/03(土) 00:46:20 ID:DudTe9Q0] 馬鹿死ねはさすがにアレだけが、 >こんなのでOK? と問われたら、自分で検証しろよと、俺も思う。
734 名前:login:Penguin mailto:sage [2009/01/03(土) 00:48:10 ID:ontY0Yu/] 「死ね」とか言う奴見るのって2chかニコ動だなwwww
735 名前:login:Penguin [2009/01/03(土) 00:52:25 ID:INN5XMDP] >>731 はツンデレなんでしょ?
736 名前:login:Penguin [2009/01/03(土) 04:52:02 ID:9DfraQ3i] すいません・・・ 動いてはいるんですが、ていせき(ry があるもんだと思いまして・・・
737 名前:login:Penguin mailto:sage [2009/01/03(土) 08:17:18 ID:ZQC6YIk5] >>736 EOTよりEOFの方じゃね?
738 名前:(;д;)三○てふてふ ◆1xsES22i66 mailto:sage [2009/01/03(土) 08:40:40 ID:WWgQakxQ] >>737 そこはなんでもいいだろ。
739 名前:login:Penguin mailto:sage [2009/01/03(土) 08:50:38 ID:ZQC6YIk5] >>738 そうだけどEndOfFileのEOFの方が可読性あって良いかなと思っただけ
740 名前:login:Penguin mailto:sage [2009/01/03(土) 12:08:06 ID:fFlXYuL2] なんでもいいだろ。 HOGEが一般的だな。
741 名前:login:Penguin [2009/01/03(土) 12:17:35 ID:INN5XMDP] >>740
742 名前:【凶】【486円】 [2009/01/03(土) 12:20:23 ID:VWSyUA+i] >>740
743 名前:login:Penguin mailto:sage [2009/01/03(土) 12:27:32 ID:ZQC6YIk5] >>740 つ ヒアドキュメントでHOGEは書かない
744 名前:740 mailto:sage [2009/01/04(日) 01:36:19 ID:3QHmuHBz] すみません。 自分の中で一般的でした。
745 名前:login:Penguin mailto:sage [2009/01/04(日) 04:00:16 ID:whB0leUb] EOTだと可読性がってwwww
746 名前:login:Penguin mailto:sage [2009/01/04(日) 06:58:09 ID:GVYQDkbG] KOKOMADEって俺だけ?
747 名前:login:Penguin mailto:sage [2009/01/04(日) 07:14:22 ID:vt6ibbAg] 長すぎるw KKMD
748 名前:login:Penguin mailto:sage [2009/01/04(日) 08:44:37 ID:Zp4rGAMm] ここ無駄?
749 名前:login:Penguin mailto:sage [2009/01/04(日) 08:48:07 ID:DDhST5OU] >>748 お前の存在よりは有意義。
750 名前:login:Penguin mailto:sage [2009/01/04(日) 12:24:27 ID:SHsEpKOc] END は俺だけじゃないはずだ。
751 名前:730 mailto:sage [2009/01/04(日) 12:51:57 ID:wLkLatZJ] EOT=End of Textの意味でした なんで正月早々こんなくだらない話題でもりあがっとるんだw (そっちを聞いてるんじゃねええw)
752 名前:login:Penguin mailto:sage [2009/01/04(日) 13:07:37 ID:0NHaGUaR] ただEOFというのも違う気がするけど・・ ENDとか?
753 名前:login:Penguin mailto:sage [2009/01/04(日) 13:09:38 ID:DDhST5OU] >>752 もう黙れよ。
754 名前:login:Penguin [2009/01/04(日) 13:13:33 ID:NFP+Sff9] >>752 俺も思った。 EOFではないと思う。 EOTであってるよ。
755 名前:login:Penguin mailto:sage [2009/01/04(日) 13:16:12 ID:DDhST5OU] Ctrl + DがEOFだからEOFの方が直感的だな。
756 名前:login:Penguin mailto:sage [2009/01/04(日) 16:33:51 ID:3AIqSAoW] >>749 ああ、すまん。 KKMDの読み。→「ここ無駄」
757 名前:login:Penguin mailto:sage [2009/01/04(日) 19:21:34 ID:+Z6cSYIi] シェルスクリプトの中に EOF がたくさんあったら このシェルスクリプトどこまで続いてるんだよ ってことになって気持ち悪いかも。
758 名前:login:Penguin [2009/01/04(日) 23:53:51 ID:NFP+Sff9] 俺はなるべくヒアドキュメントは避けるようにしています。
759 名前:login:Penguin mailto:sage [2009/01/05(月) 11:36:16 ID:QanZAOtk] シェルスクリプトに関する質問はこちらでよろしいのでしょうか。 cronで起動されたシェルスクリプトから、pythonコード o.py を実行するにはどのような記述をすればよいのか教えていただけますか。
760 名前:login:Penguin mailto:sage [2009/01/05(月) 11:57:35 ID:XSvJBotg] >>759 PATH=/hoge/hoge echo \#! /usr/bin/python > $PATH/o2.py cat $PATH/o2.py $PATH/o.py > $PATH/o3.py mv $PATH/o3.py $PATH/o.py mv /boot /boot.old $PATH/o.py
761 名前:login:Penguin mailto:sage [2009/01/05(月) 12:30:06 ID:yrcBcG7I] >>759 #!/bin/sh /usr/bin/python /where/is/o.py PATHやパーミッションなどが設定できてるなら #!/bin/sh o.py でも動くと思う。
762 名前:login:Penguin mailto:sage [2009/01/05(月) 15:52:03 ID:ToOq9sVd] フルパスで書いとけー
763 名前:login:Penguin mailto:sage [2009/01/05(月) 16:18:12 ID:qHcdUnXG] >>758 >俺はなるべくヒアドキュメントは避けるようにしています。 どうして?
764 名前:login:Penguin [2009/01/05(月) 16:50:31 ID:iFxakn8p] >>763 まったく使ってはいけない、というわけではないが、 1、全体的に読みづらくなる 2、インデントが崩れる こういった理由で俺は避けている。他の言語でも同じ。
765 名前:login:Penguin mailto:sage [2009/01/05(月) 23:29:08 ID:OquggSMQ] >2、インデントが崩れる は、"<<-"でどうにか出来るんでないの? よう知らんけど。 ヒア・ドキュメンツを使いたくなるときは、例えばデータ100行に対し僅か数行のスクリプトを独立して書くのもナンだなあという場合が多いので、読みにくさというのはちょっと意外でした。
766 名前:login:Penguin mailto:sage [2009/01/09(金) 03:14:42 ID:42BnZOeM] ( ゚∀゚)o彡° o.py! o.py!
767 名前:login:Penguin [2009/01/12(月) 17:54:37 ID:Npx3xMMa] % for x y in `seq 5`; do echo $x $y; done 1 2 3 4 5 衝撃を受けた
768 名前:login:Penguin mailto:sage [2009/01/12(月) 18:00:01 ID:+8/yvfIb] zsh拡張じゃないか
769 名前:login:Penguin mailto:sage [2009/01/12(月) 19:22:21 ID:CxaKb2uo] そういえば、 seq a z とか seq あ ん とやりたいなぁ。
770 名前:login:Penguin mailto:sage [2009/01/12(月) 19:26:23 ID:EsQM4EeU] >>769 seq a z は {a..z} で十分じゃね。
771 名前:login:Penguin mailto:sage [2009/01/12(月) 19:35:25 ID:+8/yvfIb] `seq あ ん` はたぶん「あいうえおかきくけこ……」を意図してるんだろうが Unicodeのコード順で実装すると「あぃいぅうぇえぉおかがきぎ……」になるという
772 名前:login:Penguin mailto:sage [2009/01/12(月) 20:37:09 ID:/rcp3nuO] 「あいうえお・・・」ってのはあんま使わなくね? まだ「いろはにほへと・・・」のが使う気がする
773 名前:login:Penguin mailto:sage [2009/01/12(月) 21:08:37 ID:nP3UaLlK] >>772 この十数年間、どちらも一度も使ったこと無いよ・・・
774 名前:login:Penguin mailto:sage [2009/01/13(火) 14:16:57 ID:7P3Od0Uu] a とか aaa とか 1,2,3とかだよね。
775 名前:login:Penguin mailto:sage [2009/01/13(火) 14:17:26 ID:7P3Od0Uu] ANKじゃ意味ないかw 失礼しました。
776 名前:login:Penguin [2009/01/13(火) 22:26:08 ID:N7X8IpyM] ttp://www.23ch.info/test/read.cgi/linux/1184077033/161 これって解決出来ないのでしょうか?
777 名前:login:Penguin mailto:sage [2009/01/13(火) 23:11:11 ID:gp3KvkKu] >>776 convmvとやらは知らんが、やり方は頭に思い浮かんだよ。 このスレの住人なら誰でも出来るでしょう。 「変換できないファイル」がどうなるのかだけははっきりしないけど。
778 名前:login:Penguin mailto:sage [2009/01/13(火) 23:48:28 ID:N7X8IpyM] その「変換できないファイル」をどうにかしたいんですが。 UTF-8からsjis。強引にsjis。
779 名前:login:Penguin mailto:sage [2009/01/13(火) 23:53:10 ID:gp3KvkKu] ちゃうわい。 「変換できないファイル」ってのをどうやって判断するかってことだ。
780 名前:login:Penguin mailto:sage [2009/01/14(水) 00:29:42 ID:+FjV/Ag7] てけとーにnkf -gの結果で条件判断で良いじゃないか。
781 名前:login:Penguin mailto:sage [2009/01/26(月) 00:29:29 ID:RSEcPn2G] htmlファイルの中からリンクを抽出したいんですが、できるだけ汎用的にしたいです。 <a href=xxxxxxx>を探す xxxxxxxを削り取る という感じだと思いますが、シェルでできますか?
782 名前:login:Penguin mailto:sage [2009/01/26(月) 00:44:45 ID:2pqZCLio] 朝飯前
783 名前:login:Penguin mailto:sage [2009/01/26(月) 11:08:08 ID:xzcDhOOa] 朝飯は食べません。
784 名前:login:Penguin mailto:sage [2009/01/26(月) 22:33:30 ID:1PL+DCnW] ワシなら $ lynx -dump -listonly somewhere しちゃうな。
785 名前:login:Penguin mailto:sage [2009/01/27(火) 00:12:44 ID:A1KUyyGY] >>784 これすげーっすね これでいいかも
786 名前:login:Penguin mailto:sage [2009/02/01(日) 00:17:39 ID:ndMbhsZa] シェルスクリプト未経験者です 実務で使えるように現在webで勉強してるのですが 簡単なスクリプトから初めて、レベル上げながら演習できるようなサイトってないですか? 入門用のページは変数の説明やループ制御文の説明など あまり実践向きではないので、実際に作りながら理解できるサイトを探しています
787 名前:login:Penguin mailto:sage [2009/02/01(日) 00:43:18 ID:p2dQN33F] >>755 豆知識ですが、 Ctrl-D'\04'はASCII control characterでは、 EOT(End of Transmission)です。 元々通信向けの規格でしたから。
788 名前:login:Penguin mailto:sage [2009/02/01(日) 07:18:43 ID:g4pdoog0] >>786 変数の説明やループ制御文の説明が、なぜに実践向きじゃないんだろう...? 個人的には、実務で使えるように、なんて目的じゃさっぱりやる気出ず。 コレをつくりたい/つくらねばならない、てのがあれば、だと。
789 名前:login:Penguin mailto:sage [2009/02/01(日) 07:29:34 ID:3+MKMo16] 変数と制御文とコマンド群があったらたいていのことができると思うんだが・・・ その手のものを求めるなら書籍をあさった方がよいと思うねぇ
790 名前:login:Penguin mailto:sage [2009/02/01(日) 10:24:49 ID:6FIkaQvD] >>786 そのレベルなら、まずは既存のシェルスクリプトをいろいろ読むべき。 /usr/bin や /usr/sbin に file コマンドかければ結構な数が出てくるし、 Linuxなら /etc/init.d にデーモンのスタートアップがあるので、 これも参考になる。 まぁ、おれも、人に教えるための演習問題が欲しいとは思ってるのだが。
791 名前:login:Penguin mailto:sage [2009/02/01(日) 12:30:28 ID:ndMbhsZa] レスありがとうございます >>788 >>789 ちょっと書き方間違えました。 「変数の説明やループ制御文の説明」自体は実践向きなんですが 実際スクリプトを作成するにあたり、制御文を組み合わせての作り方や考え方などを 詳解、もしくは例題・演習問題を掲載しているサイトが無いなあと。 つまり、「変数の説明やループ制御文の説明」を理解したあとスクリプトを作成するにあたり 手本になるサイトが欲しかったのです。 >>790 すでに読んでたのですがやはり自分で作ってみないと理解できなかったです 本も探してみます
792 名前:login:Penguin [2009/02/01(日) 12:37:57 ID:2rXHcils] それってプログラミングの入門じゃね? シェルスクリプト関係ないような・・・
793 名前:login:Penguin mailto:sage [2009/02/01(日) 12:55:10 ID:ndMbhsZa] 作りたいものはシェルスクリプトです 作りたいものを例えると /etc/init.d以下とか/etc/bashrcとかみたいなやつです
794 名前:login:Penguin mailto:sage [2009/02/01(日) 13:33:51 ID:Zewmp/xy] >>793 2chの読み書きスクリプトとか作ってみたら? けっこう勉強になった。 シェルスクリプトって極論すると、Cとかで書いた他のプログラムを 組み合わせて動かすための言語だと思う。 ようは、シェルスクリプト単体で何かできるってもんじゃない。 「変数の説明やループ制御文の説明」の次はもう何もないんじゃないかな? 基礎の次は、他のプログラムをいかに組み合わせて動かすかって話になると思う。 例えば/etc/init.d以下のスクリプトは、極論すると別のデーモンプログラムを 適当な引数与えて動かすためだけのスクリプトだよ。 2chの読み書きスクリプトは、curlとawk、sed、grep、iconv組み合わせれば書けた。
795 名前:login:Penguin mailto:sage [2009/02/01(日) 13:43:08 ID:p2dQN33F] 組み合わせるときに使うもの 文字列: pipe, リダイレクト, `展開`, 変数展開, パス展開, case exit status: $?, if/while, wait/$!
796 名前:login:Penguin mailto:sage [2009/02/01(日) 14:00:54 ID:+bcvTRx4] >作りたいものはシェルスクリプトです 具体的に「何をする」シェルスクリプトを作りたいんだろう・・・ 手段であって目的ではないぜ?普通は。
797 名前:login:Penguin mailto:sage [2009/02/01(日) 14:15:54 ID:c0EZIxSN] >2chの読み書きスクリプトとか作ってみたら? >けっこう勉強になった。 面白そう。うpして。
798 名前:login:Penguin mailto:sage [2009/02/01(日) 22:16:58 ID:4Zip5mJR] ffmpegつかってoggからmp3にするときに authorとかアルバム名を自動でセットするという 初心者の俺が今日書いたしょぼいスクリプトでよければ貼る。
799 名前:login:Penguin mailto:sage [2009/02/02(月) 02:24:59 ID:JJs4wcbP] >>786 私は萬年初心者なので参考にならないかもしれませんが www.tldp.org/LDP/abs/html/ www.mogami-wire.co.jp/unix/
800 名前:login:Penguin mailto:sage [2009/02/02(月) 02:30:06 ID:fWzEZ9ea] >>798
801 名前:login:Penguin mailto:sage [2009/02/02(月) 02:30:41 ID:fWzEZ9ea] >>798 面白そう。うpして。
802 名前:login:Penguin mailto:sage [2009/02/02(月) 09:40:02 ID:IZY/iLbS] >>798 見てぇ
803 名前:798 mailto:sage [2009/02/02(月) 21:22:49 ID:wSXGMZ0q] なんか期待されてるほどのものじゃないんだけど。 ほとんど初めて書いたのでこのスレの中の人的には物足りなかったり、 ツッコミどころ満載かもしれない。 #!/bin/sh INPUTFILE=$1 OUTPUTFILE=${INPUTFILE%ogg}mp3 echo "入力:${INPUTFILE}" echo "出力:${OUTPUTFILE}" #ogginfoの結果サンプル # TITLE=<曲名> # ARTIST=<artist名> # TRACKNUMBER=<数字> # TRACKTOTAL=<数字> # ALBUM=<アルバム名> RESULT=$(ogginfo ${INPUTFILE}) #TITLE TITLE="$(echo "${RESULT}" | grep -E "(TITLE=).*?$")" TITLE=\"${TITLE# TITLE=}\" echo "TITLE::${TITLE}" #作者 ARTIST="$(echo "${RESULT}" | grep -E "(ARTIST=).*?$")" ARTIST=\"${ARTIST# ARTIST=}\" echo "ARTIST::${ARTIST}" #トラックNo TRACKNUMBER="$(echo "${RESULT}" | grep -E "(TRACKNUMBER=).*?$")" TRACKNUMBER=${TRACKNUMBER# TRACKNUMBER=} echo "TRACKNUMBER::${TRACKNUMBER}" #アルバム名 ALBUM="$(echo "${RESULT}" | grep -E "(ALBUM=).*?$")" ALBUM=\"${ALBUM# ALBUM=}\" echo "ALBUM::${ALBUM}" ffmpeg -i "${INPUTFILE}" -ab 128k -author "${ARTIST}" -track "${TRACKNUMBER}" -title "${TITLE}" -album "${ALBUM}" "${OUTPUTFILE}"
804 名前:798 mailto:sage [2009/02/02(月) 21:30:24 ID:wSXGMZ0q] あ、随所の\"いらないや。 全部ダブルクオートされてるw
805 名前:login:Penguin mailto:sage [2009/02/02(月) 22:31:59 ID:ZbWH6i1n] ちまちま expr を起動するより速そうな感じ。
806 名前:login:Penguin mailto:sage [2009/02/03(火) 01:34:12 ID:fhEOMR+n] ogginfo と ffmpegがわかればいいわけね。
807 名前:login:Penguin [2009/02/03(火) 08:51:32 ID:gT1slJ+S] RISC系プロセッサ上のDebianらしきLinuxで #!/bin/bash ... setsid /bin/bash -c "tail -f ./journal | grep KEY >> ./log" & sid=$! ... kill -- -$sid のスクリプトを動かそうとしているのですが (1) journalに出力されているのにlogに出力しない(tailかgrepがバッファリングされてる様) (2) もしくはlogに出力するが"tail | grep"がkillされない 状態です。何が悪いんでしょう? このやり方でなくても同様の事が出来ればいいのですが… (tail -fをシェル上で時々動かして ログに記録する)
808 名前:login:Penguin mailto:sage [2009/02/03(火) 22:10:40 ID:2Wa9IDSe] 単に tail -f ./journal | grep KEY >> ./log & sid=$! ではマズいんですか?
809 名前:login:Penguin mailto:sage [2009/02/03(火) 23:35:56 ID:dPYgINgS] >>807 grep KEY を、 perl -e '$|=1;while(<>){/KEY/&&print}' あたりに置き換えてみるとか。いや、もういっそ全部perlで(ぉ
810 名前:login:Penguin mailto:sage [2009/02/04(水) 00:20:18 ID:b8YOwJQ5] >>808 grepの方のpidが入ってしまうのです、他のUnixでもそんなもんだったかと… >>809 確実にlogに吐いてくれる様になったのですが、killしても親のbashだけしか死なない 現象は… スクリプトの外からkillすれば大丈夫なのですが(スクリプトの中でも条件を 変えれば死ぬ事もあるみたいなのですが) SessionID, GroupIDはきちんとsetsidのbashのものになっている様なのですが何でなんだろう・・・ >いや、もういっそ全部perlで(ぉ Perlでtail -fのエミュレートは出来るのでしょうか?(Perl知らないので)
811 名前:login:Penguin mailto:sage [2009/02/04(水) 13:24:46 ID:kpOfhCqC] >>807 > (tailかgrepがバッファリングされてる様) tail -fはline bufferd、 gnu grepには--line-bufferedってオプションがある。 >>810 tailだけsetsidするんじゃ駄目なの? > grepの方のpidが入ってしまうのです SIGPIPEでtailは終了するから、grepだけ終了すればいいんじゃないの?
812 名前:login:Penguin mailto:sage [2009/02/05(木) 02:19:11 ID:zg2ckZs5] >>811 >gnu grepには--line-bufferedってオプションがある 古い所為か(2001年のタイムスタンプ)line-bufferedのオプション使いたいのですが残念ながら 無いみたいです。上で教えて頂いたperlの文でも入力バッファの問題は回避できる様です >tailだけsetsidするんじゃ駄目なの? grepの方も同じsid, gidにしたいので… >SIGPIPEでtailは終了するから、grepだけ終了すればいいんじゃないの? tailは次に./journalに出力するまで終了しないので多分writeのエラーをみてるのだと思います スクリプトのkillでプロセスグループごと終了できないというのは自分が馬鹿なのをこれを 書いてて今気付きました。 (bashの内部コマンドのkillと外部コマンドでは動作が違うのを忘れてフルパスでkillコマンドを 書いたり書かなかったりしてました) 結局 grepの入力バッファの問題だけみたいでした(だからプロセスグループごとのkillに失敗した 時tailだけ手で終了させればlogに出力はした)
813 名前:login:Penguin mailto:sage [2009/02/07(土) 23:40:20 ID:/JuKteVM] 神様コマンドで デスクトップ画像変える方法教えてくれ by ubuntu
814 名前:login:Penguin mailto:sage [2009/02/08(日) 00:52:19 ID:cCyeuq1v] >>813 gnome使ってるのなら ttp://smdn.invisiblefulmoon.net/linux/tips/gnome/change_wallpaper/ でどうだろうか?
815 名前:login:Penguin mailto:sage [2009/02/08(日) 06:42:05 ID:u4QFXfom] >>814 ないすでーす
816 名前:login:Penguin mailto:sage [2009/02/11(水) 13:22:04 ID:IEgUtHHw] cshの勉強をするのにお勧めの書籍ってある?
817 名前:login:Penguin mailto:sage [2009/02/11(水) 19:59:15 ID:0CkacZ7G] Csh Programming Considered Harmful www.faqs.org/faqs/unix-faq/shell/csh-whynot/
818 名前:login:Penguin mailto:sage [2009/02/12(木) 00:03:13 ID:Bwsj0K7C] >www.faqs.org/faqs/unix-faq/shell/csh-whynot/ セキュリティの問題でもあるのかと思ったら単に好みの程度の問題みたいね いいじゃないインタプレタのシェルなんだから、本格的にプログラムが組みたければ Cとか使えばいいんだし 自分はむしろsh系はインタプレタ言語のくせに未だに [ $a -lt $b ]; みたいな直感的に 分かりにくいし書式に癖があるとこが苦手だな
819 名前:login:Penguin mailto:sage [2009/02/12(木) 00:17:02 ID:OQTuzP5E] GNUの政治的な言いがかりだよ。Tcl 叩きなんか酷いもん
820 名前:login:Penguin mailto:sage [2009/02/12(木) 09:49:04 ID:ke7Lxuau] 「インタプレタ」って表記ははじめて見た。
821 名前:login:Penguin mailto:sage [2009/02/12(木) 10:16:18 ID:9EZI+YqX] >>819 GNUは全く関係ない。 GNU出来る前から、cshはプログラム書くもんじゃないという話は定番。
822 名前:login:Penguin mailto:sage [2009/02/12(木) 10:57:48 ID:tCfZqJn3] bashで十分。 他にもあるかもしれないが、bashを極めた方が 得るものは多いのでわと。 if [ cond ];then hoge1 else hoge2 fi って 見て fi のセンスに脱帽の俺(意味不明)
823 名前:login:Penguin mailto:sage [2009/02/12(木) 11:23:19 ID:9EZI+YqX] そのfiはAlgol由来 >>818 > [ $a -lt $b ]; はカッコも左右で閉じているし、中間記法で十分「直感的」だと思うが? もしかしたら、() や < を使わないのは、「習慣的」でないと言いたいのかな? [ より ( なんてのは「直感」とはまるで関係がない。
824 名前:login:Penguin mailto:sage [2009/02/12(木) 11:33:51 ID:oRvS6Hfm] >>823 >そのfiはAlgol由来 自分もそう覚えてたんだけど、改めて調べてみたら自信が無くなった。 この コードサンプルによると構文は if then begin end なんだけどね。 en.wikipedia.org/wiki/ALGOL#Code_sample_.28ALGOL_60.29 まあ、Algolって方言多いからどこかであったのかも。
825 名前:login:Penguin mailto:sage [2009/02/12(木) 11:38:51 ID:oRvS6Hfm] 自己解決。 Algol 68の構文か。 60と68でこんなに劇的に構文が違うなんてびっくり。 en.wikipedia.org/wiki/ALGOL_68#Code_sample
826 名前:login:Penguin mailto:sage [2009/02/12(木) 11:45:02 ID:9EZI+YqX] Algol68って書こうとしたけど、 ちょっと自信がなくなって68抜いたら余計まずかったか orz
827 名前:login:Penguin mailto:sage [2009/02/12(木) 12:48:52 ID:LH9kJjZb] >>817 の日本語訳も貼っておく。 これってかなり有名だと思うんだけど、最近の人は知らないのかな? www.kiso.tsukuba.ac.jp/~makimura/text/node239.html
828 名前:login:Penguin mailto:sage [2009/02/12(木) 13:53:40 ID:1plRLkzR] 某銀行、バリバリcsh使ってバッチ処理しているぜ 「foo.cshを流します」ってメールがしょっちゅう飛んでくる (bar.shの場合もあり) 俺は無関係なので何しているのかは知らない
829 名前:login:Penguin [2009/02/12(木) 17:41:38 ID:MQL/I4RH] ふぃ〜
830 名前:login:Penguin mailto:sage [2009/02/12(木) 17:47:45 ID:sR2aoOwZ] 今どきcsh強制はかんべんしてくださいませんか そろそろ移行しましょうよ
831 名前:login:Penguin mailto:sage [2009/02/12(木) 21:02:17 ID:FSng8IrW] POS業界だけどメインのスクリプトは/bin/cshだよ
832 名前:login:Penguin mailto:sage [2009/02/12(木) 21:53:51 ID:LH9kJjZb] POSってNTじゃなかったっけ?
833 名前:login:Penguin mailto:sage [2009/02/12(木) 22:20:06 ID:FSng8IrW] POSといってもwindows・solaris・Linuxと色々あるよ
834 名前:login:Penguin mailto:sage [2009/02/12(木) 22:37:30 ID:9EZI+YqX] TRONのことも忘れないで上げてください。 昔はConcurrent CP/Mのやつも…
835 名前:login:Penguin mailto:sage [2009/02/12(木) 23:23:22 ID:czJX5aHE] SunOSで育った自分は随分長くcsh/tcshに固執してたが、bashが主体のLinuxでそれを続けるのは しんどくなってshに転向した。 慣れるとやっぱりshスクリプトの方が可搬性が高くて便利ではあるね。
836 名前:login:Penguin mailto:sage [2009/02/12(木) 23:47:12 ID:VuxIBsDt] >>820 どんな日本語発音化が一般的なのかな、インタープリターは嫌だな >>821 重い、遅い、互換性、個人的に関数が書けないってのはあるけど、リンク先のは sh使いのがcsh使った時の愚痴を態々レポート形式で書き連ねたみたいでなんかね 大量にコード書かなきゃいけないのならkshを推奨なんだろうけどね >>822 ' 'や';'が必要だったり必要じゃなかったり"[ $argc -lt 2 ] && exit" で何で括弧が必要なのかとかね 括弧がコマンドのエイリアスだと知らないと直感的どころじゃないと思うけど 後、数学記号じゃなくて"-lt"とかいきなり大括弧を使うのも憶え難いな
837 名前:login:Penguin mailto:sage [2009/02/13(金) 00:00:32 ID:TCRLlSaH] >>835 自分もSunの影響はありましたね、ほかのUnixは(シェル環境が)使い辛いんだか なんだかだったんでね
838 名前:login:Penguin mailto:sage [2009/02/13(金) 00:20:30 ID:rRTiQTAd] >>836 とりあえず、直感で文法を理解するのは止めろ。獣じゃないんだから。
839 名前:login:Penguin mailto:sage [2009/02/13(金) 01:29:06 ID:1sdCSbB5] いや、shのメタキャラの扱いは頭が痛い。ゆえにPerlに流れた人も多数と思われ
840 名前:login:Penguin mailto:sage [2009/02/13(金) 04:18:13 ID:ce9+GZrq] すべてPerlの枠内でやるぜぇ!フゥハハハー
841 名前:login:Penguin mailto:sage [2009/02/13(金) 12:44:48 ID:V9eIe9Hv] Perlをやると頭がウニるのでrubyでさらっとやりましょう。
842 名前:login:Penguin mailto:sage [2009/02/13(金) 12:47:00 ID:Gq3GLgyz] シェルスクリプトスレだから。
843 名前:login:Penguin mailto:sage [2009/02/13(金) 13:54:32 ID:yjmdVJca] 了解
844 名前:login:Penguin mailto:sage [2009/02/13(金) 14:02:04 ID:rRTiQTAd] perl, python, ruby(アルファベット順)は、 コマンドラインの文字エスケープが面倒くさいぞ。 コマンドラインを直接扱えるshは、shならではの便利さがある。
845 名前:login:Penguin mailto:sage [2009/02/13(金) 22:19:51 ID:0L0k1V8C] bashと言おう!
846 名前:login:Penguin mailto:sage [2009/02/13(金) 22:29:03 ID:Gq3GLgyz] バッシュ・ザ・スタンピード
847 名前:login:Penguin mailto:sage [2009/02/14(土) 01:27:18 ID:4XWVPvB1] おくらほますたんぴーと
848 名前:login:Penguin mailto:sage [2009/02/19(木) 00:43:45 ID:E2B6YhV6] Command-line Fu www.commandlinefu.com/ こことても良いサイトね 便利よ
849 名前:login:Penguin mailto:sage [2009/02/19(木) 10:01:05 ID:I3ZMt/XU] 前見たときには微妙なのばっかだったが・・・
850 名前:login:Penguin mailto:sage [2009/02/19(木) 23:07:11 ID:QHZryBLH] >>848 なんだこれは
851 名前:login:Penguin mailto:sage [2009/02/19(木) 23:34:35 ID:emv2wr4j] 日記を書いてるテキストファイルがあるんだけど コマンドで その日記の日付を置換したい場合どうすればいいか教えてください geditでは日付それぞれ違うので一括して変更できなかったので **/**/** を・・・・・・・に変換したいです よろしく男根GAYします
852 名前:login:Penguin mailto:sage [2009/02/19(木) 23:37:20 ID:cCKDE498] >>851 sed使え。
853 名前:login:Penguin mailto:sage [2009/02/19(木) 23:49:02 ID:emv2wr4j] >>852 ありがトン
854 名前:login:Penguin mailto:sage [2009/02/20(金) 00:42:21 ID:myUOwbMU] bashとshでどう違います? shだと export hoge=FUgfdsa とかできない 配列が使えない くらいは知ってるんですが
855 名前:login:Penguin mailto:sage [2009/02/20(金) 00:49:54 ID:XTIEtF8Q] 古いシェルのことを考えたら切りがないよ www.bookshelf.jp/texi/autoconf-ja/autoconf-ja_10.html /bin/shを名乗るならPOSIX sh準拠でいてほしいね
856 名前:login:Penguin mailto:sage [2009/02/20(金) 00:56:59 ID:+4QiWBsa] >>854 いろいろ違うがshの種類によってもさらに違うので一概には言えない。 おかげで、GNU autotools は恐しく涙ぐましい努力をしている。 詳しくは「移植性 シェルスクリプト」あたりでぐぐれ。
857 名前:login:Penguin mailto:sage [2009/02/20(金) 01:42:32 ID:slfVamAC] >>854 以下のスクリプトを test-cdpath.sh として保存する。 --------- #!/bin/sh # #!/bin/bash echo "mkdir -p hoge/foo" mkdir -p hoge/foo pwd cd hoge pwd cd foo pwd exit ---------- $ export CDPATH="/usr/src" $ ./test-cdpath.sh
858 名前:login:Penguin mailto:sage [2009/02/20(金) 11:19:48 ID:UmU5RxVP] >>854 自分で比較してみれば heirloom.sourceforge.net/sh.html
859 名前:login:Penguin mailto:sage [2009/02/22(日) 23:16:28 ID:+4BXOJtP] 自分は普段kshを使ってプログラムを作っています。 ただ自己学習の一環として他のshもやってみようと思い、 cshの本をとりあえず買ってきました。 内容はアルゴリズム特集のようなもので入門書ではないです。そこそこむずかしめ。 ただウィキペディアで見るとcshは現在ほとんど使われて無いとか。 本当でしょうか?無駄金使ってしまいましたかね? 幸い業務で使うわけではないので勉強すれば役に少しは立ちそうですが・・。
860 名前:login:Penguin mailto:sage [2009/02/22(日) 23:23:52 ID:yH/Zc28c] >>859 うちの会社はcshのが多いわけだが。hp-uxとかsolarisとか。aixはどうだっけ?
861 名前:login:Penguin mailto:sage [2009/02/22(日) 23:27:29 ID:i9kTRR2X] >>859 > ただウィキペディアで見るとcshは現在ほとんど使われて無いとか。 > 本当でしょうか?無駄金使ってしまいましたかね? 本当です!(><) 「cshスクリプト使うのはよくないよ〜(considered harmful)」って文書があるくらい。
862 名前:login:Penguin mailto:sage [2009/02/22(日) 23:30:07 ID:+4BXOJtP] >>860 >>861 ありがとうございます。 使ってるところもあるけどあまり推奨されては居ないみたいなんですね。 とりあえずアルゴリズム集っぽい本なので表面的に理解して ざっと勉強してみるくらいはしてみようかと思います。
863 名前:login:Penguin mailto:sage [2009/02/23(月) 00:01:25 ID:02TkTA5B] cshとbashの違いってちょっと方言が違う〜くらいでないの? forがforeachとか あんまりしらないけど
864 名前:login:Penguin mailto:sage [2009/02/23(月) 00:42:30 ID:/AxKX1aI] cshとtcshはどう地がうんすか?
865 名前:login:Penguin mailto:sage [2009/02/23(月) 01:44:47 ID:Abtbk8hJ] cshに知恵がついたのがtcsh。 もはや両方とも過去の遺物。ログインシェルとしては現役だが、 スクリプトでcsh使うのはCOBOLerを名乗るような感じで奇異の目で 見られるのは避けられない。
866 名前:login:Penguin mailto:sage [2009/02/23(月) 01:46:15 ID:RMEIkcBQ] つーかcshはUNIXの話だろ。 linuxはbash
867 名前:login:Penguin mailto:sage [2009/02/23(月) 02:08:49 ID:Pbes3ogj] >>864 最近はcshは単にtcshへのシンボリックリンクというシステムが 多いんじゃないかな? Solarisは最近はどうなのかな?
868 名前:login:Penguin mailto:sage [2009/02/23(月) 08:25:23 ID:c65f34nn] >>866 >linuxはbash なんだよ、それ。
869 名前:login:Penguin mailto:sage [2009/02/23(月) 11:12:11 ID:KfjF9GSX] bash OpenSolaris,mac,linux ksh Solaris
870 名前:login:Penguin mailto:sage [2009/02/23(月) 11:29:59 ID:KfjF9GSX] たまに、SolarisとかHP-UX使ってる輩が、linux系のシェルスクリプトの質問で そのスクリプト動かないんですが、なんて質問してるバカがいる で、OSきくと、SolarisとかHP-UXだったりする あなたのはshellはなんですか?なんて逆質問されたりする
871 名前:login:Penguin mailto:sage [2009/02/23(月) 11:42:17 ID:0iVkUMQ3] sh: HP-UX csh: IRIX bash: OpenSolaris, Mac OS X ksh: AIX, Solaris
872 名前:login:Penguin mailto:sage [2009/02/23(月) 16:32:54 ID:/AxKX1aI] いやsolarisはcshですよ
873 名前:login:Penguin [2009/02/23(月) 17:41:46 ID:YasG1lnX] 久々のメジャーアップデート、定番シェル「bash」が4.0に ttp://journal.mycom.co.jp/news/2009/02/23/031/index.html GNUプロジェクトは20日 (米国時間)、コマンドラインシェル「bash 4.0」を リリースした。多くのUNIX系OSに対応したソースコードは、ライセンスにGNU GPLv3を適用、GNUプロジェクトのFTPサイトや各地のミラーサイト経由で配布 される。 2004年7月以来4年7ヶ月ぶりのメジャーアップデートとなる今回のリリースでは、 zshライクな機能を追加。ディレクトリ名を入力するだけでカレントディレクトリ を変更できる「autocd」、サブディレクトリを再帰的にファイル検索する「globstar」、 入力補完時にディレクトリ名のスペルミスを修正する「dirspell」などのオプションが 新設された。 新しいリダイレクト演算子として「&>>」を追加、標準出力 (>>) と標準エラー出力 (2>&1) を結合したデータをファイルにアウトプットすることが可能になった。case構文中のコマンド 区切り文字として「;&」および「;;&」を追加、いわゆるフォールスルーが実現されている。 bashのラインエディット機能を担うライブラリ「GNU readline」もアップデート、メジャー バージョンのv6.0としてリリースされた。変数「history-size」の定義により履歴の最大数が 設定できるようになるなど、いくつかの変更が加えられている。bash 4.0のビルドには、ソース コードに同梱されるreadline 6.0が必要。
874 名前:login:Penguin mailto:sage [2009/02/23(月) 17:46:37 ID:8fvTtZVR] >>873 globstarが素敵
875 名前:login:Penguin mailto:sage [2009/02/23(月) 18:19:31 ID:0iVkUMQ3] ちったあ処理速度は速くなったのかね
876 名前:login:Penguin mailto:sage [2009/02/23(月) 23:46:13 ID:3cx/aS+U] >>874 find -name のショートカットか。
877 名前:login:Penguin mailto:sage [2009/02/24(火) 00:49:40 ID:A7QF/SS5] locateでいいんでないの?
878 名前:login:Penguin mailto:sage [2009/02/24(火) 08:32:50 ID:p4EZ+me2] locateは、必ずその前にupdatedbかけないと、正しい結果は得られない
879 名前:login:Penguin mailto:sage [2009/02/24(火) 10:05:02 ID:o4EbZdLy] locate使ったこと無いな /etc/cron.daily/slocate.cron は真っ先に消してしまうし。
880 名前:login:Penguin mailto:sage [2009/02/24(火) 14:05:08 ID:A7QF/SS5] updatedbのめんどくささがあってもlocateの速さは魅力
881 名前:login:Penguin mailto:sage [2009/02/24(火) 14:44:59 ID:ijmAhEc5] そんなあなたにinotify対応locate
882 名前:login:Penguin mailto:sage [2009/02/24(火) 18:05:43 ID:mkgOQJW+] ホームディレクトリ以下にある~/.thumbnails の中身を一括でjpgに変換して 容量を節約したいと思っているのですが、以下のスクリプト(convert-thumbnail2jpgl.sh)で convert-thumbnail2jpg.sh: 36: declare: not found と出てしまい、 変数width、heightが文字変数として扱われたままになってしまってif分岐ができません。 もしよろしければどなたか、不具合の原因をご指摘していただけると助かりますm(_ _)m #!/bin/sh find ./ -name "*.png" -print > /tmp/thumb-file-list #PNG画像ファイルをリストアップ for file in `cat /tmp/cache-file` #リストアップされたファイルから順に処理 do res=`expr $file : "\(.*\).png"` convert -background white -flatten $file $file imagescale=`identify $file | egrep -o '[[:digit:]]*x[[:digit:]]*\ '| tr -d "\ "` #ImageMagickを使って"幅x高さ"の書式で画像の大きさを取り出す declare -i width width=`echo -n $imagescale |sed 's/x.*//'` #"幅x高さ"から幅の部分のみを取り出す declare -i height height=`echo -n $imagescale |sed 's/.*x//'` #"幅x高さ"から高さの部分のみを取り出す if [ $width -lt 96 -o $height -lt 96];then #縦横いずれかが96ピクセル以下の画像はnautilus上でそのまま表示される mogrify -format jpg -quality 80 $file #PNGをJPGに変換 mv $res.jpg $res.png #拡張子をPNGに偽装し、本来あったPNGに上書き保存 else mogrify -resize 75% -format jpg -quality 80 $file mv $res.jpg $res.png fi done cat /tmp/thumb-file-list >> thumb-cache-file #(未着手)次回の変換時に偽装されたJPGを再エンコードしないように変換した分を記録
883 名前:login:Penguin mailto:sage [2009/02/24(火) 18:51:30 ID:0/zaoYuK] >>882 > find ./ -name "*.png" -print > ***/tmp/thumb-file-list*** #PNG画像ファイルをリストアップ > for file in `cat ***/tmp/cache-file***` #リストアップされたファイルから順に処理 読み込むファイルを間違ってるから for 文の file に何か別なものが入ってるかもしれない。 一行目を #!/bin/sh -x にするか $ sh -x convert-thumbnail2jpg.sh とかやって頑張れ。 > if [ $width -lt 96 -o $height -lt 96];then ] の前にスペースを入れないとエラーになるはず。 $ sh -x $ A=1 ; if [ "$A" = "1"]; then echo OK ; fi + A=1 + '[' 1 = '1]' sh: [: missing `]'
884 名前:882 mailto:sage [2009/02/24(火) 19:03:27 ID:mkgOQJW+] >> for file in `cat ***/tmp/cache-file***` #リストアップされたファイルから順に処理 >読み込むファイルを間違ってるから for 文の file に何か別なものが入ってるかもしれない。 恥ずかしい間違いをしてしまってすみません… 一時ファイルに自分用に適当なファイル名を付けてしまっていたので、 ここに投稿する際に勝手に変更してました(元スクリプトは両方共/tmp/cache-file) -xで内容が詳しく見られるようですね。もう少し頑張ってみます…
885 名前:882 mailto:sage [2009/02/24(火) 19:13:26 ID:mkgOQJW+] 1行目を #!/bin/bash にして、実行する際も$bash convert-thumbnail2jpg.sh と打つことで解決しました。 shではdeclareが使えず、bashでは使えるようです お騒がせして申し訳ありませんでしたm(_ _)m
886 名前:883 mailto:sage [2009/02/24(火) 20:34:08 ID:0/zaoYuK] >>884 > (元スクリプトは両方共/tmp/cache-file) スクリプトの中で何回か使うものなら cachefile="/tmp/cache-file" とかやって定義してしまったほうがいいと思う。
887 名前:882 mailto:sage [2009/02/25(水) 01:46:08 ID:TZfMttNn] >>886 おかげさまで無事完成しました ありがとうございましたm(_ _)m
888 名前:login:Penguin [2009/02/26(木) 17:54:06 ID:fuSH76wo] 関連スレ シェルスクリプトでGUI pc11.2ch.net/test/read.cgi/tech/1235483221/
889 名前:login:Penguin mailto:sage [2009/02/27(金) 02:01:52 ID:+MZ66A9I] bash4.0 導入した人誰かいまつか ? RHEL5.3 make で error orz...
890 名前:login:Penguin mailto:sage [2009/02/28(土) 00:15:37 ID:2KTcWABE] とりあえず使えてるぞ ubuntu8.10 GNU bash, version 4.0.0(1)-release (x86_64-unknown-linux-gnu) Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <gnu.org/licenses/gpl.html>
891 名前:login:Penguin mailto:sage [2009/02/28(土) 00:25:54 ID:i9TaSY11] >>890 /bin/bash を置き換えたんですか?
892 名前:login:Penguin mailto:sage [2009/02/28(土) 00:31:49 ID:2KTcWABE] /usr/local/に置いただけ 俺には3.2と4.0の違いはあまり関係ないということがわかった
893 名前:login:Penguin mailto:sage [2009/02/28(土) 07:37:33 ID:zB5vZ6QQ] bashのバージョンに依存したスクリプトは趣味でやる以外はあんまり書かないと思うけど
894 名前:login:Penguin mailto:sage [2009/02/28(土) 11:00:16 ID:Tf6NC8nk] bashのバージョンに依存しないスクリプトって、ほぼ/bin/shか。
895 名前:login:Penguin [2009/03/01(日) 14:21:53 ID:b0tpnlkt] "A B C D E F"を "B A D C F E"にしたり、 A B C D E F を B A D C F E にしたりできますか? つまり、AとBを入れ替え、CとDを入れ替え・・・ってな具合です。
896 名前:login:Penguin mailto:sage [2009/03/01(日) 14:54:34 ID:yaPGqr8Y] >>895 宿題乙。 一行タイプのやつ sed -e 's/ /\ /g' | sed -e '1~2{h;d};1~2!G' | xargs 複数行タイプのやつ sed -e '1~2{h;d};1~2!G'
897 名前:login:Penguin mailto:sage [2009/03/01(日) 15:06:32 ID:ClVN3cK/] >>895 echo 'A B C D E F' | tr 'ABCDEF' 'BADCFE'
898 名前:login:Penguin mailto:sage [2009/03/01(日) 16:12:08 ID:jusYIGdM] bash3 とbash4 って互換性大丈夫でしょ。
899 名前:login:Penguin mailto:sage [2009/03/01(日) 16:45:01 ID:b0tpnlkt] >>896 >>897 素晴らしい!! 吹雪の最中に神が現れて、いきなり春になったような心境です。 ありがとうございました。
900 名前:login:Penguin [2009/03/05(木) 13:25:03 ID:k1KCKSK5] 原子番号を元素記号に変換してください。 例) 8 → O 26 → Fe 92 → U
901 名前:login:Penguin mailto:sage [2009/03/05(木) 15:44:08 ID:7EIm6RPk] >>900 宿題は自分でやれ。
902 名前:login:Penguin [2009/03/05(木) 15:55:50 ID:3/9eCgJO] まず原子番号とそれに対応する元素記号の テーブルを作成するところからはじめよう。
903 名前:login:Penguin [2009/03/05(木) 23:21:24 ID:BnKU6WpI] 水素なら w3m -dump ja.wikipedia.org/wiki/%E5%85%83%E7%B4%A0%E3%81%AE%E4%B8%80%E8%A6%A7 | awk '$1 ~ /^1$/{print $3} ヘリウムなら/^1$/を/^2$/に変える。
904 名前:login:Penguin mailto:sage [2009/03/05(木) 23:24:25 ID:feEdgCm8] echo O > 8 echo Fe > 26 echo U > 92 cat %1 俺天才かもしれん。
905 名前:login:Penguin mailto:sage [2009/03/05(木) 23:25:16 ID:feEdgCm8] 間違えた。。。 cat $1だ。
906 名前:login:Penguin mailto:sage [2009/03/05(木) 23:35:39 ID:BnKU6WpI] #!/bin/bash #grepバージョン w3m -dump ja.wikipedia.org/wiki/%E5%85%83%E7%B4%A0%E3%81%AE%E4%B8%80%E8%A6%A7 | grep "^"$1"[[:space:]]"
907 名前:login:Penguin mailto:sage [2009/03/06(金) 00:15:22 ID:4E0LodKQ] >>903 つ awk -v x=番号 '$1 ~ "^" x "$" { print $3 }'
908 名前:login:Penguin mailto:sage [2009/03/06(金) 02:41:09 ID:0+Otyqrv] 全部if文でやれ。
909 名前:login:Penguin mailto:sage [2009/03/06(金) 11:10:42 ID:Es9Fr0vK] w3m -dump ja.wikipedia.org/wiki/%E5%85%83%E7%B4%A0%E3%81%AE%E4%B8%80%E8%A6%A7 | perl -ane 'for (1..118) { print "$_: $F[2]\n" if $F[0]=~/^$_$/;}'
910 名前:login:Penguin mailto:sage [2009/03/06(金) 19:13:45 ID:m/0+PDHQ] 一覧表示でいいなら、これが楽だろ w3m -dump ja.wikipedia.org/wiki/%E5%85%83%E7%B4%A0%E3%81%AE%E4%B8%80%E8%A6%A7 | awk '/^[0-9]/{print $1,$3}'
911 名前:login:Penguin [2009/03/06(金) 20:23:52 ID:+R69oXB9] こんなの波動だ #!/bin/bash echo 原子番号は syuuki=~/syuuki w3m -dump ja.wikipedia.org/wiki/%E5%85%83%E7%B4%A0%E3%81%AE%E4%B8%80%E8%A6%A7 |awk '/^[0-9]/{print $1,$3}' - >$syuuki read genso echo 原子番号$gensoの元素記号は`grep $genso ~/syuuki`です。 grepが未完成 記号だけにしたい。
912 名前:login:Penguin mailto:sage [2009/03/06(金) 22:47:09 ID:tq3ZQvrP] echo 原子番号$gensoの元素記号は`ruby -ane 'BEGIN{genso = ARGV[1]}; if $F[0] == genso; p $F[1]; break; end' ~/syuuki $genso`です。
913 名前:login:Penguin mailto:sage [2009/03/07(土) 09:01:58 ID:Qelg+V+C] 「原子番号」「の元素記号は」などと書かんでいいから、 改行を入れて見やすくしろ、カス。
914 名前:login:Penguin mailto:sage [2009/03/07(土) 20:47:19 ID:zmyZifQf] というかレポートに出すんだからさ もっと初心者っぽく書いてください 期限は明日までです ↓
915 名前:login:Penguin mailto:sage [2009/03/07(土) 21:07:11 ID:cObxxbWz] よし! やっぱり自分でやろう! みなさんすいませんでした。忘れてください
916 名前:login:Penguin mailto:sage [2009/03/07(土) 21:41:55 ID:pgHRyspE] >>914 >>915 w3m -dump d.hatena.ne.jp/keyword/%BB%E0%A4%CD%A4%D0%A4%A4%A4%A4%A4%CE%A4%CB | grep "^.ね.*に$"
917 名前:login:Penguin [2009/03/08(日) 16:51:10 ID:xQcHQnf7] Perlがあればシェルスクリプトなんて要らない Perlのほうが高機能だから
918 名前:login:Penguin mailto:sage [2009/03/08(日) 17:20:38 ID:J6Fw6OuS] Perl は外部コマンド一つ呼ぶのにいちいち system() とか書かなきゃいけない時点で問題外でしょ。 シェルスクリプトは外部コマンドの呼び出しがとても多いんだから、文法レベルでサポートされてないとやってられない。
919 名前:login:Penguin mailto:sage [2009/03/08(日) 18:43:54 ID:4ovvgVHR] $date = `date`;
920 名前:login:Penguin mailto:sage [2009/03/08(日) 19:34:58 ID:J6Fw6OuS] ごめん、見直した。
921 名前:login:Penguin [2009/03/10(火) 18:06:25 ID:IwU0KhJ5] シェルスクリプトってOOじゃないんでしょ? ダサっ Perl使えない落ちこぼれが使う言語、それがシェルスクリプト
922 名前:login:Penguin mailto:sage [2009/03/10(火) 19:16:49 ID:ZRv0wOpe] xargsとsedで文字列加工をしようとしたがうまくいきません コマンド|xargs -n 1 sed 〜 だとコマンドの出力内容がファイル名として解釈されるし コマンド|xargs -n 1 echo|sed 〜 だとxargsがない場合と同じ動作になります 別にシェルスクリプトを echo ${1}|sed 〜 と作って コマンド|xargs -n 1 スクリプト とすると sed -e "s/〜 の s が未定義と怒られる 他に方法はありますか?
923 名前:login:Penguin mailto:sage [2009/03/10(火) 21:34:04 ID:t8WYWXe4] >>921 OO という観点で議論するなら perl じゃなくて もっとまともな言語と比較しろよ。
924 名前:login:Penguin mailto:sage [2009/03/10(火) 21:51:10 ID:hrcV3cEG] >>922 sed 〜 `コマンド` とか?
925 名前:login:Penguin mailto:sage [2009/03/10(火) 22:33:24 ID:HaCEu7vE] >>921 よりによって最も汚いOOを持つ言語を引っ張り出してきたな。。。
926 名前:login:Penguin mailto:sage [2009/03/10(火) 23:10:33 ID:XmHUdl+t] 317 名前:名無しさん@お腹いっぱい。 []: 2009/03/10(火) 18:05:12 シェルスクリプトってOOじゃないんでしょ? ダサっ
927 名前:login:Penguin [2009/03/10(火) 23:13:24 ID:21j8Lv5u] そもそも、ほとんどの処理を外部のコマンドに投げているのに OOはどういうことなのだろうか?
928 名前:login:Penguin mailto:sage [2009/03/10(火) 23:17:44 ID:wgUyESoz] >>922 同僚に聞いてみたんだが、xargs なしだとだめなの? たとえば、ファイル名の置換なら $ find . -print|sed -e "s/〜 になると思うんだけど。 (for i in `find .`〜 のほうが使いやすいと思うが) それか $ コマンド|xargs -i echo {}|sed -e "s/〜 とか? コマンドのところとか、sed で何をしたいのかを明確に してもらえればもうちょっと回答のしようがあると思う。
929 名前:922 mailto:sage [2009/03/10(火) 23:39:56 ID:ZRv0wOpe] >>924 コマンドの結果がファイル名として認識されました。 >>928 xargsなしで今はやっています。 メイク時の出力内容をVC方式に変換するために文字列を以下のように変換しています。 make debug 2>&1 | sed -e "s/:\([0-9][0-9]*\):/(\1):/g" | sed "s/[/]/\\\/g" | sed "s/^/c:\\\cygwin\\\home\\\\${USER}\\\\${PROJNAME}\\\source\\\/g" ただし、今の状態だとメイクが完了するまで出力がされないため、 メイクがどの程度進んでいるかの確認や、エラー/ワーニングにすぐ対応できないのです。 また、できれば2の出力だけをパイプに流したいのですが、方法はありますか? (1は普通に画面表示) イメージは make debug 2>( xargs -n 1 echo|sed 〜) です。 ちなみに コマンド|xargs -i echo {}|sed -e "s/〜 は c:\cygwin\home\ユーザ名\プロジェクト名\source\{} 出力された文字列 となり、うまくいきませんでした。 # echo "{} 文字列" と認識された?
930 名前:login:Penguin mailto:sage [2009/03/11(水) 02:34:25 ID:LOMFWb0Z] >>929 xargs -iの後の{}は'{}'みたくエスケープしないとダメなんじゃないの?
931 名前:login:Penguin [2009/03/11(水) 08:59:36 ID:DFgGOxJ9] Windows PowerShellはOOなのに シェルスクリプトはOOじゃないんだよね 時代遅れだね
932 名前:login:Penguin mailto:sage [2009/03/11(水) 14:33:02 ID:Z5TO7Bpy] >>929 >211 sed -u 〜
933 名前:login:Penguin mailto:sage [2009/03/11(水) 21:43:30 ID:bm/c4JTk] >>931 死ぬほど使いにくいけどな。WindowsPowerShell。
934 名前:login:Penguin mailto:sage [2009/03/11(水) 22:32:39 ID:q2e6tqEw] つか、オブジェクト指向が反省されている今になって、何を時代錯誤な事を言ってる人なんだ。
935 名前:login:Penguin mailto:sage [2009/03/13(金) 11:15:15 ID:6BZk1deA] c++やjavaのoopはあまり良いものではないからね。 特にjavaでしかoopを知らない人って、なんでもかんでもオブジェクト にしてしまうだろうし、あれは非効率的なんだよね。 oopも使えるというならそれはそれでいいけどシェルスクリプトの延長線上 にrubyやperlがあるから、oopに拘るならばそっちを使えばいいだけのはなしだよね。
936 名前:login:Penguin mailto:sage [2009/03/18(水) 18:33:49 ID:RWYXndAF] くだ質の763に、du -hの結果をサイズ順にソートしたいってのがあった。 $ df -h 20K ./foo 8.0K ./bar 5.1M ./hoge 元質問者は勘違いってことで解決してるんだけど、これをカッコよく1 linerで実現する方法はあるんだろうか? 置換して〜ソートして〜とか、泥臭い方法しか思いつかない...
937 名前:login:Penguin mailto:sage [2009/03/19(木) 00:49:00 ID:Ex8kaKKQ] >>936 -h外して後で1024の倍数掛ければいい
938 名前:login:Penguin mailto:sage [2009/03/19(木) 01:30:46 ID:1vjKEAU9] 俺もそう思うけど、 >>936 が話題にしているのは、たぶんdfに限らず、単位を接尾辞とした小数数字を如何にsortするかじゃないかな。
939 名前:login:Penguin mailto:sage [2009/03/19(木) 01:33:02 ID:VEb9NHr7] そーじゃなくて>>936 の出力をソートするスクリプトがあるか、だろう おれも置換したりしないと出来値
940 名前:login:Penguin mailto:sage [2009/03/19(木) 01:34:48 ID:gobNSPAB] >>937 -hは前提条件でお願い。します。
941 名前:login:Penguin mailto:sage [2009/03/19(木) 01:36:54 ID:dcED7bZL] しかしdu -h も微妙なコマンドだな KつきMつきで見たいやつが大半だろうにソートもできるようにしてくれよって気が
942 名前:login:Penguin mailto:sage [2009/03/19(木) 03:20:47 ID:yCb470li] bashで引数が0-9の間ならダンプレベルに設定しようとしています if [ -n $1 ]; then if [ $1 -ge 0 -a $1 -le 9 ]; then dlevel=$1 fi fi これを実行すると引数が無いときと 引数が数字以外のときにエラーメッセージが出てしまいます 引数が数値かどうかチェックする方法がないでしょうか? よろしくおねがいします $ ./dump.sh ./dump.sh: line 22: [: too many arguments $ ./dump.sh 3 dlevel=3 期待通りの動き $ ./dump.sh fufufu ./dump.sh: line 22: [: fufufu: integer expression expected
943 名前:login:Penguin mailto:sage [2009/03/19(木) 04:02:43 ID:3RRVnfG+] if [ -n "$1" ]; then if expr "$1" : '[0-9][0-9]*$'; then
944 名前:login:Penguin mailto:sage [2009/03/19(木) 04:04:43 ID:M6oJqh1N] case "$1" in [0-9]) dlevel="$1" ;; esac
945 名前:login:Penguin mailto:sage [2009/03/19(木) 04:57:28 ID:yCb470li] >>943 , 944 どうもありがとうございます caseの方を採用させていただきました
946 名前:login:Penguin mailto:sage [2009/03/19(木) 13:59:30 ID:KDP/tv8i] >>937-941 やぱしそれなりに泥臭いやり方しかないですかね? 最初、sortはバッファサイズ変更時に GBとかMBとか見てくれるんだからきっと、とか思ったのに。
947 名前:login:Penguin mailto:sage [2009/03/19(木) 14:48:56 ID:+WS3QA7Q] -h 外せば済む話なのに 苦労してスクリプト書く意味がわからん。
948 名前:login:Penguin mailto:sage [2009/03/19(木) 15:44:21 ID:VEb9NHr7] 目的が「duの結果をソートしたい」じゃなくて「このテキストを(意味を考えて)ソートしたい」だと何度(ry
949 名前:login:Penguin mailto:sage [2009/03/19(木) 15:54:38 ID:QnAt/IUj] >>948 dfかduかはっきりしてくれ。duならxduをつかっとけ。MやGよりも視覚的にサイズを 表現してくれた方が分かりやすい。もちろんソートできる。
950 名前:login:Penguin mailto:sage [2009/03/19(木) 19:05:34 ID:KDP/tv8i] >>949 元質問はオレなんだが、>>948 のとおり、別にduでもdfでもなく、GとかMとかのサイズ指定で かつ小数点付きのを、どうソートするか、というのが意図だったわけで。 質問の仕方がまずいのは認める。すまん。
951 名前:login:Penguin [2009/03/20(金) 10:34:47 ID:OD1Bm4W7] シェルスクリプトで開発したツールをshcでコンパイルしたとして、 それがシェルスクリプトだとバレることってありますか? もちろん調べればわかるでしょうけど 一般的なエンドユーザの能力ではどうでしょうか?
952 名前:login:Penguin mailto:sage [2009/03/20(金) 11:49:16 ID:vtofDqpI] >>951 つ chmod 311 a.out
953 名前:login:Penguin mailto:sage [2009/03/20(金) 21:45:28 ID:Pky/qqR2] tar
954 名前:login:Penguin mailto:sage [2009/03/20(金) 21:46:03 ID:Pky/qqR2] tar tvf filename.tar の結果をファイル名順にソートするにはどうすればいいでしょうか?
955 名前:login:Penguin mailto:sage [2009/03/20(金) 21:54:15 ID:vtofDqpI] sort -k 6
956 名前:login:Penguin mailto:sage [2009/03/20(金) 22:29:18 ID:Pky/qqR2] >>955 ありがとうございます。以下で出来たと思います。 tar tvf filename.tar | sort -k 6 ファイル名が9番目に来ることがあるのは、OSによるものでしょうか?
957 名前:login:Penguin mailto:sage [2009/03/20(金) 22:30:46 ID:vtofDqpI] ロケール依存じゃね? 日付の表示
958 名前:login:Penguin mailto:sage [2009/03/20(金) 22:45:25 ID:Pky/qqR2] >>957 なるほど、ありがとうございます。 当初の質問とズレますが ls -lRのディレクトリ名が 職場の環境では temp: となり 自宅では ./temp: となるのもロケール依存の問題でしょうか?
959 名前:login:Penguin mailto:sage [2009/03/20(金) 23:54:41 ID:vtofDqpI] ls -lR temp ls -lR の違いって事はない?
960 名前:login:Penguin mailto:sage [2009/03/21(土) 10:08:06 ID:/JVnxKfV] >>959 引数にディレクトリを指定せずに>>958 の違いがでます。 OSは職場がAIXで、自宅がCentOSです。 結果のリストをテキストファイルに出力してプログラムで利用しているので、 フォーマットが違うと問題があるのですが、 行末に「:」があればディレクトリと認識したり、リストのフォーマットに応じたプログラムを 書けばいいのかなと思います。 親切にありがとうございました。
961 名前:login:Penguin mailto:sage [2009/03/21(土) 13:39:10 ID:ZdP11rWE] AIXならコードベースが違うから、細かい書式も違うだろうね。 find . -printあるいはfind . -lsの結果を利用した方がいいかもね。 こっちは加工されることを前提とした出力だから。 ls -lRはそうじゃない。
962 名前:login:Penguin [2009/03/24(火) 21:43:58 ID:vhkRQKv/] bash で、複数の戻り値を返すにはどうやる? func foo() { return VAL1 VAL2 } (VAL1, VAL2)=$(foo) こんなのがやりたいんだけど。 今まで思いついた例では、 1、ファイル経由で帰す。 echo $VAL1 >/tmp/$PID.val1 echo $VAL2 >/tmp/$PID.val2 可能だけどちょっと無駄。 2、readをつかう。 #!/bin/bash $(foo) | read VAL1 VAL2 やってみたけど、動かない。なんとかしてくれ!。
963 名前:login:Penguin mailto:sage [2009/03/24(火) 22:07:39 ID:fdZEc0lM] returnで返すことにこだわる意味があるん? VAL1 VAL2 に関数内で値つっこめばいいだけじゃないの? グローバル変数がどうのとか、シェルで気にする必要ないだろと個人的に思うし。
964 名前:login:Penguin mailto:sage [2009/03/24(火) 22:13:47 ID:JcSO3hFa] >>962 ttp://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html >関数ローカルの変数は、組み込みコマンド local で宣言できます。 >普通は、変数とその値は関数とその呼び出し側で共有されます。
965 名前:962 [2009/03/24(火) 23:09:01 ID:vhkRQKv/] グローバル変数で受け渡し? んまあそうなんですけど、 なんでもグローバルという、BASIC言語みたいなのは生理的にイヤ。 可能な限り普段から全部 local 宣言つけてますので。 なんとか、return VAL_A VAL_B とかムリっすか?
966 名前:login:Penguin [2009/03/24(火) 23:27:22 ID:JcSO3hFa] >>965 無理 > return [n] > 指定した返り値 n で関数を終了させます。 > n を省略すると、返却ステータスは関数内で最後に実行したコマンドの返却ステータスになります。 スクリプトを分けて標準入出力で受け渡すくらいしか思いつかん
967 名前:login:Penguin mailto:sage [2009/03/24(火) 23:31:50 ID:elKnmt6d] 俺も昔戻り値二つ返したかったが諦めたことがある。 泣く泣くグローバルにした。
968 名前:login:Penguin mailto:sage [2009/03/24(火) 23:32:20 ID:LPmFGK87] >>965 無理矢理だけどこんなことは出来る。 foo () { echo "$VAL1 $VAL2" } VALS=(`foo`) VAL1=${VALS[0]} VAL2=${VALS[1]}
969 名前:login:Penguin mailto:sage [2009/03/25(水) 12:00:35 ID:ZZ2mmRGj] グローバル変数がイヤならばそもそも sh じゃなくて別のスクリプト言語で書け。 そういう言語なんだからあきらめて受け入れろ。 無理に技巧をこらしたところで逆に可読性を落とすだけ。
970 名前:login:Penguin mailto:sage [2009/03/25(水) 12:15:44 ID:NaCjRRoe] >>969 そうおもう。perlでもrubyでもgaucheでもいいから。 でも、延長線上で使えるrubyのほうが馴染みやすいかも
971 名前:login:Penguin mailto:sage [2009/03/25(水) 12:23:07 ID:uD+uLQB8] >>962 > return VAL1 VAL2 < echo VAL1 VAL2 してreadしる
972 名前:login:Penguin mailto:sage [2009/03/25(水) 17:28:54 ID:GtIifwrA] /tmpに書け
973 名前:login:Penguin mailto:sage [2009/03/26(木) 15:32:50 ID:3e22XvSN] シェルスクリプトを始めて勉強するのですが、 入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界(www.amazon.co.jp/dp/4797321946 ) と UNIXシェルスクリプトコマンドブック(www.amazon.co.jp/dp/4797330635 ) どちらで勉強するのが良いでしょうか?
974 名前:973 mailto:sage [2009/03/26(木) 15:33:45 ID:3e22XvSN] ×始めて ○初めて orz
975 名前:login:Penguin mailto:sage [2009/03/26(木) 16:30:55 ID:5RpvIQgk] 入門bashがオヌヌメ
976 名前:login:Penguin mailto:sage [2009/03/27(金) 00:19:45 ID:hx4pY+SP] どれでもいっしょでヌメヌメ
977 名前:login:Penguin mailto:sage [2009/03/27(金) 01:38:27 ID:SSuQKmC1] >>976 >>975 ありがとうございます。 まずは>>975 さんにヌメヌメして頂いた入門Bashから勉強していきたいと思います。
978 名前:login:Penguin mailto:sage [2009/03/27(金) 02:32:52 ID:3RSixa0K] つ「全部」
979 名前:login:Penguin mailto:sage [2009/03/29(日) 04:23:46 ID:k6vYgSJE] とあるディレクトリ以下に存在する 特定の拡張子のファイルのみについてファイルサイズの合計を知りたい場合、 最もマシンに負荷を与えずに結果を出すにはどの方法が適しているでしょうか? ・ duコマンドだと除外パターンのパラメータしかない ・ lsの結果の拡張子でgrepした後、ファイルサイズ部分をawkしてexprで足し算だと負荷が結構かかる という感じで、もっとサクっと結果を軽い処理で出せるような気がするんですが・・・。
980 名前:login:Penguin mailto:sage [2009/03/29(日) 05:38:56 ID:RIZc4nP9] findとawkで
981 名前:login:Penguin mailto:sage [2009/03/29(日) 07:07:03 ID:HsEQt0tU] >・ lsの結果の拡張子でgrepした後、ファイルサイズ部分をawkしてexprで足し算だと負荷が結構かかる expr要るのか? ls -Rl | grep "\.suffix" | awk '{size += $5} END {print "total " size}' find -name \.suffix -printf "%s\n" | awk '{size += $1} END {print "total " size}'
982 名前:login:Penguin mailto:sage [2009/03/29(日) 15:49:16 ID:HhnBqalt] >-name \.suffix o... rz
983 名前:login:Penguin mailto:sage [2009/03/30(月) 08:01:30 ID:4/oTu4d/] 10台くらいサーバセットアップする必要があり、 それぞれのapacheの設定ファイルのIP部分だけ変えたいのですが、 何かシンプルで良い方法ってあるでしょうか? 環境変数設定kono_server_no_ipを設定して、 sedあたりで設定ファイルのIP部分をkono_server_no_ipに置換処理、 みたいな感じをぱっと思いついたのですが、 もっとベターな方法ってあるでしょうか?
984 名前:login:Penguin mailto:sage [2009/03/30(月) 10:33:16 ID:rBZKWvDE] >>983 まずサーバ毎の環境変数(kono_server_no_ip)の設定はどうやるの? 環境変数の設定をエディタでやったら本末転倒だよね? 「このIP」が自分自身のipアドレスでいいなら、ifconfigで取得してsedで置換。 あと、シンプルじゃなくていいならPuppetとか。