1 名前:名無しさん@お腹いっぱい。 mailto:sageteoff [2015/08/14(金) 23:42:01.51 .net] シェルスクリプトの総合スレです。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 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に逃げずにシェルスクリプトで処理するのが頭のいいやり方。 前スレ シェルスクリプト総合 その24 peace.2ch.net/test/read.cgi/unix/1415634843/
760 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 16:39:00.12 .net] セミコロンなんて入ってない あんたのブラウザの問題だろ
761 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 16:57:52.70 .net] >>743 741です。 妄想、乙。そのするどい頭脳でサクッとコマンド貼ってみてくださいね。 ちなみに、\wにこだわらなければ echo $x | grep -e "/[a-zA-Z0-9\.]" で、できる。 \wがあると、どうしてだめかはしらない。 >>744 セミコロンないよ。
762 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 17:27:46.43 .net] 書きたかったのは echo 'x ' | grep -Ee '/(\w|\.)' とかだろうけど echo 'x ' | grep :// で良い気がする
763 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 18:44:47.37 .net] >>744 はウェブブラウザで表示するとセミコロンが見える 2chの仕様っていうか read.cgi のバグ >>747 > \wがあると、どうしてだめかはしらない。 grep や egrep の正規表現では文字クラス […] 内のバックスラッシュ \ が特別な意味を持たないから [\w] は \ と w にマッチする [\.] は \ と . にマッチする
764 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 22:23:01.76 .net] >>747 >>741 とやってることが矛盾してるが
765 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 23:05:57.44 .net] 結局>>739 が出てこない限り>>740 から何一つ進まない
766 名前:739 mailto:sage [2016/09/10(土) 17:00:28.25 .net] 言葉足らずで、お騒がせしました。 やりたかったのは、テキスト中のurlの抽出です。 urlには/が入っていて、ドメイン名にはアルファベット、数字、ピリオドがあるので、 いろいろ試しているなかで、上のようなコマンドでgrepが機能しない?と思い込んだ状態に遭遇した所でした。 https+://をgrepから外したのは、ttp://やドメイン名から始まるurl対策のつもりでした。 自分の間違いを>>749 の解説と>>747 のイグザンプルで理解できました。 みなさん、ありがとうございました。 本来の目的はまだ試行錯誤中ですが。
767 名前:739 mailto:sage [2016/09/10(土) 17:16:44.65 .net] https+じゃなくてhttps?でした
768 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/14(水) 14:31:43.86 .net] <<<を使うとechoで変数を渡すより速いというのを見かけて time for i in $( seq -w 1 1000 ) ; do x="abcdefgh" ; y=$( echo ${x} | sed -Ee s'/b.*//g' ) ; done time for i in $( seq -w 1 1000 ) ; do x="abcdefgh" ; y=$( sed -Ee s'/b.*//g' <<< ${x} ) ; done を試したら、<<<の方が1割ほど遅かった。環境:macosx1095+sandy みんなはどう?
769 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/14(水) 20:50:13.24 .net] CentOS6.8(Hyper-V上)/Haswell でも前者の方が早いですね。 time を bash 添付の物ではなく、/usr/bin/time -v /bin/bash -c '...' で計測して詳細をみると、 前者は File system outputs: の値が 0 に対して、後者は 8000 (for の繰り返し1回あたり 8 増える) となりました。 strace で見る限りどこかに書き込んでいるようには見えないですが、内部での実装に違いが あるようですね。
770 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/15(木) 09:05:23.94 .net] 想像だけど、echoはbashのビルトインだから起動ロスが無いのとパイプは同時起動だから、stdinが常に準備状態 <<<だど読み込むときにstdinを準備 じゃないのか?
771 名前:名無しさん@お腹いっぱい。 [2016/09/15(木) 11:53:03.00 .net] <<<(ヒアストリング)ってbashのドキュメントにはビアドキュメントの変形と書かれてる ってことは、fstat(0, ...)で調べりゃ、レギュラーファイルになってる筈 > <<<を使うとechoで変数を渡すより速いというのを見かけて と言うデマの火元はどこ?
772 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/15(木) 13:09:35.23 .net] 前者はサブシェルを起動するからプロセッサが繁忙状態だと多分遅くなる シングルコア/シングルプロセッサだと確実にヒアストリングの後者の方が速い
773 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/15(木) 19:15:16.79 .net] >>756 , >>757 , >>758 解説d ヒアストリングという言葉自体初めて知りました。 <<はヒアドキュメントということも知らずに使っていました。 環境によっては、<<<は速くなるんですね。 いい勉強になりました。
774 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 18:27:52.80 .net] ちょい困り案件が自己解決したのでココに書いておきます。 Macのファイルシステムって、ファイル名を UTF-8 で保存してるかと思いきや 独自の正規化がされてまして (UTF8-MAC) 例えば、 find . -name "*ドイツ*" とかやってもあるはずのファイルが出てこないわけです。(内部的に ド の字を ト+[濁点] みたいな格納をしてるせいです) そこで .bash_profile に以下のように コマンドもどきの find2 を定義してやります。これで万事解決です。 # find に渡す引数を全て UTF8-MAC に変換してしてます find2(){ eval "find "$(echo "$@" | iconv -f UTF-8 -t UTF8-MAC) }
775 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 18:38:10.62 .net] >>760 他文字コードにも応用できそうだね
776 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 18:47:05.28 .net] 変換すべきは-name ... だけでしょ 全部変換は手抜きすぎ -execで他のプログラムに渡すUTF-8をUTF8-MACに変換されていやーんになる 汎用的にするなら要ブラッシュアップ
777 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 21:51:49.29 .net] >>762 了解です。 ただ -exec の方は 問題は別にあって 終端を表す \; の \(バックスラッシュ) が消えちゃうんですね。そもそもiconv変換する前の時点で。 一応対応できたと思うんですが、 長くなったので貼るのはやめときます。
778 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 22:10:40.49 .net] -execは;じゃ無くて+で終端しないと原人扱いされちゃうよ ;じゃないと困るのはかなり特殊なケース
779 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 22:13:36.64 .net] >>760 どっかで読んだ内容だなぁと思ったら、これ↓のパクリか! 「新・OS X ハッキング! (169) Terminal上で「ダ」や「パ」が付くファイルを検索できない理由と対策 | マイナビニュース」 news.mynavi.jp/column/osxhack/169/index.html
780 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 23:20:43.06 .net] やり方だけ覚えてたんですが、昔見たのはソレかもしれません。 ただ現実に必要になってみると find . -name `echo "オランダ.png" | iconv -f UTF8 -t UTF8-MAC` これ毎回打ち込むの面倒だなと思ってコマンド化してみた次第です。
781 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 23:54:36.90 .net] 昔って、先月の25日(1ヶ月前)の記事だけどな
782 名前:名無しさん@お腹いっぱい。 [2016/09/24(土) 23:56:11.17 .net] 実におもしろいw
783 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/25(日) 00:01:20.09 .net] ん、もっと昔から知ってたよ。だから他の記事だと思います。
784 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/25(日) 02:09:32.85 .net] >>763 >>終端を表す \; の \(バックスラッシュ) が消えちゃうんですね。 普通にfindするときもfindに渡る前に¥は消えるでしょ find2(){ find $(echo "$@" | iconv -f UTF-8 -t UTF8-MAC) } じゃダメなの?
785 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/26(月) 14:04:28.33 .net] それがベストだと思います
786 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/26(月) 23:31:45.32 .net] 昔から知ってたけどね
787 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 10:27:03.83 .net] 以下のスクリプトはカレントディレクトリに「AABB」というファイルがあると ワイルドカードが展開されて「find /tmp -name AABB」となってしまいますが、 これを「find /tmp -name
788 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 10:36:38.42 .net] すみません、失敗しました。 以下のスクリプトはカレントディレクトリに「AABB」というファイルがあると ワイルドカードが展開されて「find /tmp -name AABB」となってしまいますが、 これを「find /tmp -name "AA*"」とさせるにはどうすればいいのでしょうか? #!/bin/sh name="AA*" option="-name $name" find /tmp $option --------------------------- $ ls AABB test.sh $ ls /tmp AACC $ sh -x test.sh + name=AA* + option=-name AA* + find /tmp -name AABB /tmp/AACC をヒットさせたくて 下のように変数の書き方を色々変えてみましたが、うまくいかず 悩んでます。 name="AA"*"" name="AA\*" name="AA\"*\"" option="-name "${name}"" option="-name \${name}"
789 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 10:45:33.83 .net] option=
790 名前:名無しさん@お腹いっぱい。 [2016/10/16(日) 10:53:11.25 .net] あれ、ダブルクォーテーションで切れちゃった 全角にするけど option=”-name \”$name\”” とすればよろし
791 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 11:06:04.27 .net] ダブルクォーテーション ウェブブラウザで書いてて、書き込んでいいですかの確認画面を経由して書き込むと切れちゃう 俺調べ
792 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 13:48:12.77 .net] 余計な変数使わないで #!/bin/sh name="AA*" find /tmp -name "$name" ってやればいいのに
793 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 13:54:36.43 .net] 場合によって option="$option 他のオプション" とかやりたいんじゃないの
794 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 17:25:04.68 .net] >>777 まさにそれだったわ。情報ありがとう
795 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 18:08:50.16 .net] 邪道で、bash 用だけど find の前に set -f find の検索パスにワイルドカード使ってたらだめ
796 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 19:22:23.01 .net] テス # name=
797 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 19:25:37.68 .net] >>777 、あぁ、本当だWebブラウザからの書き込みだと回避できないのかな? スクリプトソース貼るのに致命的だな
798 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 19:40:18.84 .net] hastebinにでも貼ればいいんだよ
799 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/26(水) 22:58:52.49 .net] 一般的なペーストビン
800 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/26(水) 23:40:35.70 .net] hastebinのほうがちょっと見やすかったりする
801 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/29(土) 21:05:55.08 .net] 実行中の標準出力と標準エラーをログしながら表示させることって出来る? むかしリダイレクトとtailでやったらうまく行かなかった覚えがあってやめた気がする
802 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/29(土) 21:22:36.46 .net] プロセス置換を使う cmd > >(tee stdout.log) 2> >(tee stderr.log)
803 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/29(土) 22:19:49.67 .net] そういえばPOSIX shにはないな…すまん
804 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/30(日) 09:23:07.74 .net] cmd > stdout.log 2> stderr.log & tail -f stdout.log stderr.log で出来ないか?
805 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/30(日) 21:41:34.72 .net] 下記でOKだった { { cmd | tee stdout.log 1>&3; } 2>&1 | tee stderr.log 1>&2; } 3>&1 ・bash: 標準出力、標準エラー出力をファイル、画面それぞれに出力する方法 - Qiita qiita.com/laikuaut/items/e1cc312ffc7ec2c872fc
806 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/04(金) 12:24:35.95 .net] 音楽CDを突っ込んでmp3を作る。 この時ファイル名とmp3タグにはCDDBから読み込んで来る。 これをやるのに手っ取り早い方法ってなんだろ
807 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/04(金) 12:26:20.17 .net] EAC自動化
808 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/04(金) 12:31:52.74 .net] abcde使えよ
809 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 04:52:04.55 .net] /usr/bin/test を使った判定がよくわからなくて困ってます curl でhttp の応答をチェックしたいのですが 下記みたいにしてもちゃんと判定できないのですが何が原因でしょうか? test $(curl -XHEAD -s -i https://www.google.co.jp | awk NR=1) = 'HTTP/1.1 200 OK';echo $?
810 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 06:02:01.01 .net] くおー $ [ $(curl -I localhost/ 2>&- | head -n 1) = 'HTTP/1.1 200 OK' ]; echo $? bash: [: too many arguments 2 $ [ "$(curl -I localhost/ 2>&- | head -n 1)" = 'HTTP/1.1 200 OK' ]; echo $? 0 $ [ "$(curl -I localhost/dummy 2>&- | head -n 1)" = 'HTTP/1.1 200 OK' ]; echo $? 1 っとちょっと色々違うけど、うちでは之でなんとかなってる
811 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 06:27:40.74 .net] "HTTP/1.1 200 OK"$'\r'
812 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 08:38:26.65 .net] そういうのはステータスコードだけを見るようにしたほうがいいよ test "$(curl -I -s -o /dev/null -w '%{http_code}' https://www.google.co.jp/)" = 200 HTTPステータス行の Reason-Phrase ("OK" や "Not Found" の部分) は送出者が自由に書けるし HTTPバージョンも当然固定じゃない # HTTP2を有効にしてビルドしたcurlの場合: $ curl -I -s https://www.google.co.jp/ | head -n 1 HTTP/2 200 $
813 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 08:49:14.72 .net] >>798 訂正 ウェブブラウザで表示すると余分なセミコロンが混じってしまう test "$( curl -I -s -o /dev/null -w '%{http_code}' https://www.google.co.jp/ )" = 200
814 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 12:19:57.15 .net] >>521 いいお(´・ω・`)
815 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 12:21:26.17 .net] うちのcurlは終了しなかった -XHEAD を外してみた -bash: test: too many argumentsになった $()を""で括った awkが効いてなさそう NR==1 にした まだ一致しない 行末がCRLFだった $'\r'を付けた とりあえず test $(curl -XHEAD -s -i https://www.google.co.jp | awk NR=1) = 'HTTP/1.1 200 OK';echo $? はこう test "$(curl -s -i https://www.google.co.jp | awk NR==1)" = 'HTTP/1.1 200 OK'$'\r';echo $? なった
816 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 12:47:25.00 .net] つまり纏めるとこうか test "$(curl -I -w "%{http_code}" example.com/ 2>&- |tail -1)" = 200; echo $?
817 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 14:56:39.30 .net] なんでレスポンスを取得する操作と 取得したレスポンスをtestする操作を一度にしようとするのか理解不能
818 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 16:51:11.77 .net] ワンライナー原理教の方ですかね?w まあ何でも一度にやってみたくなる衝動は理解できなくもない。 そこに山があるから、的な何か。
819 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 17:02:47.58 .net] そこにパイプがあるからな
820 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 08:00:32.91 .net] 品位が問われるAdvent Calendar -- シェルスクリプトはどこでも動く! ttp://www.peeep.us/4a5535c5 なんかあの界隈よく揉めてるな… 👀 Rock54: Caution(BBR-MD5:f4da0c707200fe35c49b788174082785)
821 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 09:27:19.82 .net] 品位のないやつだな
822 名前:名無しさん@お腹いっぱい。 [2016/12/07(水) 10:58:10.89 .net] qiitaとかに書いちゃう輩なんてそんなもんだろ
823 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 12:13:29.28 .net] この記事がキモいのは認めるけど、十把一絡げにQiitaを悪く言うのはやめて! とはいうもののオタクのコミュニティって、どこでもちんぽ騎士団ぽいのがいるよね…… ぼっち最高やで。
824 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 15:49:11.13 .net] シェルスクリプトで、if
825 名前:とthenの間に改行がある場合で、その間に#をつけたコメント行を入れるのはNGですか? ifの条件を、動作テストのため、いくつか使い分けたくて、thenより上の行で、テストで使い終わった判定を コメント化しました。実際の判定が、コメント化したものが活かされたりと、おかしくなりました。 以下の、1分ごとに呼び出されるコードで、毎時40分だけ動いて貰いたいのに、10分おきに条件成立となりました。 #1hour if [ `date '+%M'` -eq "40" ] #10min # if [ `date '+%M' | tail -c 2` -eq 0 ] #all # if [ true ] then echo 処理 fi [] [ここ壊れてます]
826 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 16:18:47.23 .net] >>809 あそこで役に立つ記事あるか? 自己満のゴミ情報が大部分だからgoogole personal blockの対象だわ
827 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 16:49:19.73 .net] >>810 テストの大括弧の後ろにセミコロン付ければいいんでね?
828 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 18:34:13.86 ID:v2ZV9RF7w] bash3.2+ で IFS=$' \t\n' な状態で $ echo "foo bar" baz | hoge.bash とした時に hoge.bash 内で "foo bar" と baz を 別々の引数として取得するにはどうすればいいですか?
829 名前:名無しさん@お腹いっぱい。 [2016/12/07(水) 19:49:58.99 .net] >>811 わかる。盛大な勘違い書いててドャァしてる感がすごい
830 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 21:31:23.08 .net] googoleとかのことか
831 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 23:23:03.71 .net] >>810 素直にcrontab使った方が良いんじゃね
832 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/08(木) 09:58:48.36 .net] >>810 そんなこと起きないはず ほんとにそのコード?
833 名前:名無しさん@お腹いっぱい。 [2016/12/10(土) 20:22:24.90 .net] すいません、教えて下さい。 色んなネットーワーク機器のログをsedでズバッとマスキングかけたいんだけど、URLと、IPアドレスの正規表現を教えて下さい。
834 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/10(土) 20:25:17.66 .net] 817d
835 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/14(水) 16:17:30.58 .net] TBS det dritte folkemn
836 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/21(水) 04:35:52.23 .net] 文字列から実行して、返り値も標準出力も格納したいんだけど testCmd="なんかのコマンド" result=$(eval testCmd) この後の$0はevalの返り値なのかtestCmdの帰りなのかよくわからんのですが
837 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/21(水) 05:11:40.55 .net] >>821 $0 ってどういうこと? $? の間違いなら man bash の eval に書いてある。
838 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/21(水) 06:35:22.65 .net] 普通に考えるなら export testCmd="コマンド" $testCmd > ログファイル 戻り値=$?
839 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/21(水) 06:47:35.19 .net] ちなみにスクリプトにすると result=`$testCmd` で標準出力が入って $?でも戻り値は取れるけど 標準エラー出力は取れないね
840 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/21(水) 11:34:52.01 .net] 失礼いたしました$?ですね testCmd="なんかのコマンド" result=$(eval $testCmd) returncode=$? 標準エラーはいらんのですが プロセス置換?とかでできるのかな
841 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/22(木) 09:27:10.08 .net] いまいち何を訊きたいのか分からん。 $?はevalの終了ステータスが設定される。evalの終了ステータスはtestCmdの終了ステータスが設定される
842 名前:名無しさん@お腹いっぱい。 [2016/12/22(木) 12:40:53.01 .net] > この後の$0はevalの返り値なのかtestCmdの帰りなのかよくわからんのですが マニュアル読んでわかんなきゃ試してどうなるか調べないと 正常終了するコマンドだけじゃなくてそれ以外もね
843 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/15(日) 17:41:24.20 .net] [ .... ] を [[ .... ]]に単純に置き換えて問題あります でしょうか?
844 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/15(日) 18:20:34.24 .net] コマンドの引数を変数化したときって、どうやってその変数をコマンドに渡せばいいの? #!/bin/bash opts=“-f $file” hoge $opts これだと hogeコマンドが unrecognized option エラーになってしまう。 初歩的な質問ですまん
845 名前:828 mailto:sage [2017/01/15(日) 18:27:02.19 .net] スマソ、自己解決 $fileが不正だっただけやん
846 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/16(月) 21:28:07.13 .net] >>828 mywiki.wooledge.org/Bashism#Conditionals > [[ is not defined by POSIX, originated in ksh and is also present in zsh
847 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/17(火) 21:34:40.69 .net] bashでif使って変数に"ok"が入ってるかはどうやって確かめればいいんでしょうか? if [ $a = "ok" ]; then echo hoge else echo fuga fi の様にしているのですが"ok"が入っていても別の文字列が入っていてもfugaが出力されてしまいます
848 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/17(火) 21:59:37.47 .net] $a の中身が引用符の無い裸の ok ならば真になるはず
849 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/17(火) 22:02:25.13 .net] できればそのままやりたいんです cutかなんかで事前に削るしかないですかね?
850 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/17(火) 22:14:16.11 .net] 831 の "ok" を '"ok"' または "\"ok\"" にすれば
851 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/18(水) 09:13:18.95 .net] 引用符付きの文字列なの?
852 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/18(水) 11:40:24.29 .net] >>835 \"でうまく行きました ありがとうございます >>836 そうです "ok"か"error"、またはそれ以外の文字列(引用符なし)が入ってる
853 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/21(土) 12:38:14.00 .net] 使ってないと何もかも忘れる・・
854 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/21(土) 16:06:57.66 .net] 忘れるで思い出した、シェルスクリプトと関係ないけどinfoでいつも迷子になるわ俺
855 名前:. mailto:sage [2017/01/21(土) 20:26:15.12 .net] これってどうかな? gihyo.jp/magazine/wdpress/plus/978-4-7741-8694-8
856 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/21(土) 21:16:52.05 .net] configure全部読めば桶
857 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/23(月) 23:25:46.35 .net] httpdのログでIP直でアクセスして来たIPをbanするスクリプト作ってcronで回すようにした
858 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/23(月) 23:40:12.97 .net] 接続しに来た全IPをBAN判定する負荷のほうが高くなりそうだね
859 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/23(月) 23:46:44.50 .net] blockはpfでやってるけど、負荷があるのかわからない。たいして無いように思う。前は中国IPを全部はじいてたけど、特に不都合はなかった
860 名前:名無しさん@お腹いっぱい。 [2017/02/05(日) 17:07:27.34 .net] ビギナーなんですが、教えてくれませんか。 for i in {1..3} do echo $i done で 1 2 3 ではなく{1..3}が出力されます。どうして?
861 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/05(日) 17:13:16.91 .net] bash じゃないから
862 名前:名無しさん@お腹いっぱい。 [2017/02/05(日) 17:15:56.58 .net] >>846 ありがとう・・・ありがとう・・・
863 名前:名無しさん@お腹いっぱい。 [2017/02/05(日) 19:26:02.43 .net] もう一個お願いします。 testを 1 2 3 というファイルだとして、 cat test|while read line; do sed -e "s/.*/a/"; done をやると a a a ではなく a a となるのはなぜですか?
864 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/05(日) 20:04:29.97 .net] ホントは、 cat test|while read line; do echo "$line" | sed -e 's/.*/a/'; done ってしたいんじゃない? cat test|while read line; do sed -e "s/.*/a/"; done だと、1行目を read が喰って、2行目以降は全て sed に入力される ことになるよ。
865 名前:名無しさん@お腹いっぱい。 [2017/02/05(日) 20:26:43.25 .net] >>849 ありがとう・・・。そういう仕組みになってるのは知らなかった。
866 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/08(水) 13:58:57.76 .net] list.txt に書いてあるファイルを一括で転送するスクリプトを書いたのですが、 これに送信前と送信後のmd5を比較して、一致しなかったら再送させるにはどうすればいいですか? pastebin.com/aXucBuHW
867 名前:名無しさん@お腹いっぱい。 [2017/02/08(水) 23:14:15.74 .net] 一度 mvしてしまったものは再送出来ない
868 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 12:54:00.09 .net] こういうファイルを重複箇所は2度目に出現する箇所のみ削ってマージする方法ってある? $ cat file1.txt 1 2 3 4 $ cat file2.txt 3 4 5 5 6 センスない自分
869 名前:ニしてはheadとtailを使って逐一チェックしながら マージすると言うプログラミング的な方法しか思いつかなかった・・・ [] [ここ壊れてます]
870 名前:名無しさん@お腹いっぱい。 [2017/02/09(木) 13:09:23.15 .net] cat file1.txt file2.txt | sort -nu あくまでも中には数字しかないならばの話で。
871 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 13:17:38.41 .net] 連結してsortしてuniqじゃダメなの?
872 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 13:35:43.26 .net] >>854-855 ありがとうございます 数字を使ったのは単なるサンプルなので・・・実際は文字列が入っています 今はcatで単純マージしたあとにviで重複箇所を削っていて かつそのファイルを利用する時にsortしてuniqしています できればファイルサイズとかも気にしたいので パイプとかで簡単かつ堅実に出来ないかなと思ったのです
873 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 13:40:12.55 .net] すでにソートされてるんならuniqだけでいいんじゃね そうじゃないんなら、ありうる最大限一般的な例を出さないのがだめ
874 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 16:02:59.69 .net] awk 使うとか $ cat file1.txt file2.txt | awk '{if(!u[$0]){u[$0]=1;print;}}'
875 名前:名無しさん@お腹いっぱい。 [2017/02/09(木) 19:01:56.53 .net] https://www.youtube.com/watch?v=quIHgwuF6r4&sns=em
876 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 19:13:20.28 .net] 2次元座標をy座標 -> x座標の順でソートしたいんだけど ソートキーの値がある範囲内(例えばプラスマイナス100)にある場合は同じ値とみなすみたいなことできますか? 入力イメージ 0001 31 149 0002 21 156 0003 11 145 0004 52 344 0005 42 356 0005 12 353 0006 53 594 0007 13 613 出力イメージ 0003 11 145 0002 21 156 0001 31 149 0005 12 353 0005 42 356 0004 52 344 0007 13 613 0006 53 594 比較ロジック(0はa=b、-1はa<b, 1はa>b) function compare (a, b) { if (a.y < b.y - 100) return -1 if (a.y > b.y + 100) return 1 if (a.x < b.x - 100) return -1 if (a.x > b.x + 100) return 1 return 0 }
877 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 19:14:30.15 .net] >>860 入力イメージは(id, x, y)で 3カラム目がy座標、2カラム目がx座標です
878 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 19:50:30.95 .net] 区間に分けていいんなら、100単位で丸めたキーを追加してソートすればいいけど、 その比較関数をきっちり実装するのは無理があるね awkかそれ以上のスクリプト言語使うくらいかな
879 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 20:07:21.71 .net] プラマイ100とかだと全部同じ値になるんじゃないの? 四捨五入で丸めるなら分かるけど
880 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 21:01:26.79 .net] pythonのsortはstableだと保証されてるけど、他のは?
881 名前:859 mailto:sage [2017/02/09(木) 21:46:47.59 .net] >>862 >>863 入力イメージの値にあるみたいに丸めだと欲しい結果が得られないのでスクリプト言語使ってみます ありがとうございます >>864 stableかどうかはあんまり考えてませんでした 1カラム目のユニークな値でソート済みなところからの処理なので stableじゃないsortの場合は比較ロジックに1カラム目を追加して対応します
882 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 22:44:27.46 .net] んー、500=560で、560=620だけど、500<620って、ソート誤らんかな
883 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/09(木) 23:31:32.77 .net] >>865 このスレで言うべきでは無い気はするけど Excelとかの表計算ソフトを使った方が良さそうな気が
884 名前:859 mailto:sage [2017/02/10(金) 00:45:19.33 .net] >>866 ユニークなキーも比較条件に追加すれば並び順は一意に決まるので誤ることはないかと >>867 シェルスクリプトでいろいろ処理する途中の処理なんです
885 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 01:36:54.52 .net] >>868 qsortを仮定して、たまたまピボットが560になったときと 620になったときで結果が変わるよ 誤るというか、結果が一意で
886 名前:ない [] [ここ壊れてます]
887 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 02:16:12.75 .net] 1カラム目がユニークキーだとしてそれも比較条件に入れれば 各行の比較で必ず上下関係が明確になるのでqsortでも大丈夫じゃないでしょうか 001 620 002 560 003 500
888 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 05:48:37.28 .net] シェルでも他言語でもプログラミングが必要で ループ処理しながら選択ソートするしかないね まあまずシェルで〜とかじゃなくて ExcelでもJavaでも何でもいいから簡単に実装できる方法を調べてみて シェルに落としこめるかを調べた方がいいと思う 例えば偏差とか一般的で誰でも使うから統計処理なんてawkで楽に出来るんだけど >>860 がやりたいのって特殊だから独自実装が必要になると思うよ 茶化してるわけじゃないけど はじめに自分がやりたいことは何なんでしょうって聞くのが早いと思う
889 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 06:15:23.45 .net] 数学詳しくないけど 前後のデータの単純比較じゃなくて 全データとの比較が必要になるから コマンド1発じゃ無理だね(10発くらいでも無理だけど) キーを追加するにしてもデータ数-1分のキーが必要になるし(xとyでさらに2倍か) キーが別だからそこからソートする方法が浮かばない スクリプトでもプログラムでもいいけど プラマイ100を同値とするソートのロジック組むしかないと思う
890 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 08:25:47.98 .net] >>870 qsortの中身知ってる? パーティショニングしたらあとはブロック内の入れ替えしかしないよ
891 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 08:29:02.88 .net] >>872 データ数-1とか2倍とか意味わからん
892 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 09:53:38.19 .net] >>868 並び順は良いだろうけど A=B B=C A≠C の時そもそもどうなれば良いの? 001 A 001 B ??? C
893 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 10:06:02.58 .net] ソートっていうのは同値類とその間の全順序を決めて要素を並べることだよね >>860 のcompareだと推移律を満たさないので同値類になっていない だからおかしなことになる
894 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 10:15:12.36 .net] このように複雑になる場合は要求定義が不適切な事が多い
895 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 10:16:20.47 .net] 普通に全部出せよ 何で小出しにしてんだよアホじゃねえよ
896 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 10:35:17.25 .net] 複雑って言うか単純なんだけど特殊なだけでしょ
897 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 10:52:33.90 .net] こんなアホソート誰が必要とするんだよwww ソート前 001 200 200 002 100 100 003 0 0 ソート後 003 0 0 ←一番小さく200との差が100を超えているため入れ替える 001 200 200 ←一番大きいが100からは100以内なので入れ替えない 002 100 100 ←200より小さいが200からは100以内なので入れ替えない アホだw コレ意味の分かってないやつがロジック組むと 100から見たら0も200もプラマイ100以内だから 並べ替えしないとか言うことになるだろう 要するにプラマイ100を見込んだ最小値を求めて 2週目のループでそれを除外した中からさらに最小値を求めていくだけ 終わりまで選択ソートをやるだけなんだけど そこにプラマイ100の比較を追加する必要がある ぶっちゃけソート結果を見れば分かるように こいつソートしてんの?って思うだろう そもそも>>874 の考えが破綻していると言うか思いつきソートなんだろうと思う 統計とか学んだ方がいいかな〜
898 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 10:59:36.91 .net] ぶっちゃけプログラムを書くのは簡単
899 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 11:04:25.90 .net] 特殊じゃなくて曖昧なんでしょ 早い話、1000x1000の平面のすべての整数座標に点があったらどうソートしたいわけ? 2次元だからややこしいわけでなく1次元でも同じこと
900 名前:873 mailto:sage [2017/02/10(金) 11:07:21.05 .net] >>880 俺になんの用?
901 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 11:15:25.85 .net] >>883 ごめん間違えた>>860 だ >>882 いや曖昧じゃない 2次元と言うのもちょっと複雑にしてるだけだろう プラマイ100以内は同じと言う明確な基準がある ただたぶんこのソートの結果は>>880 に記したように 初期のデータの並びによって変わる部分があると思うね だからこのソートは>>860 の思いつきソートだってことだ
902 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 11:38:39.44 .net] 多分、縦横10000くらいある座標にポツポツしかないと予想した処理なんだろうよ
903 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 14:05:33.33 .net] >>884 (0, 100) (99, 300) (198, 200) どう並べりゃ良いのよ?
904 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 14:12:56.80 .net] >>886 (0, 202) (99, 101) (198, 0) こうか
905 名前:873 mailto:sage [2017/02/10(金) 14:39:27.08 .net] (0,999) (0,998) ... (0,1) (0,0) どう並べる?
906 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 15:26:37.64 .net] cygwinでスクリプト書いてて時々 bar=`ls foo_*.txt|tail -1|cut -d\. -f1` で$barに高確率で何も入らなかったり(foo_*.txtはあるのに) bar=`echo $foo|perl -pE 's/^.*"hoge":"([^"]+)".*$/HOGE_\1/'` echo $bar > /dev/null echo "result:"$bar の2行目がないと何故か3行目で$barが空のように表示されたり というような現象が起きるんだけど、これってよくあること? cygwin64にしてから起きているような気もする
907 名前:名無しさん@お腹いっぱい。 [2017/02/10(金) 15:56:58.38 .net] . . 東京都三鷹市 元ニコ生主の莉里子です (整形後) i.imgur.com/SLcz3dS.jpg (整形前) i.imgur.com/zPvxpx5.png 不倫・浮気・密会・不道徳な行為は著名な小説家でしている人がいるので真似しちゃう池沼です i.imgur.com/vZeIuO3.png ■2015年2月 釣りニコ生主コジコジと沖縄旅行でオフパコ 2015年2月2日-3日...釣り生主コジコジと沖縄旅行でセックス/やり捨てされ逆ギレ 2015年2月4日.........莉里子の父親から電話があって脅されたとコジコジに放送で暴露される 2015年2月6日.........リスカ画像UP 2015年2月9日.........ツイ全消し/コミュ爆破逃亡 imgur.com/a/58WQC ■2016年6月 バンドマン兼ニコ生ツイキャス配信者と密会 その3日後に穴るセックス〜継続中 imgur.com/a/Lx8o2 ●早川莉里子●土井莉里子●土井寧々●土井剛●早川剛●星崎●りりこ●りりこし●にゃんぱす ●ね子●にゃこ●みんち●めう●ねね●猫又●剛 ※名古屋ゲイ風俗ホストとも体の関係※
908 名前:名無しさん@お腹いっぱい。 [2017/02/10(金) 15:57:21.03 .net] . . 莉里子(本人公表)1994年3月7日 or 1996年4月25日 imgur.com/a/oJZpv 生主時代(にゃんぱす、りりこし、莉里子) 剛 i.imgur.com/dQxxGuV.png imgur.com/a/gPaof 東京都三鷹市 シティハイツ吉祥寺通り i.imgur.com/UmTmbcu.jpg i.imgur.com/cODTuzm.png i.imgur.com/KdyuUod.png imgur.com/a/eeixK (見せたがり乱交好きのメンヘラ) i.imgur.com/9V5mmTh.png i.imgur.com/lobby7w.png i.imgur.com/AdewV6O.jpg i.imgur.com/YQaNYBd.png i.imgur.com/pdsCXHG.jpg 莉里子 緊縛ハメ撮り師 『相馬ドリルrenji』 とラブホに2人で入って フルヌード緊縛ハメ撮り https://pbs.twimg.com/media/CpFjMz0UEAAurD-.jpg i.imgur.com/xaAhkiD.png https://twitter.com/somadrill/status/761498960028499968 imgur.com/a/3dnz5 i.imgur.com/SAAZ0fQ.png
909 名前:名無しさん@お腹いっぱい。 [2017/02/10(金) 15:57:31.97 .net] . . . >悪質パクツイ垢(自称ハッカー)のコピーライティング特定されててワロた @copy__writing の中の人は東京都三鷹市の莉里子 https://twitter.com/copy__writing i.imgur.com/LyXsDj9.png i.imgur.com/nqT3xBN.png i.imgur.com/2FlhfLE.jpg https://www.mercari.com/jp/u/446591929/
910 名前:名無しさん@お腹いっぱい。 [2017/02/10(金) 15:58:37.98 .net] ■莉里子プライベート垢 @riricoco0 @bibliophilia333 @muzimuzi333 @nekomatagensou @hanasoraumimori @mirainosekai3 @zibanyan666 @parlorchild @liliririko @EriotN @mike_peko @riricoco0 @ririko_neko @nyanpas ※1 @telegraphyneko @riricatputi (新アカ) imgur.com/a/X1vQA
911 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/10(金) 22:49:49.54 .net] >>889 再現性はあるの? 手で実行してるのか知らないけど lsの結果をファイルにリダイレクトしといて(ログ残しておいて) 地道に調べるしかないと思う
912 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/14(火) 09:44:10.27 .net] SJISで漢字を含むCSVファイルを入力として、 while read line do なんちゃら done < CSV みたいに一行ずつ読み込んでなんちゃらすると、特定の漢字をreadで取った時に文字化けするんだが これの回避策って兄貴何かないかな とりあえずIFSを改行のみにしてfor line in `cat CSV`にして凌いだが、IFSいじるのが気持ち悪くて仕方がない
913 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/14(火) 10:11:22.08 .net] なんの漢字?
914 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/14(火) 10:13:38.18 .net] SJISなんてウンコを触っておきながらIFS弄るのが気持ち悪いというのは矛盾
915 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/14(火) 10:35:53.64 .net] >>895 0x5C を含む漢字でしょ、「表」とか だったら read -r line で
916 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/14(火) 10:44:50.39 .net] >>898 KOREDAAAAA!!! ありがとう兄貴 ちなみに構造って感じでつまづいてた SJIS扱うのは古いプロジェクトならよくあることよ
917 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/14(火) 10:54:10.92 .net] そうか2バイト文字の1バイトが¥なせいでエスケープ扱いしちゃってたのな… UTF8とかだと回避出来るんかなこれは
918 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/14(火) 11:54:23.78 .net] んなもん当たり前だろ、としか思えない私はおっさん確定。SJIS死すべしと思っていたのは25年前くらい? これが世代というものなんですね……
919 名前:894 mailto:sage [2017/02/14(火) 13:40:31.07 .net] 25年前からプログラマやってる人と並んだらさすがに俺はクソガキだわ にしても意外なほどググっても出ないな、それほどマイナーなのかこの症状 もしくは当たり前すぎるのか
920 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/14(火) 15:20:01.03 .net] >>902 sjis ダメ文字でググればごろごろと
921 名前:894 mailto:sage [2017/02/14(火) 15:23:50.72 .net] >>903 sh read 漢字 文字化け とかで出てほしかった… 勉強なったわサンクス
922 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/14(火) 15:40:03.34 .net] sjis 文字化け でも出るで もう少しやったな
923 名前:894 mailto:sage [2017/02/14(火) 16:05:30.25 .net] あー、出るには出るけど多分readとの関連に気づかなかったろうな…ダメ文字ってものをまず知らなかったし 特定の漢字が文字化けってあたりの記事から推察して、SJISがなんかマズイってとこにはたどり着いたかもしれんが、多分それでもread -rには気づかなかったと思うわ iconv -t utf8してたと思う
924 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/14(火) 17:11:17.24 .net] >>906 iconv を利用するのはアリだと思うよ。 業務系のシェルスクリプトでも「SJIS データを一時的に UTF-8 にコンバートして何らかの処理をした後に SJIS に戻す」という手法で実装することがある。
925 名前:894 mailto:sage [2017/02/14(火) 17:17:09.33 .net] >>907 便利だよねiconv
926 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/14(火) 20:50:41.08 .net] おれは、使い慣れてるnkfでcp932→utf-8に変換してから作業してるわ。
927 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/15(水) 01:22:16.71 .net] そんで戻ってこない文字が出てきて泣きそうになるまでがテンプレだね。
928 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/15(水) 01:34:33.21 .net] それでもiconvなら iconvならきっとなんとかしてくれる
929 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/15(水) 04:53:01.40 .net] 元がcp932なら変換不能になることはないだろう そう、iconvならね
930 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/18(土) 04:37:58.77 .net] #!/bin/bash echo A > test.txt ; echo B >> test.txt ARRAY=$(cat test.txt) for item in ${ARRAY[@]}; do echo $item done としたら A B と表示されるので、$ARRAYは 2個の要素を持つ配列になったのだと思っていました。 ところが要素数を echo ${#ARRAY[@]} で表示させたら 1 が表示されます。 $ARRAYは配列になっていないのでしょうか? だとすると、なぜ for item … で表示されたのか?
931 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/18(土) 04:55:39.09 .net] indexも表示させればわかるよ echo A > test.txt; echo B >> test.txt ARRAY=$(cat /tmp/test.txt) for (( i=0; i<${#ARRAY[@]}; i++ )) do printf "ARRAY index:%d value:%s\n" "$i" "${ARRAY[i]}" done readarray -t ARRAY2 < <(cat /tmp/test.txt) for (( i=0; i<${#ARRAY2[@]}; i++ )) do printf "ARRAY2 index:%d value:%s\n" "$i" "${ARRAY2[i]}" done
932 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/18(土) 05:52:55.03 .net] >>914 readarray -t ARRAY < <(cat test.txt) で綺麗に配列として読まれますね。 これでいま作っている自作ツールが完成出来ます。 ありがとうございます
933 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/18(土) 09:43:20.54 .net] 最初の例のやつ、多分配列になってないんじゃないか
934 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/18(土) 14:18:47.86 .net] >>916 #!/bin/bash echo A > test.txt ; echo B >> test.txt ARRAY=$(cat test.txt) N=1 for item in ${ARRAY[@]}; do echo ARRAY[$N]=$item N=$(($N + 1)) done としたら ARRAY[1]=A ARRAY[2]=B と表示されて、配列になっているようです
935 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/18(土) 16:02:36.82 .net] >>917 それは配列になってるんじゃなくてforループで一つ目の要素がsplitされてるだけ echo A > test.txt ; echo B C >> test.txt みたいにスペースなんかが入ると対処できないからそういうコードはやめたほうがいい for item in "${ARRAY[@]}"; do ってクウォートすると結果変わるでしょ? あと”<(cat test.txt)”は比較のために書いただけでcatしなくても大丈夫 readarray -t ARRAY < test.txt while readするかreadarray(=mapfile)使うか mywiki.wooledge.org/BashFAQ/005#Loading_lines_from_a_file_or_stream
936 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/18(土) 17:07:28.86 .net] >>918 > それは配列になってるんじゃなくてforループで一つ目の要素がsplitされてるだけ > for item in "${ARRAY[@]}"; do ってクウォートすると結果変わるでしょ? なるほど。 配列になっていないのと、検証の方法が間違っていたことがよく理解出来ました。 > echo A > test.txt ; echo B C >> test.txt みたいにスペースなんかが入ると対処できないからそういうコードはやめたほうがいい 気を付けます。 > あと”<(cat test.txt)”は比較のために書いただけでcatしなくても大丈夫 > readarray -t ARRAY < test.txt > while readするかreadarray(=mapfile)使うか > mywiki.wooledge.org/BashFAQ/005#Loading_lines_from_a_file_or_stream ありがとうございます。 もっと勉強します
937 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/20(月) 13:16:49.47 .net] >>919 [user@f25 ~]$ ARRAY=$(cat test.txt) [user@f25 ~]$ declare -p ARRAY declare -- ARRAY="A B" [user@f25 ~]$ readarray -t ARRAY < test.txt [user@f25 ~]$ declare -p ARRAY declare -a ARRAY='([0]="A" [1]="B")'
938 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/20(月) 18:00:26.41 .net] >>920 declare -p !!! 知らなんだ
939 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/20(月) 18:11:16.14 .net] このスレ来ると度々便利な知識得られるからいいわ grep -oとか
940 名前:名無しさん@お腹いっぱい。 [2017/02/21(火) 05:20:06.32 .net] 配列にするなら ARRAY=( $(cat test.txt) )
941 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/21(火) 16:45:06.28 .net] >>923 echo A > test.txt ; echo B C >> test.txt みたいにスペースなんかが入ると…
942 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/21(火) 19:03:20.01 .net] IFS=$'\n' ARRAY=( $(cat test.txt) ) declare -p ARRAY とすれば空白混じりの行も1行として扱われるが、 空行(何も文字が無い行)は$ARRAYに読み込まれない readarray -t ARRAY < test.txt declare -p ARRAY だと空行も読み込んでくれる
943 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/28(火) 23:57:54.64 .net] echo test | grep a みたいな時に終了コードはgrepこの場合1 でかつ標準出力にはtestが出ていて欲しいのですが どうしたらいいでしょうか? 環境はbashです
944 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/01(水) 00:40:42.45 .net] echo test | tee /dev/tty | grep a でどうだろう?
945 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/01(水) 00:57:07.01 .net] 終了コード1のときにはその文字列を表示したいとかによって違う気がする。 常に入力をそのまま出力していいのだろうか。
946 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/01(水) 01:36:33.88 .net] 仕様を細かく詰めてない気がするけど とりあえず echo test | ( grep -v a; exit $(expr \( "$?" + 1 \) % 2 ))
947 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/01(水) 02:35:11.20 .net] みなさん、ありがとうございます echo の部分は常に表示、grepは結果のみ欲しいので-qで、判定につかうインプットは常に全量表示して、結果はリターンコード、標準出力は人が見るよう、リターコードはその後のシステム的な分岐につかう的な目的です(後続はbashの世界でないのでワンライナーが嬉しい)
948 名前:名無しさん@お腹いっぱい。 [2017/03/01(水) 05:09:32.29 .net] macのsipsコマンドについて質問しても大丈夫ですか? 例えば-zと-sを一緒に実行して--out でフォルダに書き出したいとして どういうルールで並べて記述すればいいでしょうか? sips -Z 200 * -s format jpeg --out Converted/ あれこれいじって、たまたまこれで動いたのですが 正しいのかわかりません。 よろしくお願いします。スレチだったらすいません。
949 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/01(水) 09:20:45.49 .net] >>930 grep にこだわらくても良くて、GNU sed を使ってもいい場合: $ echo test | sed '/a/!q1' test $ echo $? 1
950 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/01(水) 09:22:21.87 .net] >>931 正しいけどスレチ man見ろ 見られないんなら https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/sips.1.html
951 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/01(水) 09:41:41.92 .net] 要求満たしつつ個人的に好きなのは>>927
952 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/01(水) 09:50:14.78 .net] 「標準出力」じゃないから要求満たしてないんじゃない?
953 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/01(水) 10:04:09.41 .net] >>931 そういえばこういうスレもあったり 【Macintosh】MacでUNIX【Terminal】 echo.2ch.net/test/read.cgi/unix/1123501408/ mac板でよかった気もするけど OS XをUnixとして使ってる人の為のスレ 18 potato.2ch.net/test/read.cgi/mac/1462475819/
954 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/01(水) 10:17:52.51 .net] >>932 あ、間違えた…こうしないと $ echo test | sed -n 'p;/a/H;${x;/./q0;q1}'
955 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/01(水) 12:19:32.48 .net] echo test | awk '/a/{x=1}//END{exit !x}'
956 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/01(水) 17:16:16.75 .net] $ echo test | awk '/a/{x=1}{print}END{exit !x}' じゃないの?
957 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/01(水) 17:36:55.41 .net] $ echo test | grep -B10000 -A10000 a
958 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/01(水) 17:38:08.89 .net] あああ、1行もマッチしないとダメだ
959 名前:名無しさん@お腹いっぱい。 [2017/03/01(水) 21:54:56.86 .net] >>933 >>936 スレチにもかかわらずありがとうございました!
960 名前:名無しさん@お腹いっぱい。 [2017/03/04(土) 09:13:31.42 .net] >>931 うちでもよく使うが、sips なんて他には無いからな for i *.jpg; do sips -Z 200 $i -s format jpeg --out Converted/$i; done ところでマカーな人はbash4入れてるんですかね。bash3なので、最近ココで出てくるreadarrayが使えない
961 名前:名無しさん@お腹いっぱい。 [2017/03/04(土) 09:17:20.48 .net] あー in が抜けてる for i in *.jpg ; do な
962 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/04(土) 10:32:40.92 .net] ImageMagickのconvertみたいなものか
963 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/04(土) 18:32:17.60 .net] >>943 >ところでマカーな人はbash4入れてるんですかね。 Homebrewで入れてそっち使うようにしてる
964 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/07(火) 19:02:41.56 .net] いつもシェルが使える環境ある? 自分は仕事ならcygwin(今は使ってない)、実機、仮想環境 プライベートならラズパイ、仮想環境かな
965 名前:名無しさん@お腹いっぱい。 [2017/03/07(火) 22:43:56.07 .net] Mac
966 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/07(火) 23:30:24.96 .net] 俺はスマホにzsh入れてるけど
967 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/08(水) 01:50:34.93 .net] >>947 SL-Zaurus(SL-C860)を今だに現役で使っているよ
968 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/09(木) 02:31:23.57 .net] そういうのって ただ書けるだけじゃなくて動かせたり 実際にその機械で便利に使えたりするのですか?
969 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/09(木) 17:50:34.83 .net] pythonの出力をシェルの変数にするにはどうやれできますか? x=$( python test.py ) はダメでした
970 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/09(木) 17:58:17.55 .net] $ cat test.py print("Hello world!") $ python test.py Hello world! $ x=$(python test.py) $ echo $x Hello world!
971 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/10(金) 09:16:11.80 .net] あれ?そうだよなと思ったら、pythonの文字コードの扱いが変でした シェルごめんよ
972 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/10(金) 13:07:41.33 .net] pythonのせいにするのもどうかと
973 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/10(金) 16:08:16.57 .net] pythonは文字コード周り落とし穴が多いすぎ pythonのせい
974 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/11(土) 22:32:29.75 .net] $@から$1を除いたものを関数に渡す方法を教えてくだしあ
975 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/11(土) 22:46:42.79 .net] shiftするしかないんじゃないかな 呼出し後に元に戻したいとするとsetかな
976 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/11(土) 23:06:24.73 .net] 呼び出し先でshiftすりゃいいじゃん
977 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/12(日) 00:12:25.14 .net] せやな!
978 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/12(日) 01:47:16.95 .net] >>957 bash なら "${@:2}" でええんちゃう
979 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/12(日) 04:14:35.39 .net] >>961 その発想もなかった パラメータとして渡すならこっちの方が分かりやすいな
980 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/12(日) 19:17:36.56 .net] ずっと、行の抜き出しはprcegrepを使ってたげど sed -n -e '/hoge1/,/hoge2/p' これでできるのを、今知って感動中。しかも、こっちの方が速い。 そのあとの置換は sed -n -e '/hoge1/,/hoge2/p' | sed -e 's/foo/bar/g' としかできなかったけど sed -n -e '/hoge1/,/hoge2/p' -e 's/foo/bar/g' で、やる方法とかであるんですか?
981 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/12(日) 20:09:10.06 .net] sed -n -e 's/foo/bar/g' -e '/hoge1/,/hoge2/p' じゃだめなの?
982 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/12(日) 20:49:35.74 .net] sed -ne '/hoge1/,/hoge2/{s/foo/bar/g;p;}' でもいけそう
983 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/13(月) 15:22:55.40 .net] sedスレあるのに忘れられてそうw
984 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/13(月) 17:19:42.05 .net] sed -e '/hoge1/,/hoge2/!d' -e 's/foo/bar/g'
985 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/13(月) 19:49:20.42 .net] ありがとうございます さらに速くなりました 一番最後の文字はコマンドというのを実感
986 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/13(月) 20:38:32.02 .net] sedは-n使ったら負け
987 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/15(水) 13:36:43.93 .net] なんで?
988 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/15(水) 13:37:42.13 .net] うるさい! 俺が負けだって言ったら負けなんだよ 大人しく言う事聞け
989 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/15(水) 13:43:38.36 .net] なんだそのダメな親みたいな言い分は
990 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/15(水) 13:45:42.22 .net] むしろジャイアンかな
991 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/15(水) 16:27:57.38 .net] pでプリントした行は元質問にもあるようにストリームを流れて行かない、 お漏らししたようなものだからね
992 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/15(水) 18:03:51.07 .net] sed だと、後方参照の時にバックスラッシュでエスケープしまくることになるのがどうにも… それで、いつの間にか perl を代わりに使うようになった。
993 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/15(水) 19:02:59.32 .net] sedでできることをperlでやるのは微妙に悔しいw
994 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/15(水) 20:28:01.98 .net] sed -e "s/微妙に/非常に/" >976
995 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/15(水) 20:45:20.13 .net] 入力なくね?
996 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/15(水) 20:58:18.06 .net] 考えすぎ
997 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/16(木) 12:44:27.48 .net] >>978 sed -e "s/微妙に/非常に/" <975 >976 ってやって空のファイルを作ってしまったあの頃...
998 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/16(木) 12:47:16.46 .net] 分からんでもない
999 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/16(木) 16:23:09.20 .net] 最初に head/tail、grep、sort 辺りを処理の都合上先にやることが多いので、 sed の入力にはパイプを使うことが多いかな。
1000 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/16(木) 22:48:37.43 .net] 日本語下手かw
1001 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/18(土) 22:25:35.75 .net] grepしてsedは素人
1002 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/18(土) 23:27:17.30 .net] なんで?
1003 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/19(日) 00:04:19.09 .net] sedだけでできるからかと
1004 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/19(日) 00:24:39.59 .net] grepである程度簡単なワードで絞ってからのほうが、複雑な置換は早そうだけど
1005 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/19(日) 00:57:36.33 .net] 実験して見せられるまで性能に関する予想は信じない
1006 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/19(日) 01:06:54.08 .net] まぁこじらせた人にてみればその手間は実に腹立つだろうな
1007 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/19(日) 10:07:51.17 .net] 「ひとつのことを上手くやる」から考えると、grep してから sed の方がマッチしてそう
1008 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/19(日) 11:41:33.99 .net] windowsのdos窓は使えるけれど、grep、sed、awk、perlなどはなし。当然他のスクリプト言語もなし。 さらに、新たなソフトのインスコはできない。 まあ、notepadでソースの編集はできる。 Eドライブには多くのフォルダがあって、中にはjpegのえろ画像が1テラ分てんこ盛り えろ画像だけを全部Dドライブにコピーしたい。 Eドライブのフォルダを見ると8階層ぐらいのフォルダもあって、とても手作業のコピペはムリ。 にゃんとか目的を達成する方法はないであろうか?! 各位のお知恵を拝借したい。
1009 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/19(日) 13:00:13.49 .net] powershell でも使えばいいんじゃないかな
1010 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/19(日) 14:12:15.82 .net] ここじゃなくてもっと他に聞くべき所があるだろうな
1011 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/19(日) 20:18:27.47 .net] その環境的な制限がありつつ、エロ画像を扱うという状況が想像できないな 仕事でエロ画像を扱ってるか上司の個人環境とかかな
1012 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/19(日) 20:31:39.22 .net] robocopyでコピーすれば良い
1013 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/19(日) 20:55:37.07 .net] >>988 GNU grep + GNU awk の場合だけど、GNU awk単独よりも早いらしいぞ papiro.hatenablog.jp/entry/2015/05/19/003432
1014 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/19(日) 22:03:55.18 .net] ドライブを別のPCからアクセス可能にしたらいいのに
1015 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/19(日) 23:09:48.69 .net] >>996 timeの使い方を知らないって事を自慢してどうしたいんだ?
1016 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/19(日) 23:10:46.82 .net] エロ画像に寛容なUNIX板
1017 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 10:44:19.74 .net] >>994 昔社内から netnews が見れてたので perl でスクリプト組んでエロ画像落としまくってたのをふと思い出した 当時は普通にFDに移動して持ち帰ってたけど
1018 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 12:06:05.49 .net] 俺にはもうFDってのがもうすごいわ
1019 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています