- 1 名前:1様 [2009/04/03(金) 22:17:43 ID:0qFlvOW9]
- UNIX板のスレを見ている方も多数おられるかと思いますが、
まあそれはそれとして、BASHウゼーとか言われる心配なく 平和にLINUX的スクリプト談義しましょうよ。 初めての自作スクリプト、自信ないから見てください。な初心者から トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで いろいろな人に参加して頂けると嬉しいです。 perlやらPythonやらの話が混ざっても良いんでない? Part4 : pc11.2ch.net/test/read.cgi/linux/1210999497/ 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あたりに色々と。
- 368 名前:login:Penguin mailto:sage [2009/08/27(木) 00:14:49 ID:99inMd3q]
- >>366
シェルスクリプトってexecvできるってことか。てっきりsystemで動かしてると思ってた。
- 369 名前:login:Penguin [2009/08/27(木) 13:09:03 ID:1TOKv6MA]
- ファイルを読み込んで最後の5行だけ表示したいんだけど
最後の5行ってのをどうすれば計算できますか? とりあえず #!/bin/bash while read LINE; do echo $LINE done < "test.file" ってので行けると思うんですが、行数カウントとかどうすればいいでしょうか?
- 370 名前:login:Penguin mailto:sage [2009/08/27(木) 13:27:38 ID:bqfxDAXQ]
- tail
- 371 名前:login:Penguin [2009/08/27(木) 15:06:58 ID:g/ERTIS/]
- >>369
一番簡単なのは、tailコマンドに丸投げすること。 初心者だが、シェルスクリプトで書いてみた。 queueを使おうと考えたが、配列の添え字が循環するデータ構造にしてみた。 うまく動きましたよ。
- 372 名前:369 [2009/08/27(木) 15:59:46 ID:1TOKv6MA]
- #!/bin/bash
dat=`tail -n 5 $logdat` SAVE_IFS=$IFS IFS=' ' CNT=0 for BUF in $(cat $logdat) do CNT=$(expr $CNT + 1) done IFS=$SAVE_IFS こうしてみたら cat : **************************** : そのようなファイルやディレクトリはありません とか出るんだけど何故ここで「cat」とか「そのような〜」とか出るのかわからん。 書き方間違ってますか?
- 373 名前:login:Penguin mailto:sage [2009/08/27(木) 16:07:37 ID:GGkjBXca]
- よく見てみろ。7行目にcatがあるぞ
- 374 名前:372 [2009/08/27(木) 17:02:32 ID:1TOKv6MA]
- うげっ!
めちゃめちゃ初歩的ミスやらかしてる 修正してうまく動くようになったです。 恥ずかし・・・
- 375 名前:364 mailto:sage [2009/08/29(土) 04:48:03 ID:oAtS9pnj]
- レス遅れましたが、ありがとうございます>>366
bash等ではなくてカーネルに依るとは分かりませんでした。 winだとBOM付ける方がスタンダードっぽい のでどうにかなるか、考えたもので。
- 376 名前:login:Penguin mailto:sage [2009/08/29(土) 09:39:58 ID:l0gsahaz]
- >>375
>winだとBOM付ける方がスタンダードっぽい SJISだろSJIS。
- 377 名前:login:Penguin mailto:sage [2009/08/29(土) 10:52:08 ID:VmNW8gRO]
- www.youtube.com/watch?v=bYcF_xX2DE8
これは新しい
- 378 名前:login:Penguin mailto:sage [2009/08/29(土) 10:56:18 ID:l0gsahaz]
- while [ 1 == 1 ]
がキモイ。trueでええやん。
- 379 名前:login:Penguin mailto:sage [2009/08/29(土) 10:59:15 ID:Tfl9hfvi]
- while :
- 380 名前:login:Penguin mailto:sage [2009/09/10(木) 22:53:09 ID:io9H5fc4]
- grepは検索に一件もひっかからなかったら、何も返してきませんよね
if [grep ほげほげ != ""] とnullと比較したいのですが、実行すると文句を言ってきます grep -c ほげほげ = 0とすることもできますが、勉強のために書いているので それはさけたいです 初歩的な事ですいません、ぜひエロい方に教えてもらいたい
- 381 名前:login:Penguin [2009/09/10(木) 23:27:42 ID:kkfd/kxq]
- >>380
くだ質の人?マルチポスト乙。 とりあえず、もっと基本的な事を勉強した方がいいと思うよ。 grep ....... if [ $? ]; then echo "マッチ成功" else echo "マッチ失敗" fi
- 382 名前:login:Penguin [2009/09/10(木) 23:35:17 ID:kkfd/kxq]
- >>380
あー、すまなかった。 >実行すると文句を言ってきます どう文句言われるのかを書かないとね。 たぶん、[grep ほげほげ != ""] を [ grep ほげほげ != "" ] にすればうまく動くと思う。 '[' と ']' との間にはスペースを入れることに注意。 実は [ ] はコマンドだから、スペースを入れないと式が引数として扱われない。 こう説明すれば理解できるだろうか。 以下の(1), (2)は等価である。 (1) if test -f /etc/passwd; then 文; fi (2) if [ -f /etc/passwd ]; then 文; fi
- 383 名前:login:Penguin [2009/09/10(木) 23:41:36 ID:kkfd/kxq]
- コマンドじゃねーや。間違い。
ところで全角スペースがあるのが気になるのだが、そこは大丈夫なのか?
- 384 名前:login:Penguin mailto:sage [2009/09/11(金) 00:14:43 ID:r5Zq4SIa]
- >>382
> 実は [ ] はコマンドだから、 [ がコマンド。(bash の内部コマンド) > こう説明すれば理解できるだろうか。 かえって混乱するんじゃね。
- 385 名前:login:Penguin mailto:sage [2009/09/11(金) 00:53:31 ID:tUDxxMlL]
- [ は内部コマンドではない
- 386 名前:login:Penguin mailto:sage [2009/09/11(金) 00:55:26 ID:sW2bvbaU]
- >>385
help [
- 387 名前:login:Penguin mailto:sage [2009/09/11(金) 01:18:00 ID:1ovlFoMD]
- cshです。
a.cshの実行中にb.cshを実行したいです。 で、a.cshで宣言した変数をb.cshでも引き継ぎたいのです。 さらに、b.cshに引数を渡して実行したいのです。 a.cshの実行中に csh b.csh だと引数をつけて実行できますが、変数が引き継がれないようです。 source b.cshだと変数は引き継がれますが、引数をつけて実行できません。 どうしたらいいのん。
- 388 名前:login:Penguin mailto:sage [2009/09/11(金) 05:26:58 ID:bKplMqH/]
- /usr/bin/[の方も、昔は/usr/bin/testへのハードリンクだったが
今は違うんだな。やっぱり日々勉強しないと…
- 389 名前:login:Penguin mailto:sage [2009/09/11(金) 07:46:22 ID:r5Zq4SIa]
- >>385
type [
- 390 名前:login:Penguin mailto:sage [2009/09/11(金) 08:15:42 ID:9DDccZ59]
- >>387
>source b.cshだと変数は引き継がれますが、引数をつけて実行できません。 引数をつけて実行できるんじゃない? :::::::::::::: a.csh :::::::::::::: #!/bin/csh -f set val="hello" echo "a.csh:$* $val" source b.csh 1 2 3 echo "a.csh:$* $val" :::::::::::::: b.csh :::::::::::::: #!/bin/csh -f echo "b.csh:$* $val" % ./a.csh a.csh: hello b.csh:1 2 3 hello a.csh: hello
- 391 名前:login:Penguin [2009/09/14(月) 22:11:59 ID:VDeHYP1G]
- #!/bin/bash
trap "logoutfunc_ctrl; logout" 1 2 3 15 最初の2行にこう記述してるんですが、logoutせずにプロンプト画面に戻る方法がありますか? bashにこのシェルを書いているのでログイン後は必ずこのシェルが立ち上がるようになってます。 このシェルを実行するのは特定のユーザーのみで、他にこのシェルがあるサーバーにログインは出来ません。 (他のユーザーはrootを除いて全てログイン出来ないようにしてます) プロンプト画面には触らせないようにしたいのですが、これでプロンプトに抜けれるという人がいるので どういった方法があるのか教えていただけないでしょうか。
- 392 名前:login:Penguin mailto:sage [2009/09/14(月) 22:59:21 ID:SeJGwizk]
- なんかよくわからんけど
ログインシェルを変えちゃったら。
- 393 名前:login:Penguin [2009/09/14(月) 23:18:36 ID:DAW4cbiO]
- trapでlogoutしてるのにそんなこと出来るの?
おれも悪さされないようにtrapでlogoutしてるからもしそういう抜け道あるなら対策したいな。
- 394 名前:login:Penguin mailto:sage [2009/09/15(火) 23:31:19 ID:XlHfxREn]
- >>391
Ctrl+Z?
- 395 名前:login:Penguin mailto:sage [2009/09/16(水) 01:29:49 ID:N6PYBStw]
- SIGTSTPもそうだけど、普通にbash起動できたりしないの?
- 396 名前:login:Penguin mailto:sage [2009/09/17(木) 16:40:19 ID:y7kbSG6/]
- 現在、/ 配下に次のディレクトリがある(CentOS 5.3)。
bin boot dev etc home lib lost+found media miscmnt net opt proc root sbin selinux srv sys tmp usr var で、例えばの話なんだけど、/var以下と/etc以下のファイルで72時間以内に更新されたファイルだけを検索するために、 /var以下と/etc以下だけを検索するんじゃなくて、/varと/etcの両ディレクトリ以外を検索対象から除外した上で / を検索する、という手法をとる場合、次のようなワンライナーが考えられる(改行してるけど実際は一行)。 find / \( -path '/bin/*' -o -path '/boot/*' -o -path '/dev/*' -o -path '/home/*' -o -path '/lib/*' -o -path '/lost+found/*' -o -path '/media/*' -o -path '/misc/*' -o -path '/mnt/*' -o -path '/net/*' -o -path '/opt/*' -o -path '/proc/*' -o -path '/root/*' -o -path '/sbin/*' -o -path '/selinux/*' -o -path '/srv/*' -o -path '/sys/*' -o -path '/tmp/*' -o -path '/usr/*' \) -prune -o -type f -mtime -3 -print で、これを find / $OPT -type f -mtime -3 -print と書くために、 OPT=\( -path '/bin/*' -o -path '/boot/*' -o -path '/dev/*' -o -path '/home/*' -o -path '/lib/*' -o -path '/lost+found/*' -o -path '/media/*' -o -path '/misc/*' -o -path '/mnt/*' -o -path '/net/*' -o -path '/opt/*' -o -path '/proc/*' -o -path '/root/*' -o -path '/sbin/*' -o -path '/selinux/*' -o -path '/srv/*' -o -path '/sys/*' -o -path '/tmp/*' -o -path '/usr/*' \) -prune -o とシェル変数を定義する(改行してるけど実際は一行)。で、次を実行するとエラーとなる。 # find / $OPT -type f -mtime -3 -print find: パスは評価式の前におかなければならない Usage: find [-H] [-L] [-P] [path...] [expression] これ、エラーになる原因と対策方法分かる人いたら誰か教えて。
- 397 名前:login:Penguin [2009/09/17(木) 16:45:22 ID:HEpWOKWA]
- ここでも読んどけ
業務でラクするためのUNIXテクニック集 ttp://codezine.jp/article/corner/211
- 398 名前:login:Penguin mailto:sage [2009/09/17(木) 16:53:55 ID:zpBnmmE6]
- >>396
とりあえずecho $OPTして良く考える。 でも目的からいって find /etc /var ... でいいと思うんだがなんでそんなめんどくさいことするの?
- 399 名前:login:Penguin mailto:sage [2009/09/17(木) 16:57:51 ID:ih+TQz/f]
- 次のようなワンライナーが考えられる、って書いてあるし
宿題じゃないの
- 400 名前:login:Penguin [2009/09/21(月) 16:40:00 ID:nYMA5TsQ]
- >>396の方法の是非は置いといて、
一気に難しい事やろうとしてダメな場合にそのままデバッグしようとする姿勢からして間違ってるのね 最も確実にできる単純な所からOKなのを確認しつつ、少しずつ複雑化していけばいいのにね 単純化もせずにここにポストしちゃうのもダメなのね
- 401 名前:login:Penguin mailto:sage [2009/09/22(火) 01:02:32 ID:CsobNaX3]
- >>396
> エラーになる原因 > OPT=略 -prune -o -prune と -o は、OPT= って式の右辺とは認識されていない。
- 402 名前:login:Penguin [2009/09/22(火) 21:32:32 ID:tUDMNFi9]
- WinでSJISだろSJISって言った人は誰ですか
無知はレスしなくていいと思うぞ
- 403 名前:login:Penguin mailto:sage [2009/09/24(木) 23:42:28 ID:SAfgo/2/]
- shでプロセス置換をすることはできますか?
- 404 名前:login:Penguin mailto:sage [2009/09/25(金) 07:39:03 ID:DPMjFFBq]
- exec ?
- 405 名前:login:Penguin mailto:sage [2009/09/25(金) 08:28:22 ID:Kq0dBVoG]
- bashの<(hoge)のようなやつです
- 406 名前:login:Penguin mailto:sage [2009/09/25(金) 09:10:47 ID:fabAV8W5]
- 普通のshにはないんじゃないかな。実はshという名前でも実体はbashという
こともよくあるが。ないときはmkfifo使えばなんとかなりそう。
- 407 名前:login:Penguin mailto:sage [2009/09/25(金) 09:28:37 ID:Kq0dBVoG]
- >>406
mkfifoを使ってみます。 ありがとうございます。
- 408 名前:login:Penguin mailto:sage [2009/09/25(金) 09:49:07 ID:7/BCzuXv]
- >>403
sh って、どの sh?
- 409 名前:login:Penguin mailto:sage [2009/09/25(金) 19:55:47 ID:Kq0dBVoG]
- >>408
shって何種類もあるんですか?
- 410 名前:login:Penguin mailto:sage [2009/09/26(土) 16:08:50 ID:Jy0DLp0d]
- >>409
約2000種類くらいある。
- 411 名前:login:Penguin mailto:sage [2009/09/26(土) 16:27:53 ID:XBVVzvrd]
- 一行目の
#!/bin/sh みたいな表記ってなんていうんだけ?
- 412 名前:login:Penguin mailto:sage [2009/09/26(土) 16:29:13 ID:Jy0DLp0d]
- >>411
マジックナンバー
- 413 名前:login:Penguin mailto:sage [2009/09/26(土) 16:58:06 ID:v336ZdvP]
- ホラ吹きはやめなはれ
- 414 名前:login:Penguin mailto:sage [2009/09/26(土) 17:36:19 ID:pX1JKn/Q]
- shebang
- 415 名前:login:Penguin mailto:sage [2009/09/27(日) 18:09:06 ID:251MLAqQ]
- あるフォルダの中のフォルダのうち中身が空のフォルダをまとめて削除するにはどうすればいいですかね?
- 416 名前:login:Penguin mailto:sage [2009/09/27(日) 18:14:24 ID:Co+mxy4N]
- find あるフォルダ -type d -empty かな
- 417 名前:login:Penguin mailto:sage [2009/09/27(日) 18:17:18 ID:bShqvf/m]
- find . -type d -exec rmdir --ignore-fail-on-nonemytp -p {} \;
- 418 名前:login:Penguin [2009/09/27(日) 18:36:06 ID:251MLAqQ]
- >>417
rmdir: failed to remove `.': 無効な引数です とのことでした。。 >>416 rm -r `find . -type d -empty`としたら期待通りの動作をしてくれました! 有難うございました。
- 419 名前:login:Penguin mailto:sage [2009/09/27(日) 18:44:30 ID:ZlHSYQ4N]
- 何も言うまい
- 420 名前:login:Penguin [2009/09/27(日) 21:31:53 ID:qHK4F1Gh]
- ストリームから特定のバイト数分だけ読み出すことは出来ますか?
例えば標準入力の先頭1024バイトだけ読みたいのですが、readやらheadでは できないみたいでつ。 外部の処理系に投げるしかないのでしょうか。
- 421 名前:login:Penguin [2009/09/27(日) 21:33:25 ID:qHK4F1Gh]
- すみません
head -c 1024 で事故解決しました。
- 422 名前:login:Penguin [2009/09/28(月) 12:47:00 ID:VZAZLgKn]
- Bash で並列処理はできますか?
バックグラウンドでプロセスを実行する方法が考えられますが 標準出力を変数に代入できません。 スレッドみたいなものがあればいいのですが。 アドバイスよろしくです。
- 423 名前:login:Penguin mailto:sage [2009/09/28(月) 13:23:09 ID:RgE5Se+Y]
- >>422
凝ったことやりたいならちゃんとした言語使った方がいいんじゃないの。
- 424 名前:login:Penguin mailto:sage [2009/09/28(月) 14:19:04 ID:I6g/kNjx]
- >>422
標準出力の代わりにファイルを利用するだけでいいと思うけれど 何か制限とかあるの?
- 425 名前:login:Penguin mailto:sage [2009/09/28(月) 22:19:09 ID:mq5nI+Gq]
- >>422
waitとかって使えなかったっけ?
- 426 名前:422です [2009/09/28(月) 22:48:49 ID:ZC7KG7rU]
- >>424
それも考えたのですが、ちょっとアレゲな文字列を渡したいので なるべく標準入力経由で流し込めたらいいなーと。 >>425 waitするのはいいのですが、 s=`sleep 10; echo hi` & これだと、確かにバックグラウンドで実行されますが、出力が変数sに代入されません。 とりあえずtmpfile作ってお茶を濁すか、 スレッドをサポートしている他の言語で書いてみます ありがとうございました。
- 427 名前:login:Penguin mailto:sage [2009/09/29(火) 09:01:16 ID:PNFzix6B]
- アレゲな文字列だとなぜ標準入力にしたいのだろう??
- 428 名前:login:Penguin mailto:sage [2009/09/29(火) 22:03:38 ID:to/uYF9s]
- fifoが使えれば便利なんだけどな。
- 429 名前:login:Penguin [2009/10/23(金) 00:04:27 ID:wj32ZQ75]
- bash@sygwinです。
echo -e `hoge.exe` みたいなスクリプトを書いて実行した場合、 hoge.exeの出力(標準出力へ出力)が改行されないのですが、 開業して表示されるようにするにはどうしたらいいですか?
- 430 名前:login:Penguin mailto:sage [2009/10/23(金) 00:06:21 ID:fL6bmEfB]
- hoge.exe
- 431 名前:429 mailto:sage [2009/10/23(金) 00:07:47 ID:wj32ZQ75]
- サンプルとして hoge.exeとしましたが、
実際は引数をとるプログラムであり、そのためにスクリプトを書いています。
- 432 名前:login:Penguin mailto:sage [2009/10/23(金) 00:08:01 ID:egc7pXKl]
- printfでおk
- 433 名前:EriFWUWPcvxE mailto:bdhcd0a0.@gmail.com [2009/10/23(金) 00:26:28 ID:o9S12OWs]
- In the case of a clock it is, of course, infinitely unlikely. ,
- 434 名前:login:Penguin mailto:sage [2009/10/23(金) 01:18:00 ID:lIwBP5a7]
- >>429
| と nkf か iconv かなんか使って 改行コードを変換すればいいかと。
- 435 名前:login:Penguin mailto:sage [2009/10/23(金) 07:31:49 ID:sqWecNL1]
- 要するに、
$ echo `ls` で改行されないと言ってるんじゃないの? 素直に $ ls と打てカス じゃ駄目か。
- 436 名前:login:Penguin mailto:sage [2009/10/23(金) 07:52:35 ID:fL6bmEfB]
- >>435
>>431を読むに、ダメなんだろう。
- 437 名前:login:Penguin mailto:sage [2009/10/23(金) 10:22:31 ID:iTZCWKBJ]
- echo "`ls`"
- 438 名前:veylKBAi mailto:cb1353an.@gmail.com [2009/10/23(金) 22:03:01 ID:t9W+SBEv]
- And you get to travel to interesting places and talk to interesting people about interesting questions. ,
- 439 名前:login:Penguin mailto:sage [2009/10/23(金) 22:40:25 ID:fL6bmEfB]
- Yes I like rice ball.
- 440 名前:login:Penguin mailto:sage [2009/10/25(日) 05:44:06 ID:nuWGLSpK]
- This is a Tom
- 441 名前:login:Penguin [2009/11/04(水) 22:54:27 ID:MYi0pRqJ]
- Bash シェルスクリプトで、
実行後にコマンドラインに文字列を入力した状態にするのは 可能ですか? $ ./x.sh $ abc ←'abc' が入った状態にする シェルスクリプトでなくて、C とかでもよいですが。
- 442 名前:login:Penguin mailto:sage [2009/11/05(木) 10:53:31 ID:yUF/IyOA]
- >実行後にコマンドラインに文字列を入力した状態にするのは
set ? >$ ./x.sh >$ abc ←'abc' が入った状態にする read ?
- 443 名前:441 mailto:sage [2009/11/05(木) 19:29:56 ID:gkVZzLQn]
- x.sh が終了した後に、
コマンドラインにキーボードで 'abc' と入力した状態になっている という意味あいです。
- 444 名前:login:Penguin mailto:sage [2009/11/05(木) 19:59:20 ID:NZnr/6iR]
- それ、もしできるのなら
セキュリティ的にマズーくないか?
- 445 名前:login:Penguin mailto:sage [2009/11/06(金) 00:09:34 ID:eRT3M+Ha]
- >>443
なんでそんなことしたいの?
- 446 名前:login:Penguin [2009/11/06(金) 08:33:57 ID:mW6ePEE5]
- 小数点第三位くらいの数値を1000で割りたいのですが、bcで計算すると0.123456が.123456にされてしまって正しくrrdtoolに値を渡せなくて困っています。
どなたか対策をご存知の方がいらっしゃいましたらご教授頂けないでしょうか。
- 447 名前:login:Penguin mailto:sage [2009/11/06(金) 12:03:55 ID:eRT3M+Ha]
- >>446
sed 's/^\./0./'
- 448 名前:441 mailto:sage [2009/11/06(金) 19:41:15 ID:/t9QHrwg]
- >445
ctrl-r で、history のリストから検索して、 ctrl-e とすると、実行ではなく編集になりますよね、 あれがやりたかったんです。 ただ、その検索の部分を(例えば)grep で検索したり、 選ぶ部分をメニュー形式というか対話型にしたり、(その他もろもろ) 結果を実行ではなく、編集にしたい。 なので、シェルスクリプトとかで実行した結果をコマンドラインに 入れられないかなと思ったんです。 ちと無理だったかな。 >>442,444,445 どうもです。
- 449 名前:login:Penguin mailto:sage [2009/11/06(金) 19:45:45 ID:q+Z8sAfI]
- eshell使えば
- 450 名前:login:Penguin mailto:sage [2009/11/06(金) 19:46:49 ID:eRT3M+Ha]
- >>448
コマンドラインに戻す必要あるのかな。 そのアプリの中で編集させて実行しちゃえば?
- 451 名前:login:Penguin mailto:sage [2009/11/06(金) 21:42:41 ID:ebfIAKEi]
- >>448
bashなら、↓で実現できないかな? $ cat hoge.sh echo `date` >> ~/.bash_history $ sh hoge.sh $ history -r $ history | grep 2009 15 2009年 11月 6日 金曜日 21:37:38 JST 16 history | grep 2009 $ shopt -s histverify $ !15 2009年 11月 6日 金曜日 21:37:38 JST (histverifyがonだとカーソルはコマンドラインの行に位置したままで、編集可) # 嘘書いてるかもしれんので、間違ってたら指摘求む
- 452 名前:login:Penguin mailto:sage [2009/11/06(金) 21:57:06 ID:ebfIAKEi]
- 最初に
HISTFILE=/tmp/.bash_history とかして一時ファイルにしたほうがよいかも
- 453 名前:login:Penguin mailto:sage [2009/11/06(金) 22:03:08 ID:CfRBFuVC]
- 質問。環境はbashです。
URLをテキストファイルに溜め込むスクリプトを作りたくて 弄りはじめたんですが、詰まってしまったので‥ 他力本願! 希望する結果: $echo ${URL} > url.txt $cat url.txt aaaa.co.jp bbbbaaa.com としたい。 #!/bin/bash NUM=0 while [ ${NUM} -lt 5 ] do URL=`zenity --entry "$1"` NUM=`expr ${NUM} + 1` done URLに複数の文字列を溜め込みたいのですがどうするべきでしょうか? ググってみると配列?というやり方があるようなのですが、まだ理解できません 教えてください。
- 454 名前:login:Penguin mailto:sage [2009/11/06(金) 22:17:20 ID:wQA60fmy]
- >>453
zenityって何のこっちゃ。配列を使うとこうなる。 $ URL=("foo" "bar") $ for url in ${URL[@]}; do echo ${url}; done foo bar …が、単に${URL}に空白区切りのURLを入れておいて、 sedなりtrなりを通して1行ずつ出力すれば良いだけの話ではないのか? $ URL="foo bar" $ echo ${URL} | sed 's; ;\n;g' foo bar $ echo ${URL} | tr ' ' '\n' foo bar
- 455 名前:login:Penguin mailto:sage [2009/11/06(金) 23:02:57 ID:CfRBFuVC]
- >>454
>zenityって何のこっちゃ。 なんか便利そうだなぁと思ってw zenity使わんでもいいんだけど、常に端末開いてるわけじゃないから操作的に楽かなぁと‥ んで、溜め込むURLは決まってるわけじゃなくて、ブックマーク的な感覚で使うつもり。 $ URL=("foo" "bar") は、わかったけど $ for url in ${URL[@]}; do echo ${url}; done は、${URL[@]} を 一行づつ url に代入して、それを一行づつ出してるってこと? ってことは、って考えた結果 while [ ${V_NUM} -lt 5 ] do URL=("${URL[@]}" `zenity --entry "$1"`) V_NUM=`expr ${V_NUM} + 1` done echo "${URL[@]}" a b c d e と順に打っていったら $ echo "${URL[@]}" a b c d e と返ってきた。 結果だけみると動作してるように見えるけど、合ってますか? なんとなく配列のイメージはわかったような気がする・‥ # sed とか 正規表現 とか覚えたら色々出来そうだ。。。と夢見てる段階w
- 456 名前:login:Penguin mailto:sage [2009/11/07(土) 00:24:25 ID:27rGR1FA]
- >>455
配列の話をしているからbash前提で話すが、 ・zenityが返す値(URL)を""でエスケープしておかないと、URLにスペースが含まれていたときにハマる。 ・単純に5回繰り返すだけならwhileとカウンタを使うよりもforを使ったほうがいい。 for i in {1..5}; do [処理]; done for i in `seq 5`; do [処理]; done
- 457 名前:login:Penguin mailto:sage [2009/11/07(土) 01:39:27 ID:CteOVE+c]
- >>456
なるほど。わざとスペースを入れて試してみました。 単純に5回繰り返すつもりなので、アドバイス通りにfor文でもやってみたいとおもいます。 >>454 >>456 どうもありがとうございました。
- 458 名前:login:Penguin mailto:sage [2009/11/11(水) 00:08:25 ID:ISVpZi0Z]
- bashの配列なのですが
# ls お宝動画 有名女優の秘部大百科 というファイルがあって files=(`ls`) echo "${files[0]}" とすると「お宝動画」しか表示されませんよね これをちゃんとしたファイル名、空白を含む値を代入するには どうすればいいのでしょうか?
- 459 名前:login:Penguin mailto:sage [2009/11/11(水) 10:05:24 ID:FBEaA7LT]
- >>458
IFSがデフォで空白・タブ・改行になってると思うので IFSから空白を除く
- 460 名前:login:Penguin mailto:sage [2009/11/11(水) 13:32:06 ID:OlX5y2f2]
- そのファイル名の部分をもっと当たり障りの無いファイル名に変えて書けよww
- 461 名前:login:Penguin mailto:sage [2009/11/11(水) 19:26:47 ID:h7rzLTxQ]
- Bachで条件付バックアップスクリプトを組みたいのですが
どう書いて良い物か分からなくなってしまったのでご教授 お願いします。 < やりたい事 > 任意のフォルダ配下でタイムスタンプがN日経過したものをtar.gzで 圧縮して、そのファイルを削除したい。 たとえば、/home配下に test1・test2・test3と言う3つのフォルダがあって 最終アクセス(ファイル操作)が30日以前のファイルを/home/backupに タイムスタンプ.tar.gz形式で保存し、バックアップ後そのファイルを削除する。 test1フォルダ内 -rw-rw-r-- 1 root root 10K 10月 09 00:00 /home/test1/hoge.txt -rw-rw-r-- 1 root root 10K 10月 10 00:00 /home/test1/higetxt tes21フォルダ内 -rw-rw-r-- 1 root root 10K 10月 11 00:00 /home/test2/hoge.txt -rw-rw-r-- 1 root root 10K 11月 01 00:00 /home/test2/higetxt test3フォルダ内 -rw-rw-r-- 1 root root 10K 11月 09 00:00 /home/test3/hoge.txt -rw-rw-r-- 1 root root 10K 11月 11 00:00 /home/test3/higetxt n日後のファイルを検索するところまで調べて下記のようなコマンドを 使うのだろうと思っているのですが、それ以降どうしてよいものか・・・・。 find /home -type f -daystart -mtime +30 |fgrep -v /. 長くなりましたがご教授お願いします。
- 462 名前:login:Penguin mailto:sage [2009/11/12(木) 00:26:46 ID:VaDsQREP]
- 教授は外出中です
- 463 名前:login:Penguin mailto:sage [2009/11/12(木) 00:42:44 ID:MDFmvAz9]
- バッハねぇ。
- 464 名前:login:Penguin mailto:sage [2009/11/12(木) 23:09:37 ID:ou+qWNnh]
- >>461
TARGET=`find /home -type f -daystart -mtime +30 |fgrep -v /. ` tar cvzf `date +%Y%m%d`.tar.gz $TARGET && rm $TARGET
- 465 名前:login:Penguin mailto:sage [2009/11/13(金) 10:24:58 ID:WdvDAtlm]
- >>464
有難う御座います。 やってみます!
- 466 名前:login:Penguin [2009/11/13(金) 11:55:23 ID:YoLOfEvP]
- test=/var/www/.htaccess-log
という風にしても-logのみが認識されているようでうまく機能しません。 最初に.がある場合のファイルを変数に入れるにはどうすればいいのでしょうか?
- 467 名前:login:Penguin mailto:sage [2009/11/13(金) 11:58:11 ID:U8ZA18uC]
- $ test=/var/www/.htaccess-log
$ echo $test /var/www/.htaccess-log $ 認識してるが。
- 468 名前:466 [2009/11/13(金) 12:09:11 ID:YoLOfEvP]
- >>467
すいません。 testの部分がtest-logでした。 $ test-log=/var/www/.htaccess-log $ echo $test-log -log となります。 申し訳ないです。
|

|