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 あたりに色々と。
229 名前:login:Penguin [2009/08/09(日) 12:55:17 ID:aaFRdfIZ] ディストリ次第じゃないんですか。Debian ではできないみたいだけど、Vine では 一般ユーザでも shutdown できる (Red Hat 系はみんなできるのかも)。Vine の場合、 /usr/bin/shutdown はシェルスクリプトで、中で halt や reboot を呼び出している。 そして、この halt や reboot はリンクで、実体は /usr/bin/consolehelper。 あとは、man consolehelper ですね。
230 名前: ◆Zsh/ladOX. mailto:sage [2009/08/09(日) 14:01:11 ID:/ZeBm1qf] んーできない。 % cat /etc/redhat-release CentOS release 5.3 (Final) % id uid=500(hage) gid=500(hage) 所属グループ=500(hoge) context=user_u:system_r:unconfined_t % /sbin/shutdown -r now shutdown: you must be root to do that! % /sbin/reboot reboot: must be superuser.
231 名前:229 mailto:sage [2009/08/09(日) 14:18:48 ID:PRPNML+y] >>230 CentOS の場合、/sbin/shutdown じゃなくて、/usr/bin/shutdown はないんですか。 だとしたら、Vine だけなのかな。たしか、「一般ユーザに電源をぶち切られるより、 shutdown を許した方がマシだ」という考えだったと思います。
232 名前: ◆Zsh/ladOX. mailto:sage [2009/08/09(日) 14:27:23 ID:/ZeBm1qf] % /usr/bin/shutdown -r now zsh: そのようなファイルやディレクトリはありません: /usr/bin/shutdown % locate shutdown|grep bin /sbin/shutdown /usr/bin/pm-shutdown なんで無いね。
233 名前:login:Penguin mailto:sage [2009/08/09(日) 16:35:29 ID:CB8fkMOP] # ながいこと Vine しか使ってないから他のディストリのことはわからない。 >>225 シェルスクリプトの "reboot" を /sbin/reboot とか /usr/bin/reboot とかに書き換えてみると動作に違いがでると思う。 > 権限 pam って仕組みで管理されてると思う。/etc/pam.d/ 以下のファイル。 >>225-232 Vine だと usermode っていうパッケージに /usr/bin/consolehelper /usr/bin/halt /usr/bin/poweroff /usr/bin/reboot /usr/bin/shutdown /usr/sbin/userhelper とかいったものが入ってる。usermode-gtk ってパッケージもある。 Description : usermode パッケージには、一般ユーザが設定されたプログラムをスーパーユー ザとして実行できるようにするユーザヘルパープログラムが含まれています。
234 名前:login:Penguin [2009/08/09(日) 22:04:40 ID:ivLlFzN/] シェルスクリプトでコマンド番号を選択したりIPを入力したりするツールつくったんですが、 ctrl+cやIP入力にコマンドを入れてみて実行されるかどうかといった確認はしてみましたが それ以外にセキュリティやテストしてみるといいことなどあれば教えてください。
235 名前:login:Penguin mailto:sage [2009/08/09(日) 22:52:55 ID:C0J3iJDt] スクリプト晒して!
236 名前:login:Penguin mailto:sage [2009/08/09(日) 23:03:57 ID:IVuBeWRI] 晒されても答えようがないような。 C-c が入れられたときの正しい処理とか本人でないと知らないし。
237 名前:234 [2009/08/09(日) 23:20:52 ID:ivLlFzN/] >>235 IP以外の文字が入れられたらといった時の処理はまだいれてませんが 下記のような事を繰り返してconfを書き換えて再起動するという感じです。 read newip $newip="IPADDR=""$newip" sed -i "s/$oldip/$newip/g" /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/rc.d/init.d/network restart menufunc
238 名前:login:Penguin mailto:sage [2009/08/10(月) 00:04:28 ID:CdStD5IJ] >>227 sidを知らんのか。
239 名前:login:Penguin mailto:sage [2009/08/10(月) 01:28:19 ID:qfqY90wM] a b c ... と一語ごとに改行された一つのテキストファイルを a b c d e f g h i j k l m n o ... と言うように10列ごとに改行するテキストにしたいと思い、 スクリプトを組んだのですが動作が遅く、重くなってしまって困惑しています どなたかお知恵をお貸しくださると助かります。 #/bin/bash FILE=$1 LINENUM=`expr 1` OFILE=/dev/shm/hoge while read line do if [ $LINENUM -lt 10 ];then echo -n "$line" >> $OFILE echo -n -e "\t" >> $OFILE LINENUM=`expr $LINENUM + 1` else echo "$line" >> $OFILE LINENUM=`expr 1` fi done <$FILE
240 名前:login:Penguin mailto:sage [2009/08/10(月) 01:50:52 ID:vmT7yJCz] #!/bin/sh FILE=$1 OFILE=/dev/shm/hoge LINENUM=1 while read line do if [ $LINENUM -lt 10 ] then echo -n "$line" echo -n -e "\t" LINENUM=$(( LINENUM + 1 )) else echo "$line" LINENUM=1 fi done <$FILE >$OFILE
241 名前:login:Penguin mailto:sage [2009/08/10(月) 02:00:08 ID:qfqY90wM] >>240 ありがとうございます! 処理が覿面に早くなりました! いちいち書き出さないで最後に一括して書けばよかったんですね…
242 名前:login:Penguin mailto:sage [2009/08/10(月) 02:10:30 ID:vmT7yJCz] >>241 たぶんexprの呼び出しのほうがコストが高いよ
243 名前:login:Penguin mailto:sage [2009/08/10(月) 12:26:13 ID:5IcilgjJ] 自分で動かすだけならこれでいいやと思ったら、そんだけで改善できたのか… ---- #!/bin/sh FILE=$1 OFILE=/dev/shm/hoge sed -e '$!N;$!N;$!N;$!N;$!N;$!N;$!N;$!N;$!N;s/\n/\t/g' <$FILE >$OFILE
244 名前:login:Penguin [2009/08/10(月) 15:31:57 ID:oeYkUDqx] 数字の判定は[0-9]と正規表現使って判定してるんですが IPアドレスかどうかの判定が出来るような正規表現ってあるんでしょうか。 無い脳みそひねってもいい案が出なかったのであれば教えてください。
245 名前:login:Penguin [2009/08/10(月) 15:41:18 ID:86RyWVEw] >>244 ググレばサンプルたくさんあるよ。
246 名前:login:Penguin mailto:sage [2009/08/10(月) 15:59:59 ID:BhLss4cE] お前ならどうするかを教えてやりゃーいいじゃん。
247 名前:login:Penguin mailto:sage [2009/08/10(月) 16:10:10 ID:sXOG+s90] PowerShell神すぎだろ。 このスレ見てると原始人が石斧振り回してるように見えてくるぜ。
248 名前:login:Penguin mailto:sage [2009/08/10(月) 17:33:20 ID:6xgY8KY4] 僕には端末エミュとシェルの違いもわかってないマヌケが見えます。
249 名前:login:Penguin mailto:sage [2009/08/11(火) 00:20:03 ID:GKnhcfe3] >>247 型の概念が邪魔。 コマンドが無駄に長い。 重い。
250 名前:login:Penguin [2009/08/11(火) 00:27:50 ID:4esITO9l] Macのbashもここでいいんでしょうか… OSは10.5.8です。 test.shを ---- #!/bin/sh echo $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12 ---- とします。 ./test.sh 1 2 3 4 5 6 7 8 9 10 11 12 と実行すると素直に 1,2,3,4,5,6,7,8,9,10,11,12 となるのに ./test.sh 1.0 2 3 4 5 6 7 8 9 10 11 12 と小数を入れて実行すると 1.0,2,3,4,5,6,7,8,9,1.00,1.01,1.02 となってしまうのはなぜでしょうか。
251 名前:login:Penguin mailto:sage [2009/08/11(火) 00:35:21 ID:XDXqx0+D] ./test.sh a 2 3 4 5 6 7 8 9 10 11 12 としてごらんなさい
252 名前:login:Penguin [2009/08/11(火) 01:01:07 ID:4esITO9l] >>251 な、な、な、なんでしかこりは! はっ!そうか!… $1,$2...って書いてあるサイトが多いからけっこうな個数使えるのかと思ってました。 ありがとうございました。
253 名前:login:Penguin mailto:sage [2009/08/11(火) 01:07:27 ID:e9ttEiKp] echo $1,$2,$3,$4,$5,$6,$7,$8,$9,${10},${11},${12}
254 名前:login:Penguin [2009/08/11(火) 02:19:40 ID:4esITO9l] >>253 $(10)は試したのに${10}は試してませんでした…orz ありがとうございます。 >>251 を受けてshiftを使う対処法を知りました。 10個以上の引数を扱いたいという目的においては、shiftと${10}の善し悪しはあるんでしょうか。
255 名前:login:Penguin mailto:sage [2009/08/11(火) 02:26:00 ID:MclIhwRq] こーいうトラップがあるからperlに逃げる人が多い
256 名前:login:Penguin mailto:sage [2009/08/11(火) 02:52:40 ID:e9ttEiKp] >>254 $ man bash /位置パラメータ 2 桁以上の数値を含む位置パラメータを展開するときには、ブレース ({}) で 囲まなければなりません。 よって${n}が正解だと思います
257 名前:login:Penguin [2009/08/11(火) 05:29:40 ID:4esITO9l] >>255 僕はこのツンデレな感じが好きです。 >>256 やっぱりそうですよねw 正式名称は位置パラメータかー"引数"という呼び方しか認識してませんでした。
258 名前:sage mailto:sage [2009/08/11(火) 16:31:12 ID:ggsX9yQb] topコマンドの内容をテキストに書き出したいんですが top >> /tmp/top.test とした場合に延々と書き込まれていきます。1度だけtopの内容を取得したいんですが どのように変更すればよいでしょうか?
259 名前:login:Penguin mailto:sage [2009/08/11(火) 16:36:53 ID:zgCywBrU] >>258 man top
260 名前:258 mailto:sage [2009/08/11(火) 17:33:42 ID:ggsX9yQb] >>259 すいません。 manにありました。 現在topの内容をテキストに書き出して、テキストをsedで切り出して表示してるんですが コマンドの戻り値を求めたいと思っておりますが hogera=$(top -i -n1) cpu=`sed -n '/Cpu(s)/p' "$hogera"` こうすると「読み込めません: ファイル名が長すぎます」と出ます。 本来ファイル名の指定なのでうまくいかないのはあたりまえなのですが、 ファイルに書き出す事無くスマートに切り出す方法がありましたら教えてください。
261 名前:login:Penguin mailto:sage [2009/08/11(火) 17:42:23 ID:zgCywBrU] >>260 いまいちやりたいことがわからんが cpu=`top -b -n1 | grep '^Cpu'` か?
262 名前:258 mailto:sage [2009/08/11(火) 17:54:30 ID:ggsX9yQb] >>261 ありがとうございます。 そうか、grepすればいいだけの事ですね。 どうやら無意味にテンパってしまってるようです。 すいません。最後に1つだけ疑問に思っていることがあるのですが シリアルコンソールで見る画面は横70文字にしとけって言われたんですが 何かそういった規格かなにかあるんでしょうか。検索してみてもそられしいものが 引っかからなかったんですが、70文字だとなかなか厳しいものがあるので 特に根拠のない文字数であるなら超えても構わないのではないかと思っております。 たびたびの質問で申し訳ありませんが、識者の方でご存じの人いたら教えてください。
263 名前:login:Penguin mailto:sage [2009/08/11(火) 17:55:36 ID:zgCywBrU] >>262 スレ違い。
264 名前:258 mailto:sage [2009/08/11(火) 18:03:42 ID:ggsX9yQb] >>263 解答ありがとうございます。 スレ違いとのことですが、これはどういったスレで質問するのがよろしいのでしょうか。 シェルスクリプトの表示だったのでこちらに投げさせていただいたのですが どういった方面のスレかだけでも助言いただけないでしょうか。
265 名前:login:Penguin mailto:sage [2009/08/11(火) 18:07:41 ID:zgCywBrU] >>264 くだらねえ質問はここに書き込め! Part176 pc11.2ch.net/test/read.cgi/linux/1246986882/
266 名前:login:Penguin mailto:sage [2009/08/12(水) 00:03:08 ID:0UM4nevW] >>263 きびしー
267 名前:login:Penguin [2009/08/12(水) 00:05:03 ID:I1tOnENr] >>264 VGAとかSVGAとか解像度で違うっての聞いたことある。 もしかしたら全然違うかもしれんがそういうときはきっと誰か激しく突っ込んでくれるはず。
268 名前:login:Penguin mailto:sage [2009/08/12(水) 00:10:31 ID:u9/Em9/R] >>267 ぜんぜん違う話。
269 名前:login:Penguin mailto:sage [2009/08/12(水) 05:02:52 ID:0UM4nevW] $ cat<<<h$(cat<<<e$(cat<<<l$(cat<<<l)o)\!)
270 名前:login:Penguin [2009/08/12(水) 14:49:33 ID:/9MBM8gW] 特定文字列が含まれてるかどうかの判断って出来ますか? sedとかで文字の置き換えとか入れ替えが出来る程度のレベルです。 dg=`route | grep '192.168.24.1'` でdgの中にug含まれているかどうかを確認したいと思ってます。
271 名前:login:Penguin mailto:sage [2009/08/12(水) 14:51:54 ID:u9/Em9/R] >>270 route | grep '192.168.24.1' | grep ug ってこと?
272 名前:login:Penguin mailto:sage [2009/08/12(水) 14:59:52 ID:LZ159q8G] >>270 case "${dg}" in *ug*) # match ;; *) # not match ;; esac
273 名前:270 [2009/08/12(水) 15:13:57 ID:/9MBM8gW] >>271 そうでした。パイプでさらにgrepすればよかったですね。 こちらの方法でも出来ました。 ありがとうございます。 >>272 判定までしていただいて助かります。 こちらの方法で出来ました。 ありがとうございます。 まだまだよくわかってないですがここで質問しなくてもすむように勉強したいと思います。
274 名前:login:Penguin [2009/08/12(水) 18:46:07 ID:jKHDnL7q] シェルスクリプトでサーバーのチェックをしてます。 それ自体はcronで定期的に行ってますが、これと併せて定期的にデータを送信出 来ればと考えてます。 実際にはチェックして引っかかったサーバーにzipを送り、サーバーは時間が来 れば勝手に実行するという感じですが、シェルスクリプトでzipデータを別サー バーに送るとかいうことが可能でしょうか。 可能ならどんな関数を使えばよいかアドバイスもらえないでしょうか。 初歩的な質問かと思いますが宜しくお願いいたします。
275 名前:login:Penguin mailto:sage [2009/08/12(水) 18:54:50 ID:8iPFdi1w] 金玉 → >>274 。゜( ゜^∀^゜)゜。アーッハハハハノヽノヽノヽノ\ / \
276 名前:login:Penguin mailto:sage [2009/08/12(水) 21:03:12 ID:0s7n/+F7] >>274 sshの鍵交換してパスワードを聞かれないようにしておいて scpなりrsyncなりで送れば良いと思う。
277 名前:login:Penguin mailto:sage [2009/08/12(水) 23:35:06 ID:tCsvaW+m] >>239 これはどう? #/bin/bash FILE=$1 OFILE=/dev/shm/hoge xargs < $FILE -n10 | tr " " "\t" > $OFILE
278 名前:login:Penguin mailto:sage [2009/08/12(水) 23:40:23 ID:tCsvaW+m] >>277 じこれす まちがった xargs < $FILE -n10 | tr ' ' \\t > $OFILE です。
279 名前:login:Penguin mailto:sage [2009/08/12(水) 23:56:35 ID:0UM4nevW] すげー
280 名前:login:Penguin mailto:sage [2009/08/14(金) 09:45:57 ID:vesWTwzQ] 変数COUNTER の値が10より小さければ MMF0009 と表示 100より小さければ MMF0099 と表示 1000より小さければ MMF0999 と表示 1000ならば MMF1000 と表示 というスクリプトをcase 文を用いてすっきり書きたくて下記の通り書きましたが、 算術式及び、case の構文の違いでしょうか間違っています、ご教示願えないでしょうか。 #!/bin/bash COUNTER=0 DIGIT3=000 DIGIT2=00 DIGIT1=0 while [ ${COUNTER} -lt 999 ] do case "$COUNTR" in `expr ${COUNTER}` -lt 10) echo "MMF$DIGIT3$COUNTER";; `expr ${COUNTER}` -lt 100) echo "MMF$DIGIT2$COUNTER";; `expr ${COUNTER}` -lt 1000) echo "MMF$DIGIT1$COUNTER";; `expr ${COUNTER}` = 1000) echo "MMF$COUNTER";; esac COUNTER=`expr ${COUNTER} + 1` done
281 名前:login:Penguin mailto:sage [2009/08/14(金) 09:56:51 ID:HEs3iRVc] >>280 manpageより case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac A case command first expands word, and tries to match it against each pattern in turn, using the same matching rules as for pathname expansion (see Pathname Expansion below).
282 名前:login:Penguin mailto:sage [2009/08/14(金) 10:03:19 ID:GRUhI9LP] こういうこと? seq -f 'MMF%04.f' 0 1000
283 名前:login:Penguin mailto:sage [2009/08/14(金) 15:19:52 ID:VHMVUNf7] >>280 すっきり書いてみた。 #! /bin/sh COUNTER="$1" DIGIT1=000 DIGIT2=00 DIGIT3=0 DIGIT4= eval 'echo "MMF${DIGIT'"${#COUNTER}"'}${COUNTER}"'
284 名前:283 mailto:sage [2009/08/14(金) 15:31:27 ID:VHMVUNf7] printfがあれば更にすっきり。 #! /bin/sh COUNTER="$1" printf 'MMF%04d\n' "${COUNTER}"
285 名前:login:Penguin mailto:sage [2009/08/14(金) 23:08:31 ID:vesWTwzQ] >>280 です 皆さんどうもありがとうございます。 C のswitch〜case構文のようなものかと勘違いし、case の使い方が全然間違ってましたし他にも細かなミスがありましたが、調べてこんな感じで期待通りの振る舞いができました case $COUNTR in ?) echo "MMF$DIGIT3$COUNTER" ??) echo "MMF$DIGIT2$COUNTER" ??) echo "MMF$DIGIT1$COUNTER" 1000) echo "MMF$COUNTER" esac それから、seq とかeval の使い方も調べて見ます、どうもありがとう。
286 名前:login:Penguin mailto:sage [2009/08/14(金) 23:17:06 ID:vesWTwzQ] >>285 です もう一つお願いします。 シェルスクリプト というのは、そのような仕組みになってるんでしょうか? 単純にインタプリタ型の言語なのでしょうか、自分としてはそうではない気がします なぜなら、sudo コマンドを使う場合、シェルスクリプトの場合、スイッチ を付加して実行しますが それは直接、カーネルに対してオペレーションしているような気がするのですが?詳しい方が居られましたら教えてください。
287 名前:login:Penguin mailto:sage [2009/08/14(金) 23:19:32 ID:vesWTwzQ] ×シェルスクリプト というのは、そのような仕組みになってるんでしょうか? ○シェルスクリプト というのは、どのような仕組みになってるんでしょうか?
288 名前:login:Penguin mailto:sage [2009/08/14(金) 23:40:04 ID:4UQz02FW] >>286 >それは直接、カーネルに対してオペレーションしているような気がするのですが? 気のせいです。 手始めにforkとかexecvとか調べたらいいんじゃね?
289 名前:login:Penguin mailto:sage [2009/08/14(金) 23:56:56 ID:cgRLII5a] インタプリタだよ。 sudoは、シェルとは別のプログラムです。 シェルスクリプト中で、シェルのビルトイン関数やらで無いコマンドを書くと、 シェルは、その名前のプログラムを探してそれを実行しようとします。 上に出てきた中で言うと、 while case echo evalはシェルのビルトイン関数(?)で seq printf sudoは外部プログラムです。 「カーネルに対してオペレーションしている」云々は、 言っている意味が良く分かりません。 全ての意味のあるプログラムは、直接的にしろ間接的にしろ、 カーネルと相互作用するはずですから。
290 名前:login:Penguin mailto:sage [2009/08/15(土) 01:56:48 ID:niIslDjl] while, case と echo, eval はくくりが別だけどな。 type while とか type echo とかやってみ。
291 名前:login:Penguin mailto:sage [2009/08/15(土) 19:58:45 ID:4JYHgxvW] >>286 です 皆さんThxです。
292 名前:login:Penguin [2009/08/15(土) 23:51:22 ID:O3QLwBfx] read packetcount read port tcpdump -n -c$packetcount -s1500 -vvv -X port $port こんな感じでパケット見てるんですが、1パケットごとに色を変えることは出来ますか? 文字色の指定方法はわかるんですが、そういった指定方法や手法があればおしえてもらえないでしょうか。 なければおとなしくあきらめます。
293 名前:login:Penguin mailto:sage [2009/08/16(日) 02:00:07 ID:kxH41sn/] >>292 色は無理。 portが読み込まれていない。
294 名前:login:Penguin mailto:sage [2009/08/16(日) 02:32:16 ID:m+r83sIL] >>292 C1="$(tput setaf 0)" C2="$(tput setaf 1)" tcpdump -n -c 10 -s 1500 -vvv -X | while IFS="" read l;do if [ "$l" = "${l#$'\t'}" ]; then echo -n "$C1" A="$C2";C2="$C1";C1="$A" fi echo "$l" done こんな感じ? >>293 の言っている意味がわからないので外してるかも…。
295 名前:login:Penguin [2009/08/17(月) 09:43:35 ID:WnQqR0f7] #!/bin/bash echo -e "|""`top -i -n1 | grep '^Cpu(s)'`""|"; ちょっとおおざっぱですが上記の方法でtopの内容を抜き取ってます。 Windows付属のハイパーターミナルで見ると普通に表示されるのですが、他のターミナルソフトで(tera termとか)で見ると Cpu(s): 1.2%us, 1.2%sy, 0.0%ni, 96.3%id, 1.1%wa,erial8250: too much work for irq4 0m 0.1%hi, 0.2%si, 0.0%st| こんな感じで途中にerial8250〜と表示されます。 これを検索してもそれらしいものも出てこず、何が原因かわからないでいます。 原因をご存じの方いましたらヒントかアドバイスもらえると助かります。
296 名前:login:Penguin mailto:sage [2009/08/17(月) 11:19:54 ID:Pf83pCV6] >>295 コピペ間違ってないかな? 「serial8250: too much work for irq4」なら 次のページが引っかかった。 eve-japan.co.jp/demos/linux-boot-demo.html ターミナルソフトによって異なるのは$TERM の問題なのかな? 表示自体は 単に stderr へのメッセージが表示されてるのか とおもうけど。「2>/dev/null」とかつけたら 変わるのかな
297 名前:295 [2009/08/17(月) 11:55:51 ID:WnQqR0f7] >>296 文字コードとかの問題でsが抜けてるっぽいです。 ログを見たら同じ記述があったのでメッセージが画面に出てるっぽいですね。 方法としては破棄する(やり方調べないといけないけど)かserial8250: too much work for irq4をsedとかで 消し去るくらいでしょうか。 スマートではないですがとりあえず消し去る方向で行ってみます。 ありがとうございます。
298 名前:login:Penguin mailto:sage [2009/08/17(月) 12:12:38 ID:cm75eODq] シリアルコンソールだよね? カーネルがprintkで出してるからsedとかじゃムリだと思う。 消したいなら/proc/sys/kernel/printkをいじるとか。
299 名前:297 [2009/08/17(月) 12:52:29 ID:WnQqR0f7] >>298 ありがとうございます。 調べて6417を5417に替えようとしたら"printk" E667: Fsync failedとか出てきて 書き換えさせてくれませんでした。 解決方法はまだわかってませんがなかなかハードルが高そうです。
300 名前:297 [2009/08/17(月) 13:10:38 ID:WnQqR0f7] 補足です。 echo -e "|""`top -i -n1 | grep '^Cpu(s)'`""|"; の部分を消したら表示されなくなりました。 topした時だけ出てるみたいです。理由はわかりませんが。 top内容を >> top.datとかに書き出してそこから引っ張ってくれば 表示されないようになるかもしれません。 根本的な解決にはなってませんが・・・。
301 名前:300 [2009/08/17(月) 17:13:08 ID:WnQqR0f7] さすがにスレ違かと思いますが、/proc/sys/kernel/printkというのはviでの編集は不可ですか? ググってはいるんですが編集が出来ずに困っております。 もしかしたら凄い見当違いな事を行っているのかもしれませんが解決のヒントもらえると助かります。
302 名前:login:Penguin mailto:sage [2009/08/17(月) 17:20:05 ID:R0skv6Jz] >>301 さすがにスレ違い。
303 名前:300 [2009/08/17(月) 17:30:37 ID:WnQqR0f7] >>302 すいません。 くだ質に行ってみます。
304 名前:login:Penguin mailto:sage [2009/08/18(火) 06:39:39 ID:elYCry/8] >>301 echoするもんでしょ。JK。
305 名前:login:Penguin mailto:sage [2009/08/18(火) 08:01:40 ID:8XgVhYMF] そうか? sysctl -w kernel/printk=foobar
306 名前:login:Penguin mailto:sage [2009/08/18(火) 09:35:31 ID:BInCpQzK] もうくだ質に移動したよ。
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を使ってみます。 ありがとうございます。
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 となります。 申し訳ないです。
469 名前:login:Penguin mailto:sage [2009/11/13(金) 12:33:52 ID:veh/HZx5] >>468 変数名に-(ハイフン)は使えないと思ったが
470 名前:466 [2009/11/13(金) 12:45:36 ID:YoLOfEvP] >>469 すいません。 そうなんですか。 最近WEB関連からシェル叩くことがあって作ってたんですがシェルでは変数にハイフン使えないんですね。 修正したらうまくいきました。 ありがとうございます。
471 名前:login:Penguin mailto:sage [2009/11/13(金) 15:23:15 ID:mmBbeV5d] 区切りたいなら _ 使え。
472 名前:login:Penguin mailto:sage [2009/11/13(金) 20:07:30 ID:csbg7Gm/] >>466 >>5 >・思い通りに動かないときは、まずは sh -x でトレースしましょう。
473 名前:login:Penguin mailto:sage [2009/12/07(月) 12:06:33 ID:XdJnANaN] [ string ] と、[ -n string ] の違いについてお尋ねします。 [ $(cat /dev/null) ] が偽になるのに対して、[ -n $(cat /dev/null) ] は真になってしまうのですが、何が違うのでしょうか。 [ -z $(cat /dev/null) ] は真になるので、なんだか -nだけが仲間外れな気がします。
474 名前:login:Penguin mailto:sage [2009/12/07(月) 13:25:47 ID:OGpjrFHy] >>473 それだと $(cat /dev/null) が消えて引き数がなくなって [ ] [ -n ] [ -z ] になる。 なんでそういう挙動になるかは bash の test.c でも読んでもらうとして、 その挙動を避けるには [ "" ] [ -n "" ] [ -z "" ] にすればいい。
475 名前:473 mailto:sage [2009/12/07(月) 13:46:33 ID:5UzhKh29] >>474 なるほど納得です。 そう言えば変数が空文字列になってしまう場合を考慮してクォートしろと聞いた記憶があるような気がします。 素早いお返事ありがとうございました。ソースもあとで読んでおきます。
476 名前:login:Penguin [2009/12/13(日) 00:31:23 ID:h59G/AZL] よくダウンロードとかすると何%まで完了してるかみたいなのを 動的に出力するのってどうやんの?
477 名前:login:Penguin mailto:sage [2009/12/13(日) 01:45:44 ID:k2yGj3y5] 普通に wget でいいんじゃない?
478 名前:476 [2009/12/13(日) 02:23:19 ID:h59G/AZL] >>477 ダウンロードに限らず yumとかbuildするときに%を示す数値が動的に変わっていくじゃないですか。 あれ、どうやって実装してんのかなぁと。 誰かわかる?
479 名前:login:Penguin mailto:sage [2009/12/13(日) 02:27:41 ID:/qP8xinl] yumってpythonだっけか そういうライブラリがあるんでないの シェルスクリプトでやりたいならこういうのがある www.theiling.de/projects/bar.html
480 名前:login:Penguin mailto:sage [2009/12/13(日) 03:38:56 ID:s0ebrxv6] >>478 バックスペースを然るべき回数売って表示し直し
481 名前:login:Penguin mailto:sage [2009/12/13(日) 11:14:43 ID:45+rg1Ww] 画面制御の話題だったの? このスレ的には tput あたりでやるのが正しいのだろうか。
482 名前:login:Penguin mailto:sage [2009/12/13(日) 11:23:29 ID:1bGElD/p] >>478 $ man console_codes
483 名前:login:Penguin mailto:sage [2009/12/13(日) 11:50:06 ID:k2yGj3y5] このスレ的には dialog とか whiptail じゃないの。
484 名前:login:Penguin mailto:sage [2009/12/13(日) 18:57:54 ID:7EV0TAof] 普通の文章を書いた平文テキストをxtermに関連付けして開くと 実行権もないのにxtermがいくつも開いてフリーズします。 なぜですか?
485 名前:login:Penguin mailto:sage [2009/12/13(日) 19:25:45 ID:VEJMKGLd] 「関連付けして開く」ってどういう概念?
486 名前:login:Penguin mailto:sage [2009/12/13(日) 19:31:32 ID:7EV0TAof] 普通は表示とか端末で実行とか聞かれるので、右クリメニューに入れました
487 名前:login:Penguin mailto:sage [2009/12/13(日) 19:38:48 ID:8kXkcLfR] Ubuntu使ってるの?
488 名前:login:Penguin mailto:sage [2009/12/13(日) 22:54:17 ID:u+Xt7Oyd] >>486 ごめん。尋ねておいて悪いけど、 「関連付けして開く」や「右クリメニューに入れ」るってのが判らない。 なので助言できない。
489 名前:login:Penguin mailto:sage [2009/12/13(日) 22:58:13 ID:X8Bwu1bm] >>484 Windowsの関連づけの感覚? GNOMEであれば、プロパティから開くアプリ指定してるとかってことか? 試しにユーザーを新しいの作って再現するかどうか試してみたら? もし再現できなければ ~/.gconf* ~/.gnome* とか退避して削除してログインしなおしてみるとか。 内容からして、くだ質のほうがアドバイスもらえると思うよ。
490 名前:login:Penguin mailto:sage [2009/12/13(日) 23:54:09 ID:3DX9cdGt] >>484 「xterm を起動できるかどうか」は 「xterm を実行する権限があるかどうか」で決まることだから、 「平文テキストを実行する権限」とは関係ない。 $ xterm /tmp/hoge.txt とかやると、 No absolute path found for shell: /tmp/hoge.txt とかいったメッセージは出るけれど、xterm が起動する。 関連付け はよくわからないけれど、 テキストファイルをまとめて開こうとすれば、 ファイルの数と同じだけ xterm が一気に起動する ってことは想像できる。 CPUとか メモリ/swap とかが足りなければ、フリーズみたいな状況になるかもしれない。
491 名前:login:Penguin mailto:sage [2009/12/14(月) 00:20:50 ID:SmNokk3G] >>484 シェルスクリプトの話じゃないでしょう。 こっちで。 くだらねえ質問はここに書き込め! Part 179 pc11.2ch.net/test/read.cgi/linux/1257056891/ 自分の環境もちゃんと書くこと。 www12.atwiki.jp/linux2ch/pages/5.html#id_d2fb2105
492 名前:login:Penguin [2010/01/05(火) 20:34:00 ID:nuI9c99Q] bashで手軽にオブジェクト指向モドキする方法ってありませんか? とりあえず試みたのですが、スッキリしません。 #!/bin/bash gal(){ eval "$1"_name="$2" eval "$1"_age="$3" eval "$1"_sex="$4" } aisatsu(){ eval echo "私は\"\$"$1"_name"、\"\$"$1"_age"歳です。よろしく ね。" } hanasu(){ eval echo "\"\$"$1"_name\"に何の用?" } gal "yuka" "由佳" "16" "女" aisatsu "yuka" hanasu "yuka"
493 名前:login:Penguin mailto:sage [2010/01/05(火) 20:45:01 ID:kbriKfoG] >>492 emasaka.blog65.fc2.com/blog-entry-379.html
494 名前:login:Penguin mailto:sage [2010/01/05(火) 20:48:20 ID:nuI9c99Q] >>493 すごいものがあるんですね。 ありがとうございました。
495 名前:login:Penguin mailto:sage [2010/01/07(木) 18:16:37 ID:wAYEJTZp] テキストファイルで、指定した文字列を含む最初の行を開始位置とし、先とは別の 文字列を含む行が見つかるまでを削除するにはどうすれば良いでしょうか?
496 名前:login:Penguin mailto:sage [2010/01/07(木) 18:20:32 ID:D02SG01g] >>495 sed '/xxx/,/yyy/d'
497 名前:login:Penguin mailto:sage [2010/01/08(金) 10:03:28 ID:KgmcRvHm] >>495 ありがとうございます。 sedというのは強力なんですね。
498 名前:login:Penguin mailto:sage [2010/01/08(金) 12:52:11 ID:zGQxNXrb] >>497 これで「強力」ってどういう意味?
499 名前:login:Penguin mailto:sage [2010/01/08(金) 16:04:10 ID:/auv4CfE] >>498 文字/行削除程度しか知らない初心者にとっては、超強力。
500 名前:497 mailto:sage [2010/01/08(金) 23:16:45 ID:KgmcRvHm] shの変数を>>496 の/xxx/に使いたい場合についてお伺いします。 path=/aaa/bbb sed "/$path/,/yyy/d" の様にしても$pathが展開された時点で区切り文字がエスケープされておらず上手く いきません。 前処理が必要なのか、それともスマートな方法が用意されているのでしょうか?
501 名前:login:Penguin mailto:sage [2010/01/08(金) 23:33:25 ID:awvr0YeL] ファイル名はNUL文字以外なら全て使えるんだよね。 ということは、前処理の段階で区切り文字をエスケープする必要があるのかな。
502 名前:497 mailto:sage [2010/01/08(金) 23:38:17 ID:KgmcRvHm] やはり自前で前処理するわけですね。 sedで簡単に出来そうですね。
503 名前:497 mailto:sage [2010/01/08(金) 23:51:05 ID:KgmcRvHm] 下でできました。 #!/bin/sh -x var=/aaa/bbb esc=$(echo $var | sed -e 's/\//\\\//g') $()の代わりに``を使うとパイプがあるせいか上手くいきませんでした。 実際はどうなのでしょう? 教えて頂けると嬉しいです。
504 名前:login:Penguin mailto:sage [2010/01/08(金) 23:52:38 ID:r+fu5lRJ] sed "/\\$path/,/yyy/d" はどうなの?
505 名前:login:Penguin mailto:sage [2010/01/08(金) 23:53:13 ID:aqeo86VH] 区切り文字を変えるんだよ! sed '\@foo@,\@bar@d'
506 名前:497 mailto:sage [2010/01/09(土) 00:07:36 ID:WfSq+WCG] >>504 それだと$pathの先頭にのみ区切り文字がある場合にしか対応していないと思います。 >>505 そういうときに使うのですね。 なるほど。 ありがとうございました。
507 名前:login:Penguin mailto:sage [2010/01/10(日) 12:29:36 ID:jRBDc3XG] com1 | com2 | com3 の様なとき、どこかでエラーが起こった場合に、それを知ることはできないでしょうか? bash3.0以降だと${PIPESTATUS[@]}で可能なようですがshでなんとかならないかと。
508 名前:login:Penguin mailto:sage [2010/01/10(日) 12:37:23 ID:E5a795Pl] subshellを使って、 (( com1 判定)| com2 判定 )| com3 みたいな事を見た憶えがするけど、定かでない。
509 名前:初心者 mailto:zzhong33@yahoo.co.jp [2010/01/13(水) 23:30:52 ID:9IUNZoL1] run.shファイルの中で、script_file.shをsourceした場合。 sourceされているscript_fileの中でscript_file自身の絶対パスを得る方法を調べています。 bashの場合はscript_fileの中で$BASH_SOURCEから得られるが、他のシェル(zsh/tcsh/ksh)でscript_file.shのパスを得られる方法を 教えていただけませんか? >>>>>>>>>>>>>>>>>>>>>> script_file.shファイルのある場所 /path/to/script_file.sh >>>>>>>>>>>>>>>>>>>>>> 実行例: %./run.sh 期待結果: /path/to/ ファイル <run.sh>の中身 ------------- #!/bin/(sh/zsh/tcsh...) source $path/script_file.sh ------------- ファイル script_file: ------------- script_file_path=`******` echo $script_file_path; -------------
510 名前:login:Penguin mailto:sage [2010/01/13(水) 23:53:55 ID:rEuhDc/f] >>509 機能知らない分際で答えるとさ 単純に呼ぶんだからさ source "$path/script_file.sh" "$path/script_file.sh" とか引数として渡してecho $1とかしても できちゃったりはするね
511 名前:login:Penguin mailto:sage [2010/01/13(水) 23:59:57 ID:rEuhDc/f] 期待結果は/path/to/だったかorz ならsource "$path/script_file.sh" "$path" でまぁできるといえばできてるけど
512 名前:login:Penguin mailto:sage [2010/01/14(木) 00:01:40 ID:4xSyV+UX] /が抜けてたねorz
513 名前:login:Penguin mailto:sage [2010/01/14(木) 03:10:55 ID:4xSyV+UX] >>507 気になったので書いてみた >>508 氏が言ってるようにもっと楽にできるんだろうけど ちなみに頭悪いので間違ってる可能性ありと 使い物になってないと思うから 一応動いてるかも程度
514 名前:login:Penguin mailto:sage [2010/01/14(木) 03:12:28 ID:4xSyV+UX] function perror(){ stdout=`mktemp`;stdout2=`mktemp` first=on until test 1 -eq $# #引数一個の場合は何もしないので注意 do if test $first = on then first=off $1 1>$stdout 2>/dev/null judge=$? fi if test $judge -eq 0 then if ! test 2 -eq $# then $2<$stdout 1>$stdout2 2>/dev/null judge=$? shift else #最後は標準出力へ $2<$stdout #最後のcommandの失敗は判定してないので注意 shift fi else echo "$1" error 1>&2 break fi stdout_hold=$stdout # 入れ替え stdout=$stdout2 stdout2=$stdout_hold done rm $stdout $stdout2;unset stdout stdout2 stdout_hold first judge }
515 名前:login:Penguin mailto:sage [2010/01/14(木) 03:15:58 ID:4xSyV+UX] perror 'ls /usr/bin' 'sed 's/^/test/g'' 'grep gcc' less perror 'ls /usr/bin' 'sed 's/^/test/g'' 'tar xf' less まぁ一応動いてるのかな!?
516 名前:login:Penguin mailto:sage [2010/01/14(木) 17:27:09 ID:FVM4x3d9] sed -e '$-3,$d' file とすると sed: -e expression #1, char 2: unknown command: `-' というエラーがでます。 versionは4.1.5ですが上記の使い方間違ってますか?
517 名前:login:Penguin mailto:sage [2010/01/14(木) 17:55:26 ID:EAAIjJ3h] vi じゃないんだからそんな指定できないよ
518 名前:login:Penguin mailto:sage [2010/01/14(木) 22:28:16 ID:dyjWaACs] >>507 エラーが起こったかどうか *見えればいい* ってだけならこんなやりかたも。 (com1 ; echo $?>/tmp/test.log) | (com2 ; echo $?>>/tmp/test.log) | 略 (com1 ; xmessage com1:$?&) | (com2 ; xmessage com2:$?&) | 略
519 名前:login:Penguin mailto:sage [2010/01/15(金) 09:27:35 ID:vHlv+w15] >>516 つhead -n -4 file
520 名前:login:Penguin mailto:sage [2010/01/15(金) 10:37:34 ID:0e3bcUwp] >>519 -nの値に負の数を与えられるんですね。
521 名前:login:Penguin mailto:sage [2010/01/15(金) 11:44:19 ID:exz65txq] ダブルクォーテーションで囲まれた文字列を抜き出すってどうやればいいんだ? cutでもexprでも俺には無理だった、絶対サクッとできるはずなのに悔しすぎる…
522 名前:login:Penguin mailto:sage [2010/01/15(金) 12:29:58 ID:n61dnfY7] grep -o '"[^"]*"'
523 名前:login:Penguin mailto:sage [2010/01/15(金) 13:14:40 ID:exz65txq] >>522 今日一日崇めさせてくれ
524 名前:login:Penguin mailto:sage [2010/01/15(金) 20:34:53 ID:cwTkNqT3] 1日限定かい。
525 名前:login:Penguin mailto:sage [2010/02/07(日) 15:35:53 ID:lbKDrfi6] $ df -h /tmp Filesystem Size Used Avail Use% マウント位置 tempfs 512M 89M 424M 18% /tmp の%の前の数字(ここでは18)だけ取り出したいんだけど、どうすればよいですか?
526 名前:login:Penguin mailto:sage [2010/02/07(日) 15:58:04 ID:vkq5/P4Z] awk使う
527 名前:login:Penguin mailto:sage [2010/02/07(日) 16:03:00 ID:U7v7s3zM] とても安直な方法なので最適解には程遠いと思いますが df -P /tmp | grep '/tmp$' | awk '{print $5;}' | sed 's/%$//'
528 名前:login:Penguin mailto:sage [2010/02/07(日) 16:06:14 ID:lbKDrfi6] >>526 ,527 ありがとう。
529 名前:526 mailto:sage [2010/02/07(日) 19:06:47 ID:dchTEc3Z] >>527 おまwww df -h /tmp | awk '/\/tmp/ { print gensub("%", "", "", $5) }'
530 名前:login:Penguin mailto:sage [2010/02/07(日) 19:16:50 ID:U7v7s3zM] いやそれくらい知ってる
531 名前:login:Penguin mailto:sage [2010/02/07(日) 19:30:22 ID:Fd1qGpin] 複数行のキーワードをfgrepする手はないスか? キーワードの行数は不定。以下例では仮に2行とします。 $ cat -n text 1 abcdefg******* 2 [hijklmn-z] 3 abcdefg******* $ fgrep 'abcdefg*******なんとか[hijklmn-z]' text text:1:abcdefg******* text:2:[hijklmn-z] 1と2行目のペアはヒットするが、3行目がヒットしてはいけない。
532 名前:531 mailto:sage [2010/02/07(日) 19:32:00 ID:Fd1qGpin] ああっと。 上の検索コマンドはgrepファミリーでなくても良いですが、perlは駄目です。
533 名前:login:Penguin mailto:sage [2010/02/07(日) 19:58:16 ID:KEZIcPfj] 宿題は自分でやれよ
534 名前:login:Penguin mailto:sage [2010/02/07(日) 21:03:26 ID:U7v7s3zM] #!/bin/bash AWKFILE="/tmp/$0.$$" trap "rm -f ${AWKFILE}" 0 KV=0 echo "BEGIN{s=0;h=\"\"};" > "${AWKFILE}" for keyword in $*; do echo "/${keyword}/{if (s==${KV}){s=s+1;h=h NR \"\\t\" \$0 \"\\n\";} else {s=0;h=\"\"}};" KV=`expr ${KV} + 1` done >> "${AWKFILE}" echo "{if (s==$#){print h;s=0;h=\"\";}};" >> "${AWKFILE}" awk -f "${AWKFILE}"
535 名前:login:Penguin mailto:sage [2010/02/07(日) 21:24:02 ID:U7v7s3zM] いろいろ残念な部分があるけど、そこは使う人が直してね
536 名前:login:Penguin mailto:sage [2010/02/07(日) 21:36:26 ID:5ZhdKpPZ] >>534 んー。やっぱりスクリプト生成みたいになりますか。 私以外の人が考えてもすっきり行かない事が解りました。ありがとうございます。 >>533 この手の宿題を出す学校はあまり無いんじゃないかな。
537 名前:login:Penguin mailto:sage [2010/02/07(日) 21:41:15 ID:U7v7s3zM] 自分でできない部分だけ聞きなよ
538 名前:login:Penguin mailto:sage [2010/02/07(日) 21:51:00 ID:UYJWIskO] >>536 質問に答えようとしてない奴の発言にはいちいち反応するな。 「教えてくれ」ってやつと「宿題は自分でやれ」ってやつは 「歩み寄る可能性がない」からスルーしたほうがいい。 専ブラ使える環境なら、NGワードに「宿題」って単語を入れておいたほうがいいよ。
539 名前:login:Penguin mailto:sage [2010/02/07(日) 22:05:12 ID:U7v7s3zM] >>531 はいろいろ引っかかる部分があるから正直俺も最初は回答しようかどうか迷ったぞ 返事を聞いて>>538 も出てああやっぱりかと思ったし... と戯言はここまでにしとく
540 名前:login:Penguin mailto:sage [2010/02/07(日) 22:36:33 ID:5ZhdKpPZ] >>537 >自分でできない部分だけ聞きなよ すっきりと実現できなかったので尋きました。というか、 往々にしてこの手のことを実現すると車輪の再発明になってしまってる事が多い。 なので、他の人も決定的な車輪を持ちあわせていないという情報はとても大切で、 有難く思っています。
541 名前:login:Penguin mailto:sage [2010/02/07(日) 22:44:49 ID:qrQKR8fu] 典型的なゆとり脳というか なんでこんな上から目線なんだろ そういうのは自分で書いたの張ってから言えよ
542 名前:login:Penguin mailto:sage [2010/02/07(日) 22:46:48 ID:U7v7s3zM] >>540 実現できたなら実現方法そのものを聞く必要はない 実現方法を提示してより良くするにはどこを直せばいいか聞けばいい 他人のコストは格段に違うだろうし、回答も違ったものになる というかお前>>526 だろ?
543 名前:526 mailto:sage [2010/02/07(日) 23:05:32 ID:sirvd3yi] こらこらw 静観してる俺まで巻き込むなよ
544 名前:login:Penguin mailto:sage [2010/02/07(日) 23:09:51 ID:fkJC7wtF] >>542 そうですね。その点は気をつけたいと思います。 >というかお前>>526 だろ? いや違う。 むしろ、>>529 (526)にしろあなたにしろ"/tmp"をマッチさせている時点で、要求条件から逸脱していると思っている。
545 名前:login:Penguin mailto:sage [2010/02/07(日) 23:30:09 ID:U7v7s3zM] ID変えながら大変ですね。元に戻せないの?
546 名前:login:Penguin mailto:sage [2010/02/07(日) 23:44:26 ID:sirvd3yi] どうやって戻すんだよw
547 名前:login:Penguin mailto:sage [2010/02/07(日) 23:49:53 ID:qVmLGOqM] 昼間寝ていたら正規表現使う夢を見た気がする、なぜだ
548 名前:login:Penguin mailto:sage [2010/02/07(日) 23:56:03 ID:U7v7s3zM] 同じIPが取れるまでトライ!(やったことないので同じになるのか知らん)
549 名前:login:Penguin mailto:sage [2010/02/08(月) 06:35:08 ID:wgsJNc2d] >>548 お前ちょっと黙れ。
550 名前:login:Penguin mailto:sage [2010/02/08(月) 08:30:32 ID:shLyrCGR] U7v7s3zMが取れるまでトライし続けてるのかなw
551 名前:login:Penguin mailto:sage [2010/02/08(月) 12:19:18 ID:2AE05UQA] 答えてもらっておいて「まあそんなもんだよね」 これはひどい
552 名前:login:Penguin mailto:sage [2010/02/08(月) 17:02:25 ID:h/fx9poh] 複数の数字に,同じ四則演算(+,−,*,/)を繰り返した計算結果を表示するシェルスクリプトを,cshシェルスクリプトで書け。 (基本仕様) @ コマンドとして実行できる.(シェルコマンドである.) A 入力した数字を計算できる. B 入力できる数字の個数は2以上とする. C 四則演算子(+,−,*,/)を選択,または直接入力して 数字1□数字2□・・・□数字N (□=+ or − or * or /,N≧2) の計算結果を出力する. D 四則演算子以外の記号が入力された場合,エラーメッセージを出力する. (ポイント) ? シェルコマンドにするには,スクリプトの最初に(#!で始まる)おまじないを書く. ? 標準入力から文字列を入力するには $< を用いる. ? コマンドラインに引数を指定した場合は,その引数は変数$argvに格納されている.その各要素を参照するには,$argv[1],$argv[2](または$1,$2)などとする. ? 四則演算には @ コマンドが使用できる.(ただし,整数しか扱えない.) 誰かわかるひとおねがいします(今週中にお願いします!)
553 名前:login:Penguin mailto:sage [2010/02/08(月) 17:05:28 ID:llGt0cFK] 何箇所でマルチしてんだよwww
554 名前:sage [2010/02/08(月) 17:06:29 ID:kDoV0MXx] 宿題は自分でやろうね。
555 名前:login:Penguin mailto:sage [2010/02/08(月) 20:38:54 ID:Wyshj96C] 後から読んで526にワロタ カワイソスw
556 名前:login:Penguin mailto:sage [2010/02/19(金) 00:14:13 ID:c2ocdmWw] df -h /tmp | sed 's/.*\([0-9][0-9]*\)%.*/\1/'
557 名前:login:Penguin [2010/02/20(土) 23:34:54 ID:vDEbYPUT] 以下の結果を出力するシェルを,bashスクリプトで書け. (基本仕様) ・コマンドとして実行できる.(シェルコマンドである.) ・ユーザーが10000以上99999以下の5桁の数字を入力する. ・その数字を7で割って1余り,かつ13で割って2余った場合は Daikichiと表示する. ・それ以外で,13で割って2余った場合は Chuukichiと表示する. ・それ以外で,7で割って1余った場合は Shoukichiと表示する. ・それ以外の場合は Hazureと表示する. ・入力した文字が10000以上99999以下の数字以外の場合はエラーメッセージを表示する. ・できる人は,コマンドライン引数でDaikichiなどの文字を変更できるようにする. (ポイント) ☆シェルコマンドにするには,スクリプトの最初に(#!で始まる)おまじないを書く. ☆標準入力から文字列を入力するには read を用いる. ☆コマンドラインの引数は,$@に格納されている.(その要素は $1 $2 ...) ☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.) 誰かわかるひとお願いします
558 名前:login:Penguin mailto:sage [2010/02/20(土) 23:37:36 ID:8qh4FPc7] >>557 > 誰かわかるひとお願いします まぁ、Linux使える人ならば、誰でも分かる "学校" の課題ですわな(w # "学校" は 大学 でない。
559 名前:login:Penguin mailto:sage [2010/02/20(土) 23:46:16 ID:WE3Utbg7] シェルスクリプトの課題を出す学校ってあるんだね。 ふつーは、CとかJavaを中心にやるものだと思ってた。
560 名前:login:Penguin [2010/02/21(日) 00:00:05 ID:WDiWxw8N] #!/bin/bash read read echo $((read%3))`echo 5p$(echo e$(echo l5b$(echo 6M5)q2)744$(echo GsCg$(echo =$(echo =))))|base64 -d`
561 名前:login:Penguin mailto:sage [2010/02/21(日) 00:16:12 ID:FUNRtF1w] 死ねばいいのに
562 名前:login:Penguin mailto:sage [2010/02/21(日) 00:27:29 ID:R8eJDQx8] 何をお願いされているのだろう。アンケートかな? 回答「わかります」 上から2桁目で四捨五入したい(例: 15 -> 20, 312 -> 300, 9432 -> 9000) どうやるのが一番簡単かな?
563 名前:login:Penguin [2010/02/21(日) 00:39:34 ID:y6fTjKHz] 10を底とした対数とって 1.5*10^1 3.12*10^2 9.432*10^3 仮数部を小数点以下で四捨五入する
564 名前:login:Penguin [2010/02/21(日) 01:05:26 ID:y6fTjKHz] 全然対数じゃないや
565 名前:login:Penguin mailto:sage [2010/02/21(日) 01:20:23 ID:mOFZBUIZ] >>557 お前UNIX板のシェルスクリプトスレでも宿題は自分でやれって言われてただろ マジで死ね
566 名前:login:Penguin [2010/02/21(日) 02:00:25 ID:y6fTjKHz] $ echo 'x=9432; beki=l(x)/l(10.0); scale=0; beki/=1; scale=10; y=x/(10^beki); y+=0.5; scale=0; y/=1; y*=(10^beki); scale=0; y/=1; y;' | bc -l 9000 一応、15, 312, 9432 については期待の値になった。
567 名前:login:Penguin mailto:sage [2010/02/21(日) 02:38:10 ID:ymcnTK5S] >>566 しかし4432613で矛盾が出た。
568 名前:login:Penguin [2010/02/21(日) 08:29:04 ID:y6fTjKHz] 違うかね? 4432613 = 4.432613 * 10^6 → 4.4*10^6 → 4.0*10^6 = 4000000 >>562 さんに聞いてみようか。 入力4432613での期待値は、 上から2桁目の"4"で四捨五入して、4000000 でよろし? 3桁目の"3"でして、4400000 ではなくて。
569 名前:login:Penguin [2010/02/21(日) 09:26:12 ID:y6fTjKHz] 少しコメント入れました。ダメな場所はどなたか直してください。 echo 'x=4432613; # x=y * 10^d 表現にする d=l(x)/l(10); scale=0; d/=1; scale=1; y=x/(10^d); # yの小数点第一位を四捨五入して整数に。 y+=0.5; scale=0; y/=1; # 元の桁数に戻す。 z=y*(10^d); z; ' | bc -l
570 名前:login:Penguin [2010/02/21(日) 11:49:45 ID:y6fTjKHz] アプローチを変えて文字列処理にしてみた $ echo 4432613 | perl -npe 's/^(\d)(\d)(\d+)/$1+($2>4) . 0 . 0 x length($3)/e;'
571 名前:login:Penguin [2010/02/21(日) 12:23:46 ID:y6fTjKHz] $ echo 15 | perl -npe 's/^(\d)(\d)(\d*)/$1+($2>4) . 0 . 0 x length($3)/e;'
572 名前:login:Penguin [2010/02/21(日) 13:04:19 ID:y6fTjKHz] #!/bin/ksh v="$1" a=${v:0:1} b=${v:1:1} c=${v:2} [ $b -gt 4 ] && a=$((a+1)) b=0 c=$(echo $c | tr 0-9 0) echo "$a$b$c"
573 名前:login:Penguin mailto:sage [2010/02/21(日) 13:09:12 ID:7QPAwQGI] ん、よくわからんけど…… 乙 w
574 名前:562 mailto:sage [2010/02/21(日) 19:12:39 ID:R8eJDQx8] なんかすごいものがw >>568 >入力4432613での期待値は、 >上から2桁目の"4"で四捨五入して、4000000 でよろし? よろしです。 パッと見で>>571 がスマートですね シェルからこいつを呼ばせて貰おうと思います ありがとうございましたm(_ _)m
575 名前:login:Penguin [2010/02/21(日) 20:33:49 ID:y6fTjKHz] >>507 ttp://sourceforge.jp/projects/sfnet_pipestatus/ ど根性に脱帽
576 名前:login:Penguin mailto:sage [2010/02/26(金) 00:26:14 ID:DYTaEvQS] 自分自身(ファイル)をサーバにuploadするシェルスクリプトって可能ですか? 具体的には、ちょこちょこ定期的にレンタルサーバにuploadしたいファイル群があるのでシェルスクリプトを書きたいのですが、 そのシェルスクリプトファイル自身もuploadしたいのです。
577 名前:login:Penguin mailto:sage [2010/02/26(金) 00:29:09 ID:C/OfvsKM] まず、なぜ不可能だと考えたのか、そこから聞こうか。
578 名前:login:Penguin mailto:sage [2010/02/26(金) 00:37:26 ID:DYTaEvQS] 今実行中のファイルを操作するってのがいけないことなのかなぁと…
579 名前:login:Penguin mailto:sage [2010/02/26(金) 00:39:36 ID:dGd2Emr5] 自身のunlinkすら可能だというに
580 名前:login:Penguin mailto:sage [2010/02/26(金) 00:56:31 ID:7suOgZ+f] アップロードどころか実行中のスクリプトを編集することもできるよー
581 名前:login:Penguin [2010/02/26(金) 21:44:10 ID:ZUmR/bTp] 以下の結果を出力するスクリプトを,UNIXシェルで書け. (基本仕様) ・コマンドとして実行できる.(UNIXシェルである.) ・主人公、妹1名、両親、自分の友人数名(うち最低1名は女性、半数以上は男性とする)、妹の友人(女性)数名が登場する. ・主人公、妹、自分の友人、妹の友人はいずれも生徒もしくは学生とする. ・両親のうち、父は総合商社勤務のサラリーマン、母は専業主婦とする. ・主人公の言動やイベントの発生にともない、各キャラのパラメータを変化させる. ・病弱な妹を思いやる兄と妹の交流を中心に、他の登場人物との友情や恋愛を描写する. ・エンディングは妹、もしくは妹の友人のいずれかと深い恋愛関係になるか、誰とも親密に慣れないバッドエンディングになるようにする. ・妹と恋愛関係が深まる場合、病弱な妹への思いやりが徐々に、自然に恋愛感情へ変化するように描写する. ・ゲームの操作方法はコマンド選択式またはコマンド入力式とする. ・すべてUNIXシェル内部で処理し,外部コマンドは呼び出さないこと. (ポイント) ☆UNIXシェルにするには,ファイルの最初に #!/bin/bashというおまじないを書く. ☆コマンド選択方式のゲームにする場合、select文を使用できる。 ☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.) 誰かわかるひとお願いします
582 名前:login:Penguin mailto:sage [2010/02/26(金) 21:49:36 ID:ueeczQLj] さようなら
583 名前:login:Penguin mailto:sage [2010/02/26(金) 22:36:07 ID:PyskErwP] >>581 UNIXシェルってなんだ?
584 名前:login:Penguin mailto:sage [2010/02/26(金) 22:53:51 ID:nq/ujwuR] >>581 いろいろ拡張されてきたなw
585 名前:login:Penguin mailto:sage [2010/02/26(金) 23:01:55 ID:UQaFhRqQ] 自演ウザス
586 名前:login:Penguin mailto:sage [2010/02/27(土) 08:37:06 ID:dxtkbNS9] 素直にワラタ
587 名前:login:Penguin [2010/02/28(日) 01:11:29 ID:oz3AO1O4] シェルスクリプトとVBA、どちらが簡単ですか?
588 名前:login:Penguin mailto:sage [2010/02/28(日) 01:13:35 ID:XA1Dii88] シェルスクリプト
589 名前:login:Penguin mailto:sage [2010/02/28(日) 01:20:34 ID:oz3AO1O4] >>588 シェルスクリプトと比較して、VBAはどこがどんな風に難しいのでしょうか?
590 名前:login:Penguin mailto:sage [2010/02/28(日) 01:37:41 ID:XA1Dii88] 用途が全然違う VBA=MS製品の補助、高度なことやろうと思ったらVBの型とか定数とかメソッドとかプログラミング言語として覚えないといけない シェルスクリプト=普段から使っているコマンド郡の応用、データの流れとアルゴリズムさえ判れば外部プログラム呼び出して何でも出来る
591 名前:login:Penguin mailto:sage [2010/02/28(日) 01:52:34 ID:oz3AO1O4] >>590 疑問なのは、なぜアプリケーションの補助がそんなに難しいのか、 もっと簡単にできなかったのか、それでは普通の人に使えないのではないか、 という点です。 Linuxで表計算っぽいことができる言語というとawkがありますけど、 あれくらい簡単だったら誰でも使えると思うのですが。 マクロ言語がエンドユーザ言語として使われるためには簡単でなければならないはず。 それなのにシェルスクリプトより難しいというのは、その目的にそぐわないような気がするのですが。
592 名前:login:Penguin mailto:sage [2010/02/28(日) 01:55:02 ID:C3UADE41] VBAの質問ならよその板でやっとくれ。
593 名前:login:Penguin mailto:sage [2010/02/28(日) 01:56:36 ID:oz3AO1O4] >>592 VBAについて知りたいというよりも、 シェルスクリプトとVBAの違いというか、 際立った特徴のようなものがあれば、それを知りたいんです。
594 名前:login:Penguin mailto:sage [2010/02/28(日) 02:06:41 ID:B/kw3N2G] >>593 そもそも活用シーンが全然違うのに比較してどうする。根本が間違っている。 比較するならWSHとだろう。
595 名前:login:Penguin mailto:sage [2010/02/28(日) 02:12:43 ID:oz3AO1O4] >>594 WSHもWindows PowerShellも エンドユーザにはあまり受け容れられていないように見受けられます。 Linux/UNIX/MacOSXのエンドユーザでもスクリプトを全く書かない人はいますが、 Windowsよりはそういう人が少ないと思います。 単純にWindowsのほうがヘビーユーザ率が低いというもあるでしょうが、 それだけでなく、Windowsで使われるそれらの言語が そもそもエンドユーザに適さない欠点を有しているからではないのでしょうか? とすると、逆にシェルスクリプトはどういう点でそれらより優れているのでしょうか?
596 名前:login:Penguin mailto:sage [2010/02/28(日) 02:20:34 ID:B/kw3N2G] >>595 だからさー比較する前提条件が間違っている。
597 名前:login:Penguin mailto:sage [2010/02/28(日) 02:24:04 ID:oz3AO1O4] >>596 WSHと比較するようにアドバイスされたので、そうしたのですが。
598 名前:login:Penguin mailto:sage [2010/02/28(日) 02:31:01 ID:v9A/VFIk] シェルスクリプトと比較するべきはバッチファイル。 君の質問は「バッチファイルとVBA、どちらが簡単ですか?」という事になるから この板で聞く事じゃない。
599 名前:login:Penguin mailto:sage [2010/02/28(日) 02:33:03 ID:oz3AO1O4] >>598 バッチファイルなんて論外でしょう。 あれとシェルスクリプトを一緒にするのはやめましょう。
600 名前:login:Penguin mailto:sage [2010/02/28(日) 02:43:10 ID:v9A/VFIk] VBAと一口に言ってもWord、Excel、Access、Outlook…全然違うぞ?
601 名前:login:Penguin mailto:sage [2010/02/28(日) 02:44:34 ID:B/kw3N2G] っていうかスレチ。 いちいちageているし、これ以上続けるならレス乞食とみなしてあぼーんする。 くだ質いけ。
602 名前:login:Penguin mailto:sage [2010/02/28(日) 02:47:24 ID:C3UADE41] くだ質に来られても困るな。 ム板にでも行ってくれ。
603 名前:login:Penguin mailto:sage [2010/02/28(日) 02:52:42 ID:oz3AO1O4] WSH(VBScript)で「C:\TechEzo\Round23.txt」内の「ようこそ」を含む行を表示する Set fso = CreateObject("Scripting.FileSystemObject") Set regEx = New RegExp Set tempFile = fso.OpenTextFile("C:\TechEzo\Round23.txt") regEx.Pattern = "ようこそ" Do Until tempFile.AtEndOfStream tempLine = tempFile.ReadLine If regEx.Test(tempLine) Then WScript.Echo tempLine End If Loop これを見て「オブジェクト指向だから素晴らしい」とか 「シェルスクリプトに比べて簡単」とか思う人はいないでしょう。 管理者や一般のエンドユーザなど、ノンプログラマも使う言語を こんなふうに設計したMSは頭が悪いとしか思えないです。
604 名前:login:Penguin mailto:sage [2010/02/28(日) 03:01:02 ID:SsRM0ruv] マルチ相手によーやるな
605 名前:login:Penguin mailto:sage [2010/02/28(日) 09:04:34 ID:JCw0fVKj] >>603 Window Power Shellもしかり。ちょい使いするには厳格すぎる。 あまりハードルを下げるとMS専門鯖管にスキルが付いてLinuxに行っちゃうからじゃね?
606 名前:login:Penguin mailto:sage [2010/02/28(日) 11:13:46 ID:ZpjvZrys] 指定したディレクトリ以下を再帰的に検索して 同じディレクトリに大文字小文字違いでファイル名が重複して存在してた場合 例) ABC.txt abc.txt abc.TXT どれか一つ(どれでもいい)を残してあと消去するってのをやりたいけどどうやんの
607 名前:login:Penguin mailto:sage [2010/02/28(日) 11:15:22 ID:wBfYi/JJ] >>603 見たら、ハードル高くしたらむしろ出来る奴こそLinuxに行ってしまいそうにオモタ
608 名前:login:Penguin mailto:sage [2010/02/28(日) 11:57:18 ID:C3UADE41] >>606 perl か何かで書いた方が楽じゃないかな。
609 名前:login:Penguin [2010/02/28(日) 11:58:42 ID:qTqfFliX] >>606 $ find /tmp/hoge* -type f /tmp/hoge1/ABC.txt /tmp/hoge1/abc.TXT /tmp/hoge1/abc.txt /tmp/hoge1/a b c.txT /tmp/hoge1/a b c.txt /tmp/hoge2/ABC.TXT /tmp/hoge2/ABC.txt /tmp/hoge2/DEF.txt $ find /tmp -type f | uniq -i -d -D --all-repeated=prepend | perl -00 -a -F'\n' -ne '{foreach $i (1..$#F){print "$F[$i]\n";}}' /tmp/hoge1/abc.TXT /tmp/hoge1/abc.txt /tmp/hoge1/a b c.txt /tmp/hoge2/ABC.txt ディレクトリの大文字小文字違いは考えてない。
610 名前:login:Penguin mailto:sage [2010/02/28(日) 14:28:15 ID:oz3AO1O4] >>609 それって答になってるの? ただ表示させてるだけじゃん。 表示させるだけならもっと楽な方法あるし。 $ ls -R .: ABC.txt Aca.TXT abc.Txt sample.sh test2 ./test2: ABC.txt Aca.TXT abc.Txt test3 ./test2/test3: DDD.TXT aBc.tXt $ find ./* -type f | grep -i 'abc.txt' ./ABC.txt ./abc.Txt ./test2/abc.Txt ./test2/ABC.txt ./test2/test3/aBc.tXt $ find ./* -type f | grep -i 'abc.txt' | uniq -i ./ABC.txt ./test2/abc.Txt ./test2/test3/aBc.tXt
611 名前:login:Penguin [2010/02/28(日) 14:46:18 ID:qTqfFliX] >>609 では、重複を探して、最初のを除いて、2つめ以降を出力してる。 この出方を>>606 の評価基準で見てもらい、不満なければ、 あと xargs rm につなぐ程度で済むべ。 >>610 の例だと、それは全部消していいものなの?
612 名前:login:Penguin [2010/02/28(日) 14:52:31 ID:qTqfFliX] もちろん>>609 が最適解だなんて思ってないんだけど、 >>610 のやり方だと、abc.txt って人が与えてるよね。何百個かある時はどうするの?
613 名前:login:Penguin [2010/02/28(日) 15:10:05 ID:qTqfFliX] ちょっと修正する。 $ find /tmp -type f | sort -f | uniq -i -d --all-repeated=prepend | perl -00 -a -F'\n' -ne '{shift @F; print join("\0",(@F,""));}' | xargs -0 ls -l 大丈夫そうなら最後の ls -l を rm に変更で。
614 名前:login:Penguin mailto:sage [2010/02/28(日) 15:41:09 ID:oz3AO1O4] A="" find . -type f | sort -f \ | while read F; do P=`echo "$F" | tr '[A-Z]' '[a-z]'` Q=`echo "$A" | tr '[A-Z]' '[a-z]'` if [ "$P" == "$Q" ] then echo "${F}を削除" # eval rm "$F" fi A="$F" done
615 名前:login:Penguin mailto:sage [2010/02/28(日) 15:47:27 ID:oz3AO1O4] すまん、evalはなくても動く。
616 名前:login:Penguin mailto:sage [2010/02/28(日) 15:59:45 ID:0w7cauqm] >>606 が良ければなんでもいいでしょうに
617 名前:login:Penguin [2010/02/28(日) 16:00:23 ID:diBS8T6m] >>614 いかにもシェルスクリプトらしい解決法だね perl使うほうがメンドイ
618 名前:login:Penguin [2010/02/28(日) 16:32:44 ID:qTqfFliX] 感心しました。なるほど、うまいですね。 僭越ながら少し手を入れてみました。(sh 対応、外部コマンド実行回数減らす) #!/bin/sh A="" Q="" find . -type f | sort -f \ | while read F; do P=`echo "$F" | tr '[:upper:]' '[:lower:]'` if [ "$P" = "$Q" ]; then echo "${F}を削除" # rm "$F" fi A="$F" Q="$P" done
619 名前:login:Penguin mailto:sage [2010/02/28(日) 19:19:20 ID:ZpjvZrys] 勉強になります
620 名前:login:Penguin mailto:sage [2010/02/28(日) 19:46:12 ID:v9A/VFIk] 別ディレクトリになった時 Q="" しなくていいの?
621 名前:login:Penguin [2010/02/28(日) 20:01:15 ID:qTqfFliX] >>620 >>609 で楽するためディレクトリの大文字小文字は考えないことにしたんだけど、 d/abc.txt と D/abc.txt を同一視しちゃってるので、本当ならダメ、なんでしょう。 find . -type d するループを外側につけるか、 ディレクトリ名見る if をつければ直せそう。改修頼みます >>620
622 名前:login:Penguin mailto:sage [2010/02/28(日) 20:11:12 ID:0w7cauqm] だからそういうのは>>606 が決めることだって。勉強になります、じゃなかろうに
623 名前:login:Penguin mailto:sage [2010/02/28(日) 20:50:11 ID:v9A/VFIk] #!/bin/sh A="." find ./dir -type f | sort -f | \ while read F; do P=`dirname $F`/`basename $F | tr '[A-Z]' '[a-z]'` Q=`dirname $A`/`basename $A | tr '[A-Z]' '[a-z]'` if [ $P = $Q ]; then echo "rm $F" fi A=$F done
624 名前:login:Penguin mailto:sage [2010/02/28(日) 22:25:55 ID:v9A/VFIk] 書き直したので貼り直しますね。 #!/bin/sh B="!" find . -type f | sort -f | \ while read F; do T="`dirname $F`/`basename $F | tr '[A-Z]' '[a-z]'`" if [ $T = $B ]; then echo "rm $F" fi B=$T done
625 名前:login:Penguin mailto:sage [2010/02/28(日) 22:43:51 ID:oz3AO1O4] >>624 スペースを含むディレクトリ作って実行してみ。
626 名前:login:Penguin mailto:sage [2010/02/28(日) 23:06:54 ID:v9A/VFIk] Windowsじゃあるまいし。
627 名前:login:Penguin mailto:sage [2010/02/28(日) 23:09:17 ID:Z6hm/tn2] 空白や日本語を許すかで世代間のギャップが存在するなw
628 名前:login:Penguin mailto:sage [2010/02/28(日) 23:11:07 ID:0w7cauqm] 用件的にsamba絡みと予想してたけどね。知らんけど
629 名前:login:Penguin mailto:sage [2010/02/28(日) 23:13:21 ID:1hHY9Dv5] linuxでフォルダ名に空白入れることはないな、色々面倒だし
630 名前:login:Penguin mailto:sage [2010/02/28(日) 23:15:53 ID:oz3AO1O4] >>626 シェル変数参照の際、値に含まれるスペースや*などの パス名展開の文字が解釈されてしまうのを防ぐため、 ダブルクオートで囲むのは常識。 Windowsじゃないとかいう問題ではなく、 シェルスクリプトを書く際の常識。
631 名前:login:Penguin mailto:sage [2010/02/28(日) 23:50:39 ID:fdN9Zkx+] カラだったときエラーになっちゃうしね
632 名前:login:Penguin mailto:sage [2010/02/28(日) 23:53:35 ID:v9A/VFIk] わかった。わかった。次回からそうするよ。
633 名前:login:Penguin mailto:sage [2010/03/01(月) 00:59:23 ID:IaBmVUuE] >>610 >ただ表示させてるだけじゃん。 findでヒットした結果には任意のコマンドを適用可能。 馬鹿か?
634 名前:login:Penguin mailto:sage [2010/03/01(月) 01:09:07 ID:6uFj7AQh] 俺は>>628 だからそもそもどうでもいいけど、それかなりどーでもいいぞ
635 名前:login:Penguin mailto:sage [2010/03/01(月) 01:09:42 ID:QTdHsVxq] >>606 ファイル名を全部小文字に変えて、重複してたら上書きされて結果的に一つ残る。 ってやり方でも出来ると思う。(効率は良くない) こんなスクリプト書いて /home/hoge/script/RENAME_lower.sh とか名前付けて chmod +x しておく。 #!/bin/bash START_DIR="`pwd`" while (test -n "${1}") ; do if [ -d "${1}" ] ; then cd "${1}" && ( pwd ; ls for i in *\.[Tt][Xx][Tt] ; do if [ -f "${i}" ] ; then mv "${i}" "`echo ${i} | sed y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/`" fi done ) fi shift cd "${START_DIR}" done ディレクトリを find とかで検索して RENAME_lower.sh で処理。 $ find . -type d -exec /home/hoge/script/RENAME_lower.sh {} \+
636 名前:login:Penguin mailto:sage [2010/03/04(木) 23:43:06 ID:oO8XEq75] #!/bin/shと#!/bin/bashはどちらがおすすめなの?
637 名前:login:Penguin mailto:sage [2010/03/05(金) 00:16:06 ID:IlIr0pSM] #!/bin/bash
638 名前:login:Penguin mailto:sage [2010/03/05(金) 00:19:11 ID:FZm9BOvl] #!/bin/bashだろjk
639 名前:login:Penguin mailto:sage [2010/03/05(金) 00:56:20 ID:GiIL1sMg] 用途次第。以下はsh ・shで書いても機能・速度が許容範囲で簡単に書ける場合 ・shでないといけない場合(busyboxとか)
640 名前:login:Penguin [2010/03/05(金) 08:08:46 ID:CTq7Tclv] >>5
641 名前:login:Penguin mailto:sage [2010/03/05(金) 08:37:14 ID:GiIL1sMg] そいつはこのスレのお約束+α。YOUのオススメを書きなよ
642 名前:login:Penguin mailto:sage [2010/03/05(金) 09:01:18 ID:lZJ9zNnO] 今どきのディストリなら sh -> bash が当たり前だろ
643 名前:login:Penguin mailto:sage [2010/03/05(金) 09:56:40 ID:y7mY4KkL] 使い捨てなら深く考えずどっちでも OK。 別のマシンでも使うならよく考える。
644 名前:login:Penguin mailto:sage [2010/03/05(金) 10:20:23 ID:8QC8E4i2] >>642 Debian、Ubuntuはdash
645 名前:login:Penguin mailto:sage [2010/03/05(金) 12:02:50 ID:kHG21Qzt] ださw
646 名前:login:Penguin mailto:sage [2010/03/05(金) 14:24:04 ID:ixxT+8DA] >>641 それはUNIX板のシェルスクリプトスレと勘違いして貼られたもん このスレのテンプレじゃあない >>5-10 を見ろ
647 名前:login:Penguin mailto:sage [2010/03/05(金) 15:49:37 ID:D7CZBw7a] bashの構文を使ってれば#!/bin/bash、使ってなくても#!/bin/bash
648 名前:login:Penguin mailto:sage [2010/03/05(金) 22:06:54 ID:1xo9OzwV] おとなもこどもも、おねーさんも#!/bin/bash
649 名前:login:Penguin mailto:sage [2010/03/05(金) 22:38:25 ID:t7X9IkaB] BSD系の人たちはどうすれば?
650 名前:login:Penguin mailto:sage [2010/03/05(金) 22:41:37 ID:IlIr0pSM] 板違いです
651 名前:login:Penguin mailto:sage [2010/03/05(金) 23:39:40 ID:GiIL1sMg] $ sudo -i # cd /bin;\rm -f sh;ln -s bash sh
652 名前:login:Penguin mailto:sage [2010/03/06(土) 00:07:36 ID:z+KgTZo4] >>651 sudo ln -fs bash /bin/sh でいいんじゃね。
653 名前:login:Penguin mailto:sage [2010/03/06(土) 00:53:02 ID:zGIcPUED] コピペはできないようにしたかったから二行 ln -f は嫌い rm -f が好き
654 名前:login:Penguin [2010/03/06(土) 11:13:20 ID:8ckQdz96] ・sh では、while中で代入した変数は、ループから抜けると使えなくなりますか? ・それがPOSIX仕様なら、一時ファイルを作る以外に、よい回避方法はありますか? $ date | while read line; do last="$line"; done; echo "THE LAST: $last" を Debian lenny の dash, bash, ksh で実行した場合、ksh 以外では値が残りません。
655 名前:login:Penguin mailto:sage [2010/03/06(土) 12:21:04 ID:zGIcPUED] POSIX仕様は知らない シェル実装によって違いがあるけどパイプはサブシェルで実行される $ date | (while read line; do last="$line"; done;echo "THE LAST: $last") で回避になるならいいけど $ date | while read line; do last="$line"; done $ echo "THE LAST: $last" ということをしてkshを正解としたいなら一時ファイルくらいしか思いつかない
656 名前:login:Penguin mailto:sage [2010/03/06(土) 19:57:46 ID:vEOUh0ms] dateをパイプでwhileに放り投げる目的は何?
657 名前:login:Penguin mailto:sage [2010/03/06(土) 20:01:13 ID:lSm8LSXx] ただの例題
658 名前:login:Penguin mailto:sage [2010/03/06(土) 20:12:35 ID:zGIcPUED] このスレで質問してるやつはほとんど約1名でただのキチガイだと思ってる 区別ができれば間違いなく回答しないんだけどねぇ
659 名前:login:Penguin mailto:sage [2010/03/06(土) 21:29:26 ID:U6pPRiRF] お前以外は全部俺の自作自演です
660 名前:login:Penguin mailto:sage [2010/03/06(土) 21:38:12 ID:zGIcPUED] 質問者以外はどっちでもいいけど
661 名前:654 [2010/03/06(土) 22:34:04 ID:8ckQdz96] >>655 さん > シェル実装によって違いがあるけどパイプはサブシェルで実行される 勉強になります。 [linux-users:96159] Re: [bash]whileループ内変数値の扱いについて教えてください。 ttp://search.luky.org/linux-users.9/msg06102.html のような、3以上のfdを使う方向でいこうと思います。 ありがとうございました。
662 名前:login:Penguin mailto:sage [2010/03/07(日) 05:39:29 ID:qUDKVagf] 使っているbashの制約事項はどこに書いてある?
663 名前:login:Penguin mailto:sage [2010/03/07(日) 15:21:22 ID:kzHmHVjG] 日本語でおk
664 名前:login:Penguin mailto:sage [2010/03/07(日) 15:50:18 ID:BVZuVuVb] >>662 /usr/share/doc/bash-doc-*/COMPAT かな。
665 名前:login:Penguin mailto:sage [2010/03/07(日) 15:58:04 ID:CtU/xHgd] 俺の認識不足なのかもしれんが dateコマンドを単独で使っても、1行しか出力しなくね? $ date 2010年 3月 7日 日曜日 15:50:25 JST whileにパイプでつなぐ意味がわからん。 もしlsみたく複数行で出力するコマンド実行したならわからなくもないけど、 それなら無理にパイプでwhileにつなぐ必要ないし。 $ ls sample.sh sample2.sh xyz.txt $ for i in `ls`; do X="$i"; done; echo "$i" xyz.txt 別の方法で簡単に解決できることをどうして難しくするのか意味不明。
666 名前:login:Penguin mailto:sage [2010/03/07(日) 16:24:31 ID:/xXz4ARQ] >>665 おまえは質問者の質問意図がわかってない
667 名前:login:Penguin mailto:sage [2010/03/07(日) 16:27:22 ID:CtU/xHgd] >>666 わかるわけない。 whileにパイプでつないでサブシェルになるからどうとか、 そういうので困ったことないから。
668 名前:667 mailto:sage [2010/03/07(日) 16:29:06 ID:CtU/xHgd] っていうか、 実用上、それをどうしても使わないと書けないものなんてあるの? 例を示せるなら示してほしいもんだね。
669 名前:login:Penguin mailto:sage [2010/03/07(日) 16:31:06 ID:lFJTxoe3] おい、誰かこの馬鹿をつまみだせ
670 名前:login:Penguin mailto:sage [2010/03/07(日) 16:33:48 ID:CtU/xHgd] >>669 だから、実用上どういう意味があるのか教えてくれれば 言われなくても出ていくけど。
671 名前:login:Penguin mailto:sage [2010/03/07(日) 16:42:38 ID:lFJTxoe3] 変数の扱い方が知りたかっただけろ。 例としてとりあえず適当に思いついたdateを使ったんだろう。 ただの一例なんだから実用上は別に意味ない。
672 名前:667 mailto:sage [2010/03/07(日) 16:47:13 ID:CtU/xHgd] catコマンドを使ってファイルの中身を出力してパイプでwhileにつないだとか、 そういうのならわかるんだがな。 もっとも、その程度ならパイプ使わないで書けばいいだけだが。 だから、どんなことをキッカケにそんな質問が出てきたのかよくわからん。 まぁ、興味本位で意味のないことする人ってのもいるんだろうけどさ。 ガソリン車に灯油を入れてみるとか、 トラックでレールの上を走ってみるとか。 俺から見ると、そういう変人と同レベルの質問に見えるのさ。
673 名前:login:Penguin mailto:sage [2010/03/07(日) 18:49:32 ID:kzHmHVjG] (キリッ
674 名前:login:Penguin mailto:sage [2010/03/07(日) 18:57:12 ID:T97Hz24h] 頭の中でdateを適当なものに置き換えればいいだけじゃん。 質問する上での便宜かもしれないってのに いちいち突っ掛かってくるヤツってなんなの?
675 名前:login:Penguin mailto:sage [2010/03/07(日) 19:44:39 ID:CtU/xHgd] >>674 dateだからダメとかだけじゃなく、それ以前に変な質問だろ。 >>654 の >それがPOSIX仕様なら、一時ファイルを作る以外に、よい回避方法はありますか? に対する答は「パイプを使うな」。 >>661 の >3以上のfdを使う方向でいこうと思います。 に対しては「他に手段がないならさておいて・・・正気か?」。
676 名前:login:Penguin mailto:sage [2010/03/07(日) 22:20:17 ID:EI1vZsn/] だから、お前はそもそもまともなスクリプトも書けないのに、容喙せんでいい。
677 名前:login:Penguin [2010/03/07(日) 23:06:32 ID:qcuqADXg] >>676 あれほどアホな質問しない程度には書けるが。 質問者が何をやろうとしてるか知らんが 意地でもパイプでwhileに投げて実現しようとしてんだろ? まともな神経してたら別の方法でやるのにさ。 っていうか、質問者を擁護してる君も質問者みたいな書き方すんの? 合理性を考えたほうがいいよ。
678 名前:login:Penguin mailto:sage [2010/03/07(日) 23:27:59 ID:s4PVEnib] 見ない間に核心つかれてるし ここのキチガイはLIFEも低そうだし なむなむ
679 名前:login:Penguin mailto:sage [2010/03/08(月) 08:59:52 ID:/FTwkaX/] mkfifoでnamed pipe作って使う手もあるな。 mkfifo fifo; date > fifo& while read line < fifo ; do last="$line"; done; echo "THE LAST: $last" rm fifo
680 名前:login:Penguin mailto:sage [2010/03/09(火) 20:30:43 ID:o5fd938a] command 2>file.log で標準エラー出力をファイルに書き出しているのですが、 エラーでない場合も0バイトのfile.logが生成されてしまいます。 エラーでない場合はfile.logは生成しない方法などあるのでしょうか?
681 名前:login:Penguin mailto:sage [2010/03/09(火) 20:44:25 ID:NDaUm8+N] >>680 終了ステータスでエラーかどうかわかるじゃん。
682 名前:login:Penguin mailto:sage [2010/03/09(火) 20:47:03 ID:LVMm3tsD] ↑ ウォーニングは無視ですか?
683 名前:login:Penguin mailto:sage [2010/03/09(火) 20:48:59 ID:JIyb876K] 0バイトなら削除したらええがな
684 名前:login:Penguin mailto:sage [2010/03/09(火) 20:50:37 ID:NDaUm8+N] 条件後出しか…
685 名前:login:Penguin mailto:sage [2010/03/09(火) 20:52:24 ID:LVMm3tsD] 条件を甘く見たお前さんが悪い。
686 名前:login:Penguin mailto:sage [2010/03/09(火) 20:57:40 ID:NDaUm8+N] 居直られちゃったよ。
687 名前:login:Penguin mailto:sage [2010/03/09(火) 21:03:59 ID:o5fd938a] >>683 削除することにしました。 ファイル作らないで良い方法はないのかなー?
688 名前:login:Penguin [2010/03/09(火) 22:45:08 ID:wS8nnpNv] 2>file.log でファイルが開かれるのは command が実行される前。 エラーがあったかどうか分かるのは、command の実行が完了した後。 file.log の中身が重要かどうかは、実行終了まで分からないのだから、 普通に考えて、後から削除するのが素直ですよね。 素直じゃない例。長くなっても大丈夫か分かりません。 #!/bin/sh exec 3>&1 cmd='{ ./some.sh 2>&3 1>stdout.log 3>&- ; } 3>&1 | grep -v warning' errout=`eval $cmd` exec 3>&- if [ -n "$errout" ]; then echo "there were one or more error" echo "$errout" >stderr.log fi
689 名前:login:Penguin mailto:sage [2010/03/10(水) 20:15:59 ID:7RM74zt/] 久しぶりにマニアックなコード見た。
690 名前:login:Penguin mailto:sage [2010/03/12(金) 00:36:34 ID:g58g7Khc] 読み解けん;_;
691 名前:login:Penguin mailto:sage [2010/03/16(火) 06:49:42 ID:+KO51EwF] 一回3に2の出力を出して、空ならthere were one or more errorを1に出力、空じゃなければstderr.logに出力
692 名前:login:Penguin mailto:sage [2010/03/16(火) 08:33:07 ID:L4OU7Nfk] >>688 だれか解説よろ
693 名前:login:Penguin mailto:sage [2010/03/16(火) 17:36:29 ID:7rwiLleU] グロブで /etc/pass* のリストを得たいのだが、 list=/etc/pass* だと展開してくれない。 list=$(ls /etc/pass*) ならおkで、改行文字 '\n' 区切りのリストになる。 だが ls のために fork してしまうのが痛い。 どうにかならんのか。 お願いします m(_ _)m
694 名前:login:Penguin mailto:sage [2010/03/16(火) 17:41:09 ID:7rwiLleU] あっさり解決した。 printf "%s\n" /etc/pass* これでいいのか。よくわからんが、printfは組み込みコマンドだったはず。。
695 名前:login:Penguin mailto:sage [2010/03/16(火) 17:55:59 ID:oDvWUAap] >>693 試したら展開できたけどな。
696 名前:login:Penguin mailto:sage [2010/03/16(火) 17:59:59 ID:jFL6NZ+y] 昔はechoを使ったもんじゃ
697 名前:login:Penguin mailto:sage [2010/03/16(火) 18:00:18 ID:7rwiLleU] >>695 本当貝?bash? $ list=/etc/pass* $ echo "${list[@]}" /etc/pass* ダメなんだが。。これをパイプで他のコマンドに渡したいから、ギリギリで展開されても困る。
698 名前:login:Penguin mailto:sage [2010/03/16(火) 18:01:26 ID:oDvWUAap] >>697 echo $list で。
699 名前:login:Penguin mailto:sage [2010/03/16(火) 18:01:54 ID:7rwiLleU] >>696 echo だと改行文字 '\n' 区切りのリストにならない。 $ list=$(echo /etc/pass*) $ echo "${list[@]}" /etc/passwd /etc/passwd-
700 名前:login:Penguin mailto:sage [2010/03/16(火) 18:03:33 ID:oDvWUAap] >>699 そんな条件なかったじゃん。
701 名前:login:Penguin mailto:sage [2010/03/16(火) 18:05:27 ID:7rwiLleU] >>700 だからprintfを使うことにしたよ。 「一行ずつ」読むコマンドにパイプで渡さないといけないから。
702 名前:login:Penguin mailto:sage [2010/03/16(火) 18:06:01 ID:oDvWUAap] 後出しで文句言われても……。
703 名前:login:Penguin mailto:sage [2010/03/16(火) 18:07:08 ID:7rwiLleU] >>702 いえ事故解決しました、と言った後であなたが展開できましたとおっしゃったので 私はレスをしただけです。
704 名前:login:Penguin mailto:sage [2010/03/16(火) 18:08:01 ID:7rwiLleU] あ、どうもありがとう(^^)
705 名前:login:Penguin mailto:sage [2010/03/16(火) 18:15:41 ID:m9fA5s2e] for i in /etc/pass*; do echo "$i"; done | command...
706 名前:login:Penguin mailto:sage [2010/03/16(火) 18:17:49 ID:7rwiLleU] >>705 すみません、また後出しですが、一応言っておきます。 わざわざ変数 list に格納しているのは、後で自分が参照するからです。
707 名前:login:Penguin mailto:sage [2010/03/16(火) 22:36:09 ID:vMRJlqrh] はいはい次どぞー
708 名前:login:Penguin mailto:sage [2010/03/16(火) 22:41:29 ID:7rwiLleU] え、いいんですか?次
709 名前:login:Penguin mailto:sage [2010/03/20(土) 00:18:55 ID:qKxWTBVf] ファイルから丸括弧(開く) "(" だけの行を読み込んだ際、 if [ \( "$LINE" = "$CHK1" -o "$LINE" = "$CHK2" \) -a \( "$A" = "$B" -o "$C" = "$D" \) ]; then といったif文でエラーとなってしまいます。 何がまずいのでしょうか?
710 名前:login:Penguin [2010/03/20(土) 07:41:24 ID:SCWfCSZ4] >>709 if [ \( "x${LINE}x" = "x{$CHK1}x" だと通りませんか。
711 名前:login:Penguin mailto:sage [2010/03/20(土) 12:14:57 ID:qKxWTBVf] >>710 早速の回答、ありがとうございます。 マシンが平日しか使えないので、火曜日に試してみます。 ところで、$LINE="("の場合だと、 if [ \( "$LINE" = "$CHK1" \) ]; then だとエラーとなりますが、 if [ "$LINE" = "$CHK1" ]; then だとエラーとなりませんでした。 何か書き方が間違えているのでしょうか?
712 名前:login:Penguin mailto:sage [2010/03/20(土) 12:17:45 ID:qKxWTBVf] 連投すません。 どちらの書き方も、$LINE="(A"とかだとエラーとなりません。 "("の場合のみ、エラーとなります。 なんでだろ?
713 名前:login:Penguin mailto:sage [2010/03/20(土) 22:21:20 ID:7Z9+G9O/] 例外処理ってどうすればいいだろうか。 for x in ... do 処理A && \ 処理B && \ 処理C && \ continue # エラー? 後片付け、そして次のアイテム done サブルーチン化するもの手だけど、それも大袈裟な場合ってどうやるのがスマートだろうか。 すべてを && を繋げる方法しか思いつかない。。
714 名前:login:Penguin [2010/03/20(土) 22:33:44 ID:SCWfCSZ4] >>713 ttp://www.unix.com/shell-programming-scripting/38127-exception-handling.html に、 cleanup_script() { echo "Cleaning ..." } trap 'cleanup_script' ERR set -e ってコードがあったです。set -e が肝らしい。
715 名前:login:Penguin mailto:sage [2010/03/20(土) 22:43:49 ID:7Z9+G9O/] >>714 ありがとう。便利ですが、/bin/sh(DebianだとDASH)ではうまく動作しませんでした。 BASHなら問題ありません。 handler() { echo "Trap ERR!" exit 1 } set -e trap ?handler? ERR for x in $(seq 1 10) do echo $x [ $x -eq 5 ] && false done 実行結果: 1 2 3 4 5 Trap ERR!
716 名前:login:Penguin mailto:sage [2010/03/20(土) 22:47:11 ID:7Z9+G9O/] SIGUSR1 30,10,16 Term ユーザ定義シグナル 1 SIGUSR2 31,12,17 Term ユーザ定義シグナル 2 これを使うのもアリか...
717 名前:login:Penguin mailto:sage [2010/03/20(土) 23:28:40 ID:7Z9+G9O/] あともう一つ質問! #!/bin/sh echo $@ exit 0 というプログラムがあったとして(test.shとする)、 ./test.sh 'hoge' 'fuga' > fileA ./test.sh > fileB 'hoge' 'fuga' をすると、fileAとfileBの両方とも同じ結果になるんだけど、これはどう違うの?
718 名前:login:Penguin mailto:sage [2010/03/21(日) 01:59:46 ID:AC+zwoRf] シェルスクリプトで他のサーバにあるファイルを弄ることは可能ですか? 具体的には、 ローカルPC、サーバA、サーバBという3台のPCがありまして サーバA上の特定のファイルを編集してサーバBにアップロードし、さらにAにある他のファイルをBにアップロードする という処理をローカル上のシェルスクリプトで自動化したいのです。 しかしsshコマンドで他サーバに繋ごうとするとパスワードを聞かれる所で止まってしまいます。
719 名前:login:Penguin mailto:sage [2010/03/21(日) 02:04:15 ID:65tFCowN] つ公開鍵認証
720 名前:login:Penguin mailto:sage [2010/03/21(日) 02:11:15 ID:AC+zwoRf] なるほど…やはりそうなるのですね 公開鍵とやらを勉強することにします mysql -u root -prootみたいに指定できればいいのになぁ
721 名前:login:Penguin mailto:sage [2010/03/21(日) 02:16:36 ID:AC+zwoRf] というか、仮にsshで繋げたとしても 実行環境が他サーバに移るわけじゃないし他サーバのファイルをいじるのは無理なのかな? シェルスクリプトはcdコマンドの実行結果すら次の行に持ち込まないですよね 全ての実行行は独立したシェルで実行されるとか何とかで。
722 名前:login:Penguin mailto:sage [2010/03/21(日) 02:36:57 ID:65tFCowN] こんな感じで編集も転送もできる ssh -i 秘密鍵A ユーザ名A@Aサーバ "任意のコマンド(編集ならsedとかawk)" ssh -i 秘密鍵A ユーザ名A@Aサーバ "任意のコマンド(転送ならscp -i 秘密鍵B 編集したファイル ユーザ名B@Bサーバ:保存場所 )" エラー処理とかちゃんとしたいならAサーバに編集、転送用のスクリプト置いてクライアントからは引数だけ渡せばいいし
723 名前:login:Penguin mailto:sage [2010/03/21(日) 06:55:40 ID:s8pDEsGz] >>721 expectは?
724 名前:login:Penguin mailto:sage [2010/03/21(日) 09:41:21 ID:oiz+h8tr] >>721 >シェルスクリプトはcdコマンドの実行結果すら次の行に持ち込まないですよね #!/bin/sh cd /tmp ./hoge.sh 上記は/tmpに移動して、/tmpにあるhoge.shを実行するけど?
725 名前:login:Penguin mailto:sage [2010/03/21(日) 10:09:43 ID:s8pDEsGz] ssh host cd /tmp ssh host ./hoge.sh こんなアホをやっていると予想。 シェルスクリプトを予めscpで送っておくとか、標準入力の内容をスクリプトとして実効できたり出来ないんかね。
726 名前:login:Penguin [2010/03/21(日) 17:30:12 ID:cuEg7ODK] echo "( cd /tmp ; ./hoge.sh )" | ssh host でいいですよね。
727 名前:login:Penguin mailto:sage [2010/03/21(日) 17:55:39 ID:gIM4/doG] >>712 -x をつけて実行してみるとなんとなくわかるかも。 文字列の比較のときは710氏の方式で前後に固定文字を入れたほうが誤動作しにくい。 ただタイプミスだと思うけど、中括弧の位置が間違ってて if [ \( "x${LINE}x" = "x${CHK1}x" だけどね。
728 名前:login:Penguin mailto:sage [2010/03/21(日) 20:47:12 ID:NvA+aKwG] >>727 ありがとう。 固定文字列を入れて比較するのは、いいアイディアですね。 (なんで思いつかなかったんだろう…)
729 名前:login:Penguin mailto:sage [2010/03/24(水) 01:16:09 ID:fusHHN2e] お願いします。 ・forの入れ子構造ってOKなんでしょうか? #!/bin/bash #nekoneko.sh for var in aaa do for fstype in fs do hogehoge=neko done echo $var/$hogehoge done #sh nekoneko.sh aaa/neko 期待結果は得られているのですが、勉強中なのであっているかどうかがわかりません。 ・forでテキストファイルの読み込みってできないのでしょうか? dosのバッチで言うところの for /f %%a in (nekoneko.txt) do 〜のような方法です。 よろしくお願いします。
730 名前:login:Penguin mailto:sage [2010/03/24(水) 01:24:36 ID:KIBvvI04] >・forの入れ子構造ってOKなんでしょうか? OK >・forでテキストファイルの読み込みってできないのでしょうか? DOSのforはしらんが for a in `cat nekoneko.txt` でいいのか?
731 名前:login:Penguin mailto:sage [2010/03/24(水) 10:02:51 ID:qcQ/2FhI] >>729 インデントしようよ。 全角空白で書くけど、半角空白に変換してくれ。 #!/bin/bash for var in aaa; do for fstype in fs; do hogehoge=neko done echo $var/$hogehoge done ファイル読んで回すのは while read とか使うんじゃね。
732 名前:login:Penguin mailto:sage [2010/03/24(水) 12:47:43 ID:D4crZAMy] >>731 全角空白のインデントはやめろ! 半角空白のほうがいい お前の専ブラ変えろ馬鹿
733 名前:login:Penguin mailto:sage [2010/03/24(水) 12:51:42 ID:D4crZAMy] #!/bin/bash for var in aaa; do for fstype in fs; do hogehoge=neko done echo $var/$hogehoge done
734 名前:login:Penguin mailto:sage [2010/03/24(水) 12:58:21 ID:pFOtZDrD] 恥ずかしいね。
735 名前:login:Penguin mailto:sage [2010/03/24(水) 13:12:41 ID:D4crZAMy] usamimi.info/~linux/d/up/up0503.png usamimi.info/~linux/d/up/up0504.png 生ログにはタブと半角空白はきちんと記録されてるから。 素直に表示する専ブラで見れば奇麗にインデントされる。
736 名前:login:Penguin mailto:sage [2010/03/24(水) 13:18:59 ID:pFOtZDrD] おいおい、pre要素以外では連続する空白文字は一つにまとめられるのだが。 2ちゃんねるのデータ書式はウンコだけど、連続する空白文字をそのまま 表示する仕様なんてないぜ? そういうブラウザを押しつけるのはどうなの、って思うけど。
737 名前:login:Penguin mailto:sage [2010/03/24(水) 13:25:53 ID:qcQ/2FhI] >>732 うちの環境では半角空白でも見えるけど 相手の環境で見えるとは限らないから。
738 名前:login:Penguin mailto:sage [2010/03/24(水) 13:29:31 ID:pFOtZDrD] これはブラウザ依存だと思うね。 空白文字をそのまま扱うものもあれば、HTMLの仕様に準じて無視するものもある。 を使う手もあるのだが、これを同処理するかもブラウザ依存。 まあ2ちゃんねるがクソなんだが。
739 名前:login:Penguin mailto:sage [2010/03/24(水) 13:31:53 ID:KIBvvI04] おまいらスクリプトについても語ってやれよ・・・
740 名前:login:Penguin mailto:sage [2010/03/24(水) 13:37:19 ID:D4crZAMy] >>737 アンタ良い人だね。 でもな、コード貼る事が多いスレを見てるんなら閲覧者のほうでインデントするブラウザにしたほうがお互いに楽だぜ。 貼るほうもコピーする側もそのまま使えるんだから。うっかり全角空白入れたまま使う事もない。 スクリプトスレなら困る事少いかもだが、全角空白の入ったパッチ貼られたりしたら目もあてらんねぇよ?
741 名前:login:Penguin mailto:sage [2010/03/24(水) 13:39:50 ID:qcQ/2FhI] >>740 だから「変換してくれ」って書いたじゃん。 閲覧者の環境まで責任持てん。
742 名前:login:Penguin mailto:sage [2010/03/24(水) 13:40:45 ID:qcQ/2FhI] 良い人とかってよりも、portability を重視しただけだよ。 書く環境と読む環境が同じとは限らない。 こういう配慮はスクリプト書きもいっしょ。
743 名前:login:Penguin mailto:sage [2010/03/24(水) 13:48:01 ID:D4crZAMy] とりあえず「全角空白を推奨」するのだけは勘弁してくれ。 それが無きゃ俺も黙ってさ。
744 名前:login:Penguin mailto:sage [2010/03/24(水) 13:53:55 ID:qcQ/2FhI] 推奨なんてしてないよ。
745 名前:login:Penguin mailto:sage [2010/03/24(水) 14:04:24 ID:D4crZAMy] >インデントしようよ。 >全角空白で書くけど、半角空白に変換してくれ。 インデントは推奨してるが、改めて見直すと全角空白推奨ではないと言われたら確かにそうだな。 いきなり俺の言い方がきつかったのは謝る。数日前にム板で同じような事があってココでもか!と思ったもんだからついな。 すまんかった >ID:qcQ/2FhI
746 名前:login:Penguin mailto:sage [2010/03/24(水) 14:05:59 ID:eh1BmETO] 藻前ら、モティツケ /\⌒ヽペタン / /⌒)ノ ペタン ∧_∧ \ (( ∧_∧ (; ´Д`))' ))(・∀・ ;) / ⌒ノ ( ⌒ヽ⊂⌒ヽ .(O ノ ) ̄ ̄ ̄()__ ) )_)_) (;;;;;;;;;;;;;;;;;;;)(_(
747 名前:login:Penguin mailto:sage [2010/03/24(水) 15:40:14 ID:8MgVQE42] 全角文字やTABなどを記号で表示するようにしておけば、 そうそう事故はないのでは?jaspace.elとか便利だよ。
748 名前:login:Penguin mailto:sage [2010/03/24(水) 15:52:39 ID:c/AsI/YT] 学習用のネタとかならともかくパッチを 2ch に貼んのはやめたほうがいいんじゃね 書き込み確認のとこに 投稿者は権利の何もかもを管理者に無償譲渡することを承諾しますみたいなこと書いてあるぜ
749 名前:login:Penguin mailto:sage [2010/03/24(水) 16:12:14 ID:o3qxm3DD] どうしたんだ突然
750 名前:login:Penguin mailto:sage [2010/03/24(水) 18:28:22 ID:JGtYY8P/] find -exec command {} + はもっと知れ渡るべき 日経Linux
751 名前:login:Penguin mailto:sage [2010/03/24(水) 21:53:30 ID:LVpGQGYh] xargsに慣れちゃって、手が勝手に打っちゃうんだよな
752 名前:login:Penguin mailto:sage [2010/03/25(木) 00:42:02 ID:AS83wWPj] >>730 hww
753 名前:login:Penguin mailto:sage [2010/03/25(木) 05:46:35 ID:bk8Jf0RP] ちゃんと理解しながら読んでいればインデントなんて枝葉末節。 自分のコードならばこだわるかも知れないけどね。
754 名前:login:Penguin [2010/03/25(木) 07:38:08 ID:woPIYugI] >>728 UNIX板で知った ttp://www.opengroup.org/onlinepubs/009695399/utilities/test.html の、APPLICATION USAGE から先が勉強になったです。 -a や -o より && や || でつなぐ方がよいとか。お題の部分についてはこれ。 test "$1" = "bat" -a "$2" = "ball" syntax errors occur if $1 evaluates to '(' or '!'. One of the following forms prevents this; the third is preferred: test "X$1" = "Xbat" -a "X$2" = "Xball" test "$1" = "bat" && test "$2" = "ball" test "X$1" = "Xbat" && test "X$2" = "Xball"
755 名前:login:Penguin mailto:sage [2010/03/25(木) 10:18:07 ID:Bu4gYkWT] >>750 man find したら、-exec command {} +の下に -execdir command とか -execdir command {} + とかを見つけた。勉強になった。 こういう事があると電子辞書より紙の辞書の方がいいかもと思う。
756 名前:login:Penguin mailto:sage [2010/03/25(木) 23:03:23 ID:AS83wWPj] >>753 とかほざく輩に限ってテストパターンは無限大な開放系のソースを書いちゃうの。 要はモデル化ができてないと。愚直というか馬鹿正直と言うか。
757 名前:login:Penguin mailto:sage [2010/03/25(木) 23:09:11 ID:P4/zjZQS] >>745 お前いいやつだなw
758 名前:login:Penguin mailto:sage [2010/03/26(金) 03:02:23 ID:y6rsP+OO] >>756 読解力ないんだな(プ
759 名前:login:Penguin mailto:sage [2010/03/26(金) 07:00:58 ID:joqM+Eq0] >>758 より多くの人に読解できることを目的にしていないロジックはオナニーだろう。
760 名前:login:Penguin mailto:sage [2010/03/26(金) 07:13:10 ID:jyaRuxPh] つまり日本語はオナニー
761 名前:login:Penguin mailto:sage [2010/03/26(金) 07:49:22 ID:WwpVuIlf] セックスよりも気持ちいい
762 名前:login:Penguin mailto:sage [2010/04/02(金) 15:42:26 ID:la5bZF10] bashなどで標準出力はデフォルトで画面となっていますが、具体的にはどのファイルになりますか? debianですと/dev以下にあるのだと思いますが。
763 名前:login:Penguin mailto:sage [2010/04/02(金) 16:00:38 ID:FvuB/nMw] >>762 ls -l /proc/$$/fd/1
764 名前:login:Penguin mailto:sage [2010/04/05(月) 20:18:53 ID:HX4Ssz6U] フラシュメモリ をマウントするとき # mount /dev/sdb1 /mnt/usb こんな感じでやると思いますが、 もし、フラシュメモリが挿されていて、かつ、マウントされていない場合これを実行し その他の場合、実行しないという、シェルスクリプトを教えてください
765 名前:login:Penguin mailto:sage [2010/04/05(月) 20:31:37 ID:hbFmdj3V] >>764 問題点は ・フラッシュメモリがささってないことをどうやって判定するか ・マウントされていないことをどうやって判定するか でしょ。 それシェルスクリプトの話じゃないよ。
766 名前:login:Penguin mailto:sage [2010/04/05(月) 21:02:20 ID:HX4Ssz6U] >>765 やはり無理ですか、 ・フラッシュメモリがささってないことをどうやって判定するか ・マウントされていないことをどうやって判定するか ここは、Cか何かで実装し、結果によって、振る舞いを決めるしかなさそうですね
767 名前:login:Penguin mailto:sage [2010/04/05(月) 21:12:06 ID:8DwAi4Rq] /dev/disk/by-uuid/ 見てそのUSBメモリがささってるか判定して マウントは /proc/mounts とか /etc/mtab 見ればわかる
768 名前:login:Penguin mailto:sage [2010/04/05(月) 21:58:19 ID:HX4Ssz6U] >>767 できました、ありがとう。 それにしても >それシェルスクリプトの話じゃないよ。 とは・・・・
769 名前:login:Penguin mailto:sage [2010/04/05(月) 22:26:27 ID:bIAGjuYt] え、どこがシェルスクリプト?
770 名前:login:Penguin mailto:sage [2010/04/05(月) 22:26:30 ID:V3kmV0qU] シェルの機能に全く関係ない話だから、スレ違いと言われても仕方ない
771 名前:login:Penguin mailto:sage [2010/04/05(月) 23:04:52 ID:10PWkAma] >>769-770 君たちはきっとUNIX板のシェルスクリプトスレのほうが馴染むよ 向こうに移ったら?
772 名前:login:Penguin mailto:sage [2010/04/05(月) 23:09:37 ID:Do3l7NFE] シェルの文法と組み込みコマンド以外は スレ違い。
773 名前:login:Penguin mailto:sage [2010/04/06(火) 00:29:43 ID:cl/KUIMr] そこまでは言わないけどさ、 >>764 のスクリプトって >>765 && mount /dev/sdb1 /mnt/usb で終わりじゃん。 あとは >>765 の条件をどう書くかだけ。 そこはシェルスクリプトの話じゃない。
774 名前:login:Penguin mailto:sage [2010/04/06(火) 23:07:19 ID:hKo4mn1/] 退屈すぎるんだよ ただ手順を羅列していくだけの命題はこのスレではシェルスクリブトではない判定
775 名前:login:Penguin mailto:sage [2010/04/08(木) 12:37:33 ID:FdKyqazj] /path//mydirというディレクトリが確かに存在します。 rm -rf path/mydir とすれば削除できるのに if [-d /path/mydir ]; then rm -rf path/mydir とすると削除できません。 何故でしょうか。
776 名前:login:Penguin mailto:sage [2010/04/08(木) 12:49:32 ID:BdM60+Gl] すばやくシェルスクリプトを作る方法を教えてください。
777 名前:login:Penguin mailto:sage [2010/04/08(木) 13:03:15 ID:ahHfR+UP] >>775 if [ -d /path/mydir ]; then rm -rf /path/mydir
778 名前:login:Penguin mailto:sage [2010/04/08(木) 13:11:54 ID:YRM82Sus] >>776 俺は指におもりをつけて毎日8時間訓練している。 だいぶ重いスクリプトも楽々書けるようになった。 でもやり過ぎには注意な。 知り合いに、焦点性ジストニアになってシェルスクリプターへの道を絶たれたやつが何人も居る。
779 名前:login:Penguin mailto:sage [2010/04/08(木) 15:13:49 ID:FdKyqazj] 揚げ足はいいからさっさと答えろボケ
780 名前:login:Penguin mailto:sage [2010/04/08(木) 15:21:34 ID:0e8PS1D/] まず服を(ry
781 名前:login:Penguin mailto:sage [2010/04/08(木) 15:24:54 ID:rTqLBiaG] >>779 問いが支離滅裂なので回答不能です
782 名前:login:Penguin mailto:sage [2010/04/08(木) 15:27:17 ID:ahHfR+UP] >>779 ん? >>777 じゃ違った? んじゃ権限まわりを確認。
783 名前:login:Penguin mailto:sage [2010/04/08(木) 16:01:31 ID:P25bssZd] いきなりifとrmまとめずに if [-d /path/mydir ]; then echo hoge がhogeを出力するかどうかぐらい切り分けしようぜ。
784 名前:login:Penguin mailto:sage [2010/04/08(木) 16:03:13 ID:ahHfR+UP] >>783 [ と -d は離さないとだめだよ。
785 名前:login:Penguin mailto:sage [2010/04/09(金) 16:33:43 ID:8l460jgK] 最近の初心者は、[ も一つのコマンドであることすら知らんのか?
786 名前:login:Penguin mailto:sage [2010/04/09(金) 16:36:53 ID:wbxQcOPK] 昔の初心者もそうだよ。
787 名前:login:Penguin mailto:sage [2010/04/09(金) 17:26:28 ID:ZKESoIes] おじいちゃん、乙!
788 名前:login:Penguin mailto:sage [2010/04/09(金) 19:57:43 ID:1H+gjPy/] [ ってコマンドだったの? 玄人だけど始めて知ったよ?orz
789 名前:login:Penguin mailto:sage [2010/04/09(金) 20:04:23 ID:5ssP89Ht] LPICレベル3coreに受かったばかりの素人だけど []はtestコマンドの略式じゃなかったかな
790 名前:login:Penguin mailto:sage [2010/04/09(金) 20:26:24 ID:wbxQcOPK] >>788 type [ help [
791 名前:login:Penguin mailto:sage [2010/04/09(金) 20:27:45 ID:i0zzyora] >>788 コマンドじゃないなら何なんだよ
792 名前:login:Penguin mailto:sage [2010/04/09(金) 22:04:47 ID:+RKMLUfB] >>791 構文。 C言語の == は関数ではないし。
793 名前:login:Penguin mailto:sage [2010/04/09(金) 22:06:05 ID:StH4VNmO] 昔は、[ は test へのハードリンクと決まってたもんだが、 いま手元のFedora 12を見たらそうじゃなかった。(ファイルサイズも違うし…) やっぱり日々勉強ですな。
794 名前:login:Penguin mailto:sage [2010/04/09(金) 22:10:28 ID:wbxQcOPK] >>793 coreutils の lbracket.c 読んでみ。
795 名前:login:Penguin mailto:sage [2010/04/09(金) 22:27:52 ID:StH4VNmO] >>794 読んだ。 面白いけど、Coolとは言えんなぁ…
796 名前:login:Penguin [2010/04/10(土) 23:41:09 ID:IGsQWo8s] grepで検索行以外の行を抽出する方法は無いでしょうか?
797 名前:login:Penguin mailto:sage [2010/04/11(日) 00:27:05 ID:eH4Novr7] grep -v '文字列'
798 名前:login:Penguin [2010/04/11(日) 00:34:34 ID:3KDsWIIS] >>797 ありがとう
799 名前:login:Penguin mailto:sage [2010/04/11(日) 16:13:06 ID:1yJmv1GD] 初めてシェルスクリプトを加工としていまうs サブルーチンを作る参考にしようと#!/bin/shなファイルを見ているんですが 関数を使ったスクリプトはほとんどありません こういうものでしょうか? 任意の値を返せないのでグローバルな変数を介する必要があると思いますが 保守性が低下しないうまい定義の仕方というのはあるんでしょうか あるいは関数を使わなくてもいいようなシェルスクリプトの特有のコンセプト とか書き方があるんでしょうか 漠然とした質問ですいません
800 名前:login:Penguin mailto:sage [2010/04/11(日) 16:21:22 ID:ESnWs44w] 漠然としてるねぇ。 もうちょっとスクリプト書きに慣れてから考えればいいんじゃないかな。
801 名前:login:Penguin mailto:sage [2010/04/11(日) 17:04:57 ID:btbPPhym] いやそれより、初心者向きの参考書でも買って 一からじっくり勉強した方が良いと思う。 >>799 は、ここで質問して解決するスキルレベルに程遠い。
802 名前:login:Penguin mailto:sage [2010/04/11(日) 17:49:36 ID:O63F6ul8] >>801 さんまじかっけー
803 名前:login:Penguin mailto:sage [2010/04/11(日) 20:21:58 ID:bAKRtVTC] >関数を使ったスクリプトはほとんどありません >こういうものでしょうか? いえ。 ただ、スクリプトは、 1) 手っ取り早く仕上げる事が多いので十分に最適化されない 2) 最適化されたスクリプトは必ずしも可読性がよくないので敢えて最適化しない といったことはあると思います。
804 名前:login:Penguin mailto:sage [2010/04/11(日) 20:51:15 ID:eH4Novr7] わざわざ外部関数までつくって何でもシェルスクリプトでやるより多言語から単体のシェルスクリプト叩かせたほうが安心できる
805 名前:login:Penguin mailto:sage [2010/04/12(月) 01:55:25 ID:56zfLj4c] >>803 回答ありがとうございます 最適化というのがどういうものか具体的には分かりませんが、例えば関数を組み合わせようと すると値をやり取りするグローバル変数が必要になるのではと考えました。しかし、必要に なるごとに関数内で定義、参照するとそういった変数がどこでどう利用されているか確認しなければ ちょっとした変更も危険になると思います。あるいはメインの手続き側に定義を羅列するとしても どう利用するのかはコメントでもしないかぎり分からないし、そもそも構造内部を関数へと段階的に 隠蔽する目的を果たせなくなってしまい、やはり可読性保守性は低下します。一方でルールベース の対策でこういった問題を解決できるようにも感じたので、そういったことについてベーシックな議論を している人たちがいるのではと思い質問しました。 しかしこのスレッドを読んでいると>>803 (1)や>>804 にあるように、そういう道具だと割りきって使う ものだという風にも思いました。シェルスクリプトの欠点を何千万人もの人があえて見なかったこと にして使っているとすると、とても面白いことですね。それだけ目的を満足させる道具で、また知っ て初めて分かる魅力があるということなんでしょうかね (2)については一枚目から鱗が落ちました。習作のつもりでUTF8のテキストをEUC-JPに変換して からa2psでポストスクリプトを生成するコードを再発明しているのですが、たしかに関数を使っても 全然読みやすくなっていない! いや、正確には処理の始点と大枠の処理の流れは把握しやすく なっていますが、コード量は後付けでどんどん増加するし、ちょっとした読みやすさのために定義 したマクロ的関数は、それ単体でみるとなんとも得体の知れないものになっていました。 色々な機能を試したいというのもあるのですが、やはり簡潔で読みやすいコードを書くということを 前提にして、そのうえでシェルスクリプトらしい書き方を身につけるようにします
806 名前:799,805 mailto:sage [2010/04/12(月) 02:02:53 ID:56zfLj4c] 勢いでいい子ちゃんぶった嘘をつきました・・ たぶん動けば汚くてもいいやの精神でなんだかよく分からないコードを書き続けると思います ゴメンナサイです
807 名前:login:Penguin mailto:sage [2010/04/12(月) 11:43:55 ID:Qe0ukjkj] /usr/binの中に'['とかゴミがあったので削除したら、起動しなくなったという 笑い話をよく聞いたな。
808 名前:login:Penguin mailto:sage [2010/04/12(月) 12:14:55 ID:Cm3bm4a3] >>807 ほう、それは初耳だ。 いまどきの sh は [ を内蔵しているので、 外部コマンドの [ を意図して呼ばないかぎり存在しなくても問題ない。 [ が外部コマンドだった昔は、[ は /usr/bin ではなく /bin にあった。 # つーか、/usr/bin/[ なんて今でも linux だけ。
809 名前:login:Penguin mailto:sage [2010/04/12(月) 13:13:25 ID:s3PYGw84] ここはLinux板ですから
810 名前:login:Penguin mailto:sage [2010/04/12(月) 13:31:44 ID:FrL0zKPd] 「[ を消してうんぬん」は Linux 以前の時代の話だと思う。
811 名前:login:Penguin mailto:sage [2010/04/12(月) 18:27:16 ID:rk0wy3GT] プロプラの古いshを使ってないと通じないジョークだな
812 名前:799 mailto:sage [2010/04/17(土) 23:26:31 ID:f4tmK5PF] 先だっては大変お世話になりました なんとか動くっぽいもの書けました 根本的に間違ってるところやイディオムに直すべきところなど多々あるんだろうと 思うんですが、身近に聞ける人がいなくて困ってます。ので誰かにレビューして欲しいです なにとぞ、なにとぞー up.af/015849
813 名前:799 mailto:sage [2010/04/17(土) 23:38:16 ID:f4tmK5PF] すんません私のファイルはこっちでした 上のTシャツおっぱいは忘れてください^^ up.af/015867
814 名前:login:Penguin mailto:sage [2010/04/17(土) 23:41:35 ID:xq8djkPZ] わざ。わざ
815 名前:login:Penguin mailto:sage [2010/04/18(日) 13:57:11 ID:XFWJRzoK] 献上品のTシャツおっぱいが404なので眺めるだけな >#!/bin/sh dashで動作確認したのなら素直に#!/bin/dash > file_num=`expr $file_num + 1` exprいらなそう file_num=$((file_num + 1)) > local num=0 > for num in `seq 1 $file_num`; do > source_files_get $num > MESSAGE "converting: $file" > cat "$file" | $NKF -e > "$temp_dir/${file##*/}" > done seqとcatいらなそう local num=1 while [ $num -le $file_num ]; do source_files_get $num MESSAGE "converting: $file" $NKF -e "$file" > "$temp_dir/${file##*/}" num=$((num + 1)) done >local status=1 local使う意味なし&多分bashでコケる
816 名前:login:Penguin mailto:sage [2010/04/19(月) 01:23:48 ID:ZAvND9//] >>815 式展開というものが色々あるんですね むやみに外部コマンドを呼ばないという発想もなかったです マニュアルを引いてあれこれ確認したいと思います レスありがとうございました
817 名前:login:Penguin mailto:sage [2010/04/21(水) 22:02:51 ID:CZfDlwcf] >>813 python風のループだな。 LLみたいに関数を使いたければ値をやり取りするフレームワークを書けばよいかも。
818 名前:login:Penguin mailto:sage [2010/04/22(木) 23:27:27 ID:eajRO0wt] commandA > file commandB > file と { commandA; commandB; } > file はどっちの方がいいの? 後者の場合は、シェルによってはサブシェルが起動するって聞いたけど本当貝。
819 名前:login:Penguin mailto:sage [2010/04/22(木) 23:48:35 ID:sUoTjkov] >>818 上意味違うだろ。
820 名前:login:Penguin mailto:sage [2010/04/22(木) 23:52:47 ID:eajRO0wt] 間違えた! 前者は commandA > file commandB >> file
821 名前:login:Penguin mailto:sage [2010/04/23(金) 00:01:08 ID:sUoTjkov] 正直、目くそ鼻くそじゃね?
822 名前:login:Penguin mailto:sage [2010/04/23(金) 00:03:10 ID:4U7Ovp/A] そう? じゃあ気にしないでいいか。
823 名前:login:Penguin mailto:sage [2010/04/23(金) 00:10:54 ID:Odx5g+6A] 悩んでるうちに書いて実行した方が仕事は早く終わるだろ。
824 名前:login:Penguin mailto:sage [2010/04/23(金) 05:48:09 ID:0SL93pt/] >>818 後者のほうが効率いい
825 名前:login:Penguin mailto:sage [2010/04/24(土) 12:19:07 ID:uV1EwGDC] >>824 スクリプトの一文が長すぎる。 パイプラインもメンドイ。
826 名前:login:Penguin mailto:sage [2010/04/24(土) 22:06:24 ID:F/lhQSxk] >>818 前者の場合、commandAの出力はどうなるのかな?w
827 名前:login:Penguin mailto:sage [2010/04/24(土) 22:21:58 ID:loCBys/t] ↑ 大丈夫かな、この人・・・
828 名前:login:Penguin mailto:sage [2010/04/24(土) 22:57:54 ID:XH+rWnSs] 笑っとけ笑っとけ。
829 名前:login:Penguin mailto:sage [2010/04/24(土) 23:02:02 ID:/2NBYvX3] >>826 修正してるじゃないか、 >>820 で
830 名前:login:Penguin mailto:sage [2010/04/24(土) 23:03:08 ID:loCBys/t] 恥ずかしいね
831 名前:login:Penguin mailto:sage [2010/04/24(土) 23:51:55 ID:ra/w56Dm] >>825 あれで長いって、普段どんなスクリプト書いてんだ?
832 名前:login:Penguin mailto:sage [2010/04/25(日) 09:35:32 ID:iXPvNLwg] >>831 いや、引数が100個とかになってきたら。 潰しが利かない。
833 名前:login:Penguin mailto:sage [2010/04/25(日) 09:37:17 ID:pW61wlqY] 意味不明
834 名前:login:Penguin mailto:sage [2010/04/25(日) 09:39:20 ID:iXPvNLwg] >>833 脊髄じゃなく、脳で考えてください。
835 名前:login:Penguin mailto:sage [2010/04/25(日) 10:09:49 ID:ZtdJByaw] その価値のある文章を頼む。 引数とはどの部分の引数なのか? 潰しが利かないという主張の根拠は?
836 名前:login:Penguin mailto:sage [2010/04/25(日) 10:39:21 ID:MLqGsd45] これ以上この話を続けても有益な情報は得られないと思う。
837 名前:login:Penguin mailto:sage [2010/04/25(日) 11:27:46 ID:iXPvNLwg] >>818 commandA > file commandB >> file と { commandA; commandB; } > file コマンドが100個になったのでwhileで省力化したい。 上の方 rm -f file 2>/dev/null while read cmd;do $cmd >> file done < cmds.txt 下の方 xargsを使えば出来そうだけど{}が内部コマンドなのが気になる。 1行のコマンドラインの文字数制限があるシェルもある。 ので、汎用性が無い。
838 名前:login:Penguin mailto:sage [2010/04/25(日) 11:34:27 ID:iXPvNLwg] 制御構造の使えないシェルスクリプトなんて、バッチファイルの如く、無価値である。
839 名前:login:Penguin mailto:sage [2010/04/25(日) 11:37:39 ID:GR3waYM0] >>837 よくわかんねえけど そのcmd.txtって、事実上シェルスクリプトだよな 単に sh cmd.txt >file でいいんじゃねえの
840 名前:login:Penguin mailto:sage [2010/04/25(日) 11:46:22 ID:gQNuPSjh] wwww
841 名前:login:Penguin mailto:sage [2010/04/25(日) 11:49:42 ID:iXPvNLwg] >>839 そだな。それが最適解だ。
842 名前:login:Penguin mailto:sage [2010/04/27(火) 22:06:55 ID:HNWNlh/r] for((i=0; i<6; i++)){ array=("${array[@]}" "i") } echo "${array[@]}" これを実行すると下記のように出力されます。 0 1 2 3 4 5 カンマ区切りで下記のように出力する方法ありますか? 0, 1, 2, 3, 4, 5
843 名前:login:Penguin mailto:sage [2010/04/27(火) 23:08:31 ID:3UTvz9hd] >>842 最後の出力を実現するのなら seq -s ', ' 0 5 で済むけど、 配列の各要素を任意の区切文字で繋げて出力する方法を知りたいということかな zsh/ksh なら echo ${(j:, :)array} でできるけど、bash でどうなのかは知らない
844 名前:login:Penguin mailto:sage [2010/04/27(火) 23:18:40 ID:HNWNlh/r] >>843 説明不足で申し訳ないです。 配列の各要素をカンマ区切りで出力する方法です。 ・訂正します array=(1 2 a b 3 c ) echo "${array[@]}" これを実行すると下記のように出力されます。 1 2 a b 3 c カンマ区切りで下記のように出力する方法ありますか? 1, 2, a, b, 3, c echo ${(j:, :)array} は使えませんでした。
845 名前:login:Penguin mailto:sage [2010/04/27(火) 23:37:13 ID:wOLuHHkh] >>844 IFS="," ; echo "${array[*]}"
846 名前:login:Penguin mailto:sage [2010/04/28(水) 10:15:03 ID:ttzp8AMm] echo "${array[@]}" | sed 's/ /, /g'
847 名前:844 mailto:sage [2010/04/28(水) 11:26:50 ID:+626EOW1] >>845-846 できました!ありがとうございました。