1 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 17:54:23.25 .net] シェルスクリプトの総合スレです。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)もしくはPOSIX準拠の互換シェルがデフォルトです。 bash/zsh/ksh/ash/dash/yash/poshなどの専用機能に依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 ・POSIXについてのリンクは https://en.wikipedia.org/wiki/POSIX にまとめられています 最新の仕様はこちらへ pubs.opengroup.org/onlinepubs/9699919799/ (左上の「Shell & Utilities」 から参照することができます。) ・v7 shに一番近くて、現役(?)のshは、OpenSolaris由来のheirloom sh。 src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/ heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) ・シェルスクリプトのことをシェルってゆうな □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも awkまたはperlの方が適した処理にはそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 □回答者への注意事項: ・シェルスクリプトでの処理方法を質問しているのに、よくわからずに 「そういうのはperl使いましょう」と回答するのはやめましょう。 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。 質問に対して問題が間違ってるといちゃもんをつけるのもやめましょう 前スレ シェルスクリプト総合 その26 https://mevius.5ch.net/test/read.cgi/unix/1489979246/
643 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/14(木) 22:50:38.44 .net] CentOS$ strings /bin/find | grep -i signal signal %s terminated by signal %d FreeBSD$ strings /
644 名前:usr/bin/find | grep -i signal なんもなし 以上、findのおせっかい度の差。 [] [ここ壊れてます]
645 名前:619 mailto:sage [2018/06/14(木) 22:51:53.48 .net] すまん間違えて送信しちゃった $ find /etc -exec sh -c 'basename {}' \; | head これでどうだろう。 -quitオプションはPOSIXの範疇ではないけどこれはPOSIXに準拠してる ちなみに>>610 のコマンドラインはDebian GNU/Linuxのfind 4.7で再現した。
646 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/14(木) 22:55:42.54 .net] >>619 ,620 なーるほどっ ww なるほどっ、なっとく
647 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/14(木) 22:57:07.67 .net] >>621 ん? それSIGPIPEは回避できるけど別の問題が発生しない? 「basename: 余分な演算子 XXX」←みたいに怒られるんだが あと $ find /etc -exec sh -c 'echo {}' \; | head ↑これをやるとやっぱりSIGPIPEが出されるようだ。
648 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/15(金) 00:01:24.90 .net] >>613 どこかの先生が課題にそう書いてるんだろう。 ちゃんと調べないで持ってくるバカ学生が多いんじゃないの。
649 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/15(金) 00:03:14.56 .net] >>610 >findでexecオプションの引数のあとにシェルに渡すパイプを付けるとexecに渡したコマンドがシグナル13パイプ破壊を出してくるんですけど この動作は、POSIX的にはどうなの? まずいというならPOSIX的にどうまずいの?
650 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/15(金) 00:08:14.14 .net] find . -exec basename \{\} \; | { head; cat >/dev/null; }
651 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/15(金) 00:14:45.23 .net] >>626 どういう仕組みなん?
652 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/15(金) 00:39:45.42 .net] -execにこだわりがないのであれば、 find . -print0 | xargs -0 -L 1 basename | head 今度はxargsがお節介メッセージ出すけど、findはheadが終了したら終了する
653 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/15(金) 01:01:37.95 .net] xargs(1)に-0オプションはない(POSIX厨)
654 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/15(金) 02:22:41.09 .net] findにも-print0は無いけどな。BSDにもあるからいいんじゃね
655 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/15(金) 08:25:40.13 .net] find . -print | xargs -n1 basename 2>/dev/null | head
656 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/15(金) 20:58:34.50 .net] execオプションはやめといたほうがいいね
657 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/15(金) 21:35:58.85 .net] 元々何が気に入らなかったのかイマイチわからない
658 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/15(金) 22:35:17.99 .net] POSIX的に気に入らない
659 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/15(金) 23:11:38.57 .net] POSIX POSIXうっせー
660 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/15(金) 23:13:05.02 .net] >>634 こういうPOSIXにやたらこだわってるのって なにかの精神障碍があるんじゃないの? 一度そういう病院で診てもらえ。
661 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 00:18:50.65 .net] findutilsのソース取って来てあのメッセージ出ないようにパッチして使っちゃえよもう git.savannah.gnu.org/cgit/findutils.git/tree/find/exec.c?h=v4.6.0#n354
662 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 00:33:50.14 .net] >>616 find . -exec sh -c 'trap "exit" pipe; basename {}' \; -o -quit | head
663 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 01:07:40.99 .net] >>638 試してないけど、trapせずにbasenameのあとにexitするだけでだめなん?
664 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 08:33:03.61 .net] find /etc -exec basename \{\} \; |& head これでエラーも出ず余計な出力も引っ掛らなかったんだけど 理屈が分からん |& は標準出力と標準エラー出力両方を通すはずなので SIGPIPEのエラーが出力されるはずだがgrepしても見当らない
665 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 10:03:37.06 .net] find自身がSIGPIPEで終了してんじゃない 実行時間も短くなってるし
666 名前:640 mailto:sage [2018/06/16(土) 10:31:40.54 .net] >>641 すいません。それどうやって確かめたらいいですかね
667 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 10:39:12.35 .net] Linux なら strace で見ると分かる $ strace -f bash -c 'find /etc -exec basename \{\} \; |& head'
668 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 11:10:29.82 .net] stderrが(標準出力)のパイプになりの、そのパイプが無くなり、find自身がエラーメッセージをそれに書き込もうとしてSIGPIPEを受けるってとこか find . -exec basename {} \; -o -print | head としても同じように終わるってとこで
669 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 12:55:30.00 .net] >>644 ほほう
670 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 13:02:42.26 .net] >>640 だれかこれをmacOSでやってくれない? あれは確かSIGPIPEを受けとらないから GNU findと違ってこの書き方だと不具合が起こりそうだ
671 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 13:15:44.53 .net] >>646 >あれは確かSIGPIPEを受けとらない いや、それはないだろう。単に>>621 の違いじゃないの macOS Sierra標準のbashはまだ |& をサポートしてないヤツみたいなので(??)、2>&1 | としたが同じくfindは終わる
672 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 13:16:47.78 .net] >>647 × >>621 ○ >>620
673 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 13:26:10.67 .net] ああ、|& は元々はzshのなのか(?) macOS Sierra標準のzshでは/でも、>>640 のままで特に何も問題なく終わった
674 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 14:10:29.68 .net] >>649 |&はcsh由来。zshはパクっただけ。
675 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 17:20:45.43 .net] |&はPOSIXなの?
676 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 17:32:28.45 .net] やかましいわっw、おばかさん
677 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 17:58:54.17 .net] それはPOSIXですか?POSIXじゃないのですか?
678 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 18:00:34.28 .net] ところで俺のPOSIXを見てくれ。こいつをどう思う?
679 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 18:14:03.11 .net] すごく、標準的です
680 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 18:39:24.01 .net] Is it POSIX?
681 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 18:58:44.20 .net] No, it is Apple
682 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 19:58:16.75 .net] まあPOSIXじゃないので質問者の要請は満たしてないよね 俺が提案するとしたらexecは使わず find . | xargs -I @ basename @ | head ↑これ。
683 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 20:06:12.48 .net] それじゃあかんだろ。xargsのオプションが足りない
684 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 20:09:55.36 .net] いいのか。すまん
685 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 20:37:42.14 .net] 俺がやるなら xargs -I には {} を 指定するがな @というのは見たことがない 社内規約かなにかかな?
686 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 20:51:48.06 .net] >>656-657 定冠詞がないよ
687 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 20:56:44.95 .net] この問題って本質的には、 find は /etc の下の全部のファイル(10以上)を返すが、 head は 10行で打ち切ってしまうという矛盾にある。 そこは目をつぶるって方針なんだから、最初に書いてあったstderrを捨てるって 方法で正しいと思うよ
688 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 20:59:20.95 .net] >>658 xargs: basename: terminated by signal 13 って表示されちゃう >>661 俺は @ しか使ったことがない
689 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 21:30:02.51 .net] >>662 バッカこれはどっちも形容詞だよ だからネタとして成立してんじゃん
690 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 22:02:52.02 .net] >>662 マジレスアッポー
691 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 23:19:14.74 .net] コマンドの重複を数える(つまり$PATHに登録され実行可能なファイルの重複を列挙する)一番短い方法をってなんでしょう。ただし確実に動作しかつ可搬であることが条件です。 僕が考えたのは $ echo $PATH | tr ':' '\n' | xargs -I @ find @ \( -type f -a -perm -+x \) -exec basename \{\} \; | sort | uniq -c です。
692 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 23:24:18.70 .net] basenameにしたらファイル名じゃなくなるじゃん
693 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/16(土) 23:36:17.54 .net] >>668 ? もしかして-type fが見えてないだけ?
694 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 04:18:06.91 .net] パスの中に空白が入ってる or PATHの中身が多すぎたらおそらくアウト ( IFS=:; find $PATH -type f -a -perm -+x ) | sed 's|.*/||g' | sort | uniq -c ( IFS=:; for i in $PATH; do find "$i" -type f -a -perm -+x; done ) | sed 's|.*/||g' | sort | uniq -c
695 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 08:19:10.40 .net] できればsedでやりたいことなんですが aaa << bbb >> もしくは aaa <<bbb>>
696 名前:ニいうようなファイルがあったとしてaaaの次行から「>>」を含む行までを読み出したいです。 (aaaが存在する行はすでに具体的な数値で判明しています; ここでは42行目とします) 特に二番目の場合には sed -n -e '43,/>>/p'とやると43行目に「>>」があるのに見つけてくれません。 なにか手助けをおねがいします。 [] [ここ壊れてます]
697 名前:名無しさん@お腹いっぱい。 [2018/06/17(日) 09:24:18.61 .net] >>671 sed -e '42,/>>/!d' -e 42d
698 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 12:39:57.71 .net] あれんじ sed -e '43,$!d;/>>/q'
699 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 14:39:23.57 .net] 標準規約に従いましょう GNU Coding Standards https://www.gnu.org/prep/standards/standards.html
700 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 14:43:41.30 .net] 言いたいことがわからない
701 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 16:46:05.17 .net] 言っても無駄なんだろうが、そんなファイルを処理しようってのが間違ってると思う
702 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 19:18:43.97 .net] >>676 処理したい時はどうすればいいですかね。
703 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 19:23:59.83 .net] POSIXで。
704 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 19:24:04.76 .net] Windowsだと%TEMP%で一時ファイルの格納場所が指定できますがUnixではそういう環境変数はないのですか? $TEMPとか
705 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 19:27:47.07 .net] >>669 basenameって拡張子消えるよね?
706 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 19:28:33.83 .net] >>679 誰に対して使用して欲しいのか分からないな
707 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 19:40:16.19 .net] >>680 消せと言えばね
708 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 19:43:21.15 .net] >>679 TMPDIR かな /tmp が古からあるからな。TMPDIRが設定されていたら(OSとして初期設定されているか、なんらかの形でTMPDIR設定されてたら)TMPDIR。設定されてなかったら普通に /tmp かな
709 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 19:45:54.91 .net] >>679 ,683 >TMPDIRが設定されていたら〜 って、TMPDIRを意識していればね。当然のように、んなの知らん、/tmp 一択ってのも普通にある
710 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 20:07:00.69 .net] >>681 一応、TMPDIRはPOSIX標準環境変数らしい。 tmpfile(3)やmkstem(3)なんぞはPOSIXとしてはTMPDIRを参照しろとはなってないらしい が、実装するならTMPDIR参照するだろうし、してる。ちゃんとtmpfile(3)やmkstem(3)やmktemp(1)などを使っていれば、誰でもなんだろうけどね
711 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 20:58:57.79 .net] >>685 それってPOSIX shellの話なの?
712 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 21:18:57.03 .net] シェルじゃなくてシステム
713 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 21:19:01.81 .net] >>686 何を聞いてるのかわからん
714 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 21:19:45.24 .net] 俺…POSIXだったのか…?
715 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 21:59:03.03 .net] 関数のなかってalias使えないっぽいね somefnc() { alias AAA='pwd' AAA } # → AAA: command not found
716 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/17(日) 23:04:57.63 .net] 6.6 Aliases ... Aliases are expanded when a function definition is read, not when the function is executed, because a function definition is itself a compound command. As a consequence, aliases defined in a function are not available until after that function is executed. somefnc () { alias AAA='pwd'; } somefnc AAA otherfnc () { AAA; } otherfnc
717 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/18(月) 03:25:19.77 .net] aaa="cat /etc/*release | grep -E '^NAME='" echo ${aaa} 上を実行すると、 $ ./hoge.sh cat /etc/os-release | grep -E '^NAME=' こうなってしまいます。 cat 〜の結果をaaaに入れる方法教えて欲しいです。
718 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/18(月) 03:35:59.29 .net] 自己レス evalで出来ました
719 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/18(月) 07:01:
] [ここ壊れてます]
720 名前:47.43 .net mailto: >>690 関数の中でaliasが使えないと言うよりか、 関数の定義が実行された時点でのalias情報が反映される。 つまりシェルスクリプトを上から実行していって、 somefunc()関数定義文が見つかると、 この関数 "全体" に対して、alias展開処理が行われてから関数が定義される だからsomefunc()関数定義文よりも前にaliasが設定されていれば そのとおりに展開されるが、関数の中はすでにalias展開済みなので もう処理されない [] [ここ壊れてます]
721 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/18(月) 07:11:33.65 .net] ちなみにこれだとうまくいく somefnc() { alias AAA='pwd' eval AAA } evalは実行する段階でalias展開されるようだ evalで実行する文は、実行段階ならないと わからないのだから当然ではあるが
722 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/18(月) 08:15:26.93 .net] >>695 すげぇ!ありがとう ちなみに今さっきの地震に伴う停電のせいでパソコンがおしゃかになったっぽいので 試せないw
723 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/18(月) 09:27:00.32 .net] なるほど。大阪だけにおしゃかになったわけだな
724 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/18(月) 09:36:50.09 .net] は?
725 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/18(月) 09:40:49.35 .net] うちの研究室もすごいことになった。 ところで前々から関数のなかで alias が展開されないのを歯痒くおもっていたので eval 使えばいいというのは非常に有益な Tips だわ。
726 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/18(月) 10:09:39.01 .net] あまりにもPOSIX、POSIXしつこいから、POSIXでNGにしたったわ
727 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/18(月) 10:13:14.51 .net] PSOIXでいこう
728 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/18(月) 10:15:28.33 .net] P0SIX(いやがらせ)
729 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/18(月) 10:20:36.56 .net] P051X
730 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/18(月) 10:23:39.71 .net] ぽじっくす
731 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/18(月) 17:53:22.33 .net] >>699 makefile とか crontab でもエイリアス無視だけど evalならいけるのかな 試してみよう
732 名前:名無しさん@お腹いっぱい。 [2018/06/18(月) 20:47:12.93 .net] oldcar-purchase.com/
733 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/19(火) 04:10:29.03 .net] 関数の中、もしくはmakefileやcrontabで aliasを使いたい状況っていうのがよくわからないが どんなときに使うの? aliasではなく変数とかじゃ駄目なの?
734 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/19(火) 04:54:42.99 .net] 自分は引数を取らず固定されたフィルタはaliasで定義することにしている 例えばeraelコマンド(ERAce Empty Line)。 alias erael='sed -e "/^$/d"' ただ大抵はシェルスクリプトの先頭に記述するのであなたの言う通り関数の中で宣言する意図は分からん。
735 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/19(火) 05:16:14.31 .net] つづりeraseやで
736 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/19(火) 05:53:06.78 .net] >>708 使い方としてはわかったけど、 ぶっちゃけそれだって関数作ればいいだけなんだよなぁ erase() { sed -e "/^$/d" "$@"; }
737 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/19(火) 06:00:33.38 .net] >>710 いやそうなんだけど 「引数を取らず固定されたフィルタ」 ↑これを実現するのに関数は大仰な気がしてきてな。
738 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/19(火) 06:15:17.17 .net] 関数とエイリアスの使い分けに意味はあるの? 使用メモリ?性能?
739 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/19(火) 06:31:47.07 .net] >>712 いやまったく大差ない。 ただただaliasというだけ 分かってると思うが俺は別に「使え!」なんて言ってないから そんな気にする必要ないぜ。 個人的な問題だから。
740 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/19(火) 07:04:14.39 .net] みんな知ってるかい? 関数の中で関数を定義できるってことを foo() { bar() { echo bar } } foo bar
741 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/19(火) 07:22:52.49 .net] 全角字下げやめてくれ コピペで試せん
742 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/19(火) 07:27:20.24 .net] foo() { bar() { echo bar } } foo bar
743 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/19(火) 08:03:40.13 .net] 5chに貼られたソースコードをコピペするってwセキュリティ意識ゼロかよw 絶対こんなの相手に発注したく