- 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あたりに色々と。
- 307 名前:login:Penguin [2009/08/18(火) 18:39:48 ID:S4j+NJGU]
- moge.dat
testjama na moji sakujo="jama na moji" okikae="" echo `more /tmp/moge.dat | grep '^test' | sed -i s/$sakujo/$okikae/g` これでmoge.datの中からtestだけ表示出来るのではないかと思っていたのですが sed: -e 表現 #1, 文字数 13: 「s」コマンドが終了していません というエラーが表示されます。オプションで-eも使用していませんし構文的には大丈夫そうに思えたのですが 間違いがあればご指摘いただけないでしょうか。
- 308 名前:login:Penguin mailto:sage [2009/08/18(火) 19:03:56 ID:9vBuj+t/]
- sed 's/jama na moji//g' moge.dat
じゃいかんのか? なぜechoしたりmoreしたりgrepしたりするのか意味わからん
- 309 名前:login:Penguin mailto:sage [2009/08/18(火) 19:12:00 ID:I/MV7qz2]
- sed の -i はなぜつけているんだい?
- 310 名前:307 [2009/08/18(火) 19:31:44 ID:S4j+NJGU]
- >>308
単純にmoreで見た中身をgrepしてそこからさらに削ればいいのかなと思い 検索をしてパイプでつなげただけの状態です。 また説明が足りませんでしたがmoge.datは複数行あってtestから始まる行が いくつかあったことから素人考えでこのようになりました。 >>309 すいません。 別の場所のsedをコピーしたときについたみたいです。 この場合は必要ないですね。
- 311 名前:login:Penguin mailto:sage [2009/08/18(火) 19:37:15 ID:9vBuj+t/]
- sed '/^test/s|jama na moji||g' moge.dat
- 312 名前:login:Penguin mailto:sage [2009/08/18(火) 19:43:42 ID:0jjNf9FI]
- >>307の直接の答えを言うと、
sed -i s/$sakujo/$okikae/g ↓ sed -i s/jama na moji//g ↓ sed -i 's/jama' 'na' 'moji//g' と引数4つに解釈されるから。
- 313 名前:login:Penguin mailto:sage [2009/08/18(火) 22:00:14 ID:elYCry/8]
- >>306
マルチって死ねばいいと思う
- 314 名前:login:Penguin mailto:sage [2009/08/18(火) 22:23:21 ID:Df7zfcy/]
- スレ違いを指摘されて移動してるんだから、マルチとは言わないだろ
- 315 名前:login:Penguin [2009/08/19(水) 11:19:58 ID:zpPUbNQu]
- ログをとりたくてmessagesに内容を出すようにしたいのですが
echo "logtest" >> /var/log/messages としても書き出されません。 このファイルとユーザー自体はrootではないので権限が問題かと思ってます。 このexampleユーザーはwheelに入れており、sudoで%wheel ALL=(ALL) ALLと念のため指定しましたがダメでした。 これは構文自体が間違っているということでしょうか。
- 316 名前:login:Penguin mailto:sage [2009/08/19(水) 11:38:22 ID:GJ3CGMhT]
- >>315
sudo echo "logtest" >> /var/log/messages とかやったの? これだと >> 以下は sudo の外にあるから効かない。 sudo sh -c 'echo "logtest" >> /var/log/messages' とかやればいい。 つーか logger で書いたら。
- 317 名前:login:Penguin [2009/08/19(水) 15:03:44 ID:9fjqV7Pu]
- コマンドの実行結果を>>で適当なテキストに出力して見てみると
[H [J [0;10mtop - 20:06:35 up 51 min, 3 users, load average: 0.00, 0.00, 0.00 [0;10m [39;49m [K いろんなコマンドでこんな感じになってるんですがこれは何なのでしょうか? これはtop内容ですがなぜこうなるのかがわかりません。 表示されている文字だけをテキストに出したいのですがどうすればいいでしょう か。
- 318 名前:315 [2009/08/19(水) 15:07:02 ID:zpPUbNQu]
- >>316
素早いレスありがとうございます。 1個の命令として見られていなかったわけですね。 loggerでかけるところはそうしたいのですが、他にもいくつかファイルがあって そちらでも追記したいと思っておりました。 まだ試してませんがこれでいってみたいと思います。
- 319 名前:login:Penguin mailto:sage [2009/08/19(水) 15:08:58 ID:yGi4QWIv]
- topの人はtopの何を切り出したいのだ?
ロードアベレージ?
- 320 名前:login:Penguin mailto:sage [2009/08/19(水) 15:09:49 ID:GJ3CGMhT]
- >>317
top なら -b で。 >>261 でも書いたはずだが。
- 321 名前:login:Penguin mailto:sage [2009/08/19(水) 15:16:10 ID:GJ3CGMhT]
- >>317
ファイルへの出力は 基本的にはただの文字を順に追記していくだけ。 画面への出力は文字を反転させたり色を変えたり いったん書いたものを戻って書き直したりする。 画面用の出力をそのままファイルに出すとおかしなことになる。
- 322 名前:login:Penguin mailto:sage [2009/08/19(水) 21:31:13 ID:rKA7cUBO]
- echo "logtest" | sudo tee -a /var/log/messages
teeってマイナー?
- 323 名前:login:Penguin mailto:sage [2009/08/19(水) 22:00:23 ID:ZZH7H5sc]
- いやんバカんな事やってないで、きちんとloggerを使いなさい。
- 324 名前:login:Penguin mailto:sage [2009/08/19(水) 22:31:33 ID:S8kRS54+]
- シェルにloggerなんてあるの?
- 325 名前:login:Penguin mailto:sage [2009/08/19(水) 23:54:53 ID:Gto2VsIQ]
- ------------------------- 今からこのスレは外部コマンド禁止になりました -------------------------
- 326 名前:login:Penguin mailto:sage [2009/08/20(木) 00:22:53 ID:z7LXRLpP]
- シェルの組み込みコマンドだけでやれってか?
厳しいな。。
- 327 名前:login:Penguin mailto:sage [2009/08/20(木) 10:46:36 ID:D2EfC5ES]
- >>324
それ言ったら sudo だってないじゃん。
- 328 名前:login:Penguin mailto:sage [2009/08/20(木) 11:47:57 ID:tKteNA5S]
- 今、ネットワークカードを通過するトラフィック量をRRDToolを使用してグラフにしたくて
1秒あたりの送信・受信をバイトで求めるスクリプトを書いたつもりなのですが、 これでちゃんと値が求められているのか、自分ではよく分からないのです。 それっぽい感じの値は出てきてるんですが・・。 そこでなのですが「ここが違う」「そもそもそれじゃダメ」などということがありましたら、 教えていただきたく、ここに書き込まさせていただきました。 もし、お時間がありましたら添削していただけると嬉しいです・・・。 func_ethernet() { UserName="UserName" AuthPass="AuthPassWd" PrivPass="PrivPassWd" HostName="localhost" if [ $1 = "send" ]; then LogName="/tmp/log-send" LogOld=`cat ${LogName} | sed -n 2p` LogOldTime=`cat ${LogName} | sed -n 1p` date +"%Y-%m-%d %k:%M:%S" > ${LogName} /usr/bin/snmpget -a MD5 -A ${AuthPass} -l authPriv -u ${UserName} -x AES -X ${PrivPass} -v 3 ${HostName} .1.3.6.1.2.1.2.2.1.16.2 | awk '{print $NF;}' >> ${LogName} LogNew=`cat ${LogName} | sed -n 2p` LogNewTime=`cat ${LogName} | sed -n 1p` echo | awk '{print ( (newValue - oldValue) / (newTime - oldTime) );}' newValue=${LogNew} oldValue=${LogOld} newTime=`date -d "${LogNewTime}" +"%s"` oldTime=`date -d "${LogOldTime}" +"%s"` elif [ $1 = "recive" ]; then 略 fi } rrdtool update ${RRD_PATH}/ethernet.rrd N:`func_ethernet send`:`func_ethernet recive`
- 329 名前:login:Penguin [2009/08/20(木) 12:00:54 ID:3vJ7EKjF]
- 文字色と背景色ついて質問です。
わかりやすく色をつけてみたのですがこの場合は文字の部分のみが緑文字と黒背景となります。 #!/bin/bash echo -en "\033[32;40m"; select i in "123" "456"; do [ -n "$i" ] && break done case "$i" in 123) func123;; 456) func456;; esac 文字ではない部分も黒背景とする事は可能ですか?
- 330 名前:login:Penguin mailto:sage [2009/08/20(木) 19:05:04 ID:KNtykgpF]
- まずエスケープシーケンスを直接指定するのはよくない
端末によってサポートされている機能に違いもあるし 「文字ではない部分」の意味も不明 行単位ということなら #!/bin/sh tput setab 0 tput setaf 2 tput el echo "Hello"
- 331 名前:login:Penguin [2009/08/21(金) 00:19:49 ID:F/0U9rwq]
- 文字ではない部分ってのはその通りだろう。
文字の背景の色を指定は出来るが、文字以外のところの背景色はどうすってことじゃね? \033[32;40mはせめて ESC=\033[ midori=${ESC}32 とかにしたほうがいいと思う。もっといい方法あればえらい人が教えてくれるはず。
- 332 名前:login:Penguin mailto:sage [2009/08/21(金) 00:26:48 ID:korZcQ4D]
- >>331
tput使えよ。
- 333 名前:login:Penguin mailto:sage [2009/08/21(金) 00:34:42 ID:G/rWMdtH]
- すみませんが組み込みコマンドだけでお願いします
- 334 名前:login:Penguin mailto:sage [2009/08/21(金) 00:41:38 ID:korZcQ4D]
- >>333
busyboxにshとtputが入ってる場合はOK?
- 335 名前:login:Penguin mailto:sage [2009/08/21(金) 00:53:50 ID:hq/n18x3]
- >>331
> 文字の背景の色を指定は出来るが、文字以外のところの背景色はどうすってことじゃね? だから, 画面全体をそうしたければclearすればいいんじゃね 文字を書き込んでいない*どの部分を*背景色にしたいんだ, って話
- 336 名前:331 [2009/08/21(金) 07:39:21 ID:F/0U9rwq]
- tputなんてあるわけね。
シェルに標準でそういうのあるの知らなかったよ。 >>335 文字がかかれてない場所全部じゃね? ようは画面全体の背景色を指定したいってことだと思うけど。 文字と文字の背景色は\033[32;40mで指定できるけど それ以外の全体の背景色という意味だと思う。
- 337 名前:login:Penguin mailto:sage [2009/08/21(金) 07:45:26 ID:korZcQ4D]
- >>336
とある端末だとそうですね。
- 338 名前:login:Penguin [2009/08/21(金) 11:30:52 ID:90eN5uxA]
- そういうの意識するほどたくさんの機器がないからだとおもうけど
俺はVT100でだいたい表示されてればOKかな〜とか勝手に思ってる。 ネットワーク機器だとやっぱりまだANSIとかが標準になってたりするのかな? さすがに最近のネットワーク機器でVT52が標準とかってことはないと信じたいけど。
- 339 名前:login:Penguin mailto:sage [2009/08/21(金) 17:12:14 ID:hq/n18x3]
- >>336
> ようは画面全体の背景色を指定したいってことだと思うけど。 >>335 行単位なら >>330 カーソル位置からscreenの最後までならelの代わりにed使えばいい
- 340 名前:login:Penguin mailto:sage [2009/08/21(金) 23:42:11 ID:korZcQ4D]
- 所謂、ブルースクリーンを作りたい。
- 341 名前:login:Penguin mailto:sage [2009/08/22(土) 19:41:23 ID:iygx6FPk]
- # word.lst
あいうえお aiueo かきくけこ kakikukeko さしすせそ sasisuseso #target.txt なにぬねの あいうえおキター たちつてと さしすせそ キターかきくけこ word.lst の区切文字はTAB 、またはSPACE とします target.txt を一行ずつ読込み、word.lst のキーとなる単語があれば、 置換しdest.txt に出力するシェルスクリプトの書き方を教えて頂けないでしょうか。 #dest.txt なにぬねの aiueoキター たちつてと sasisuseso キターkakikukeko
- 342 名前:login:Penguin mailto:sage [2009/08/22(土) 19:49:19 ID:+xcsiCNS]
- まず服を脱ぎます
- 343 名前:341 mailto:sage [2009/08/22(土) 20:44:33 ID:iygx6FPk]
- while read line
do 処理(TARGET=あいうえお、DEST=aiueo) done < word.lst 例えばこのように、line で読込んだ あいうえお aiueo を変数TARGET、 DEST に格納する方法を教えてもらえませんでしょうか。
- 344 名前:login:Penguin mailto:sage [2009/08/22(土) 21:14:08 ID:+xcsiCNS]
- set $line
TARGET=$1 DEST=$2
- 345 名前:login:Penguin mailto:sage [2009/08/22(土) 21:44:23 ID:beHpftLf]
- すぐ書ける簡単なやり方で
#!/bin/sh while read from to do echo "s|$from|$to|g" done <word.lst >program sed -f program <target.txt >dest.txt
- 346 名前:login:Penguin mailto:sage [2009/08/22(土) 23:46:26 ID:m2+LmGIC]
- >>345さん、お世話になります
掲示していただいたスクリプトでの置換ですが、>>341 で掲示したファイルの置換は期待通りの結果になるのですが 下記のような内容のファイルだと全く置換できません、なぜなのでしょうか? #target.txt CREATE TABLE `利用明細` ( `伝票番号` INTEGER AUTO_INCREMENT DEFAULT NULL , `商品ID` INTEGER DEFAULT NULL , `数量` INTEGER DEFAULT NULL , PRIMARY KEY (`伝票番号`) ); #word.lst 伝票番号 DENNPYOUBANGOU 数量 SUURYOU
- 347 名前:login:Penguin mailto:sage [2009/08/23(日) 00:31:10 ID:aCd7CupH]
- >>346 です
解決しました、文字コードを錯誤してました(^^;
- 348 名前:login:Penguin mailto:sage [2009/08/26(水) 02:39:26 ID:5uGOu/R4]
- 1000文字ごとに改行を入れる簡単な方法を教えてもらえませんか
- 349 名前:login:Penguin mailto:sage [2009/08/26(水) 04:35:48 ID:aiWYMJf6]
- これ、俺は思いつかない、ラテン文字だけなのか、マルチバイト文字も混在してるのか
こういうのは、やっぱ、perlやrubyが得意だ
- 350 名前:login:Penguin mailto:sage [2009/08/26(水) 04:41:51 ID:r5TfqoXR]
- nkf -f 1000
- 351 名前:login:Penguin [2009/08/26(水) 14:07:13 ID:ehP4IQnp]
- abcdefgabcdefgabc ...
と続く文字列にn文字ごとに「,」を入れてcsvにするにはどうしたらいいですか?
- 352 名前:login:Penguin mailto:sage [2009/08/26(水) 14:24:34 ID:LXSFF2c5]
- echo abcdefghijklmnabcdefghijklmnh | sed 's/\(.\{5\}\)/\1,/g'
- 353 名前:login:Penguin mailto:sage [2009/08/26(水) 14:28:23 ID:z6vBIwzM]
- echo 'abcdefgabcdefgabc' | sed 's/\(.\{変数n\}\)/\1,/g'
- 354 名前:login:Penguin mailto:sage [2009/08/26(水) 14:29:09 ID:z6vBIwzM]
- 重複スマソ
- 355 名前:login:Penguin mailto:sage [2009/08/26(水) 15:46:39 ID:ehP4IQnp]
- >>352 >>353
thanx!!
- 356 名前:login:Penguin mailto:sage [2009/08/26(水) 18:44:54 ID:whFI2cwY]
- list.txtのなかにURLが一行ずつあり,
そのURLをw3mでアクセスしてその結果を URLからhttp://を除いたファイル名で保存したいのですが #!/bin/sh FILE=list.txt while read LINE do $OUT=`echo $LINE |sed 's///'` w3m -dump $LINE > $OUT done < $FILE これだとダメになってしまいます.とりあえずlist.txtにはgoogle.netを入れています.
- 357 名前:login:Penguin mailto:sage [2009/08/26(水) 18:54:19 ID:LXSFF2c5]
- s###
とか区切り文字を変える。 $OUT= の$は不要。
- 358 名前:login:Penguin mailto:sage [2009/08/26(水) 18:54:58 ID:CSCAGJKR]
- とりあえず$OUTはOUTのtypoだよな
あとはsedのマニュアルでも読んどけ
- 359 名前:login:Penguin mailto:sage [2009/08/26(水) 18:59:39 ID:z6vBIwzM]
- >>356
どうダメなのか具体的に書いてくれないと。 とりあえず sed 's///' はダメ。 区切りに使う文字(ここでは / )はエスケープしないと。 あるいは、違う文字(例えば @)で代用する。 $ echo 'www.example.com/' | sed 's@^@@' www.example.com/
- 360 名前:login:Penguin mailto:sage [2009/08/26(水) 19:00:34 ID:z6vBIwzM]
- また重複してしまった。吊ってくる。
λ..
- 361 名前:login:Penguin mailto:sage [2009/08/26(水) 19:01:21 ID:whFI2cwY]
- >>357-358
ありがとうございます.うまくいきました.$OUTはミスです.ありがとうございました.
- 362 名前:login:Penguin mailto:sage [2009/08/26(水) 19:03:00 ID:whFI2cwY]
- >>359
ありがとうございます.区切り文字を変えてうまくいきました.
- 363 名前:login:Penguin mailto:sage [2009/08/26(水) 19:03:13 ID:CSCAGJKR]
- やったね!
- 364 名前:login:Penguin mailto:sage [2009/08/26(水) 22:21:29 ID:AG79amBH]
- UTF-8 BOM が付いててもshスクリプトが動くシェルってある?
- 365 名前:login:Penguin mailto:sage [2009/08/26(水) 22:34:36 ID:aJjlwaDy]
- スレ違い。
- 366 名前:login:Penguin mailto:sage [2009/08/26(水) 23:27:14 ID:LXSFF2c5]
- >>364
別にスレ違いじゃないんじゃね? カーネルで、ファイルの先頭2バイトが'#!'の場合をスクリプトと しているのでBOMついてたら実行できない。 sourceしたときって意味なら…試したこと無いからわからん。
- 367 名前:login:Penguin mailto:sage [2009/08/27(木) 00:13:17 ID:99inMd3q]
- >>365
分からないことは全部スレ違いーw
- 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を使ってみます。 ありがとうございます。
|

|