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/
745 名前:名無しさん@お腹いっぱい。 [2016/08/23(火) 02:08:14.36 .net] freebsd-update fetch freebsd-update install ができない
746 名前:名無しさん@お腹いっぱい。 [2016/08/23(火) 02:08:58.40 .net] ミラーサイトを色々変えてもだめ
747 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/28(日) 20:54:56.49 .net] 読み込みたいデータが入ったファイルをcatしてwhileでreadすると while抜けたときに変数の内容が保持されないんだけど 元のシェルスクリプトと別プロセスになってるからってことなのかな? 以下サンプル user01@server01 ~/test $ cat t4.sh cat work/uhl.txt | grep -v ^# | sort | uniq | while read title do grepvlist=`echo "$grepvlistw | grep -v \"$title\" "` grepvlistw=$grepvlist echo $grepvlist done echo "---------" echo $grepvlist echo $grepvlistw echo "---------" user01@server01 ~/test $ sh t4.sh | grep -v "111" | grep -v "111" | grep -v "222" | grep -v "111" | grep -v "222" | grep -v "333" | grep -v "111" | grep -v "222" | grep -v "333" | grep -v "444" --------- --------- user01@server01 ~/test $ cat work/uhl.txt 111 222 333 444 user01@server01 ~/test $
748 名前:名無しさん@お腹いっぱい。 [2016/08/28(日) 21:02:27.99 .net] while ... do ... ; done <<EOT $(grep -v ^# <file| sort | uniq) EOT
749 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/28(日) 21:03:00.60 .net] パイプせずに-eでやろうってのはその通りですが 疑問の本質ではないのでとりあえずスルーでお願いします
750 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/29(月) 03:11:36.41 .net] だったら問題の本質だけのスクリプトにすべきでは?
751 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/29(月) 06:36:10.22 .net] 単に簡略化して書いただけじゃ?
752 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/08/29(月) 12:49:07.23 .net] パイプが問題の本質なんだな パイプでつなげたwhileはサブシェルで起動するから、 > while抜けたときに変数の内容が保持されないんだけど > 元のシェルスクリプトと別プロセスになってるからってことなのかな? ってことになる whileをパイプの先に置いてる限り解決しないので、>>734 が本質的な解 あるいは、shじゃなくてbashとかならプロセス置換が定石 while read title; do ... done < <(cat work/uhl.txt | grep -v ^# | sort | uniq)
753 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/08(木) 21:25:56.17 .net] urlを取得しようと、テストで下を試したのですがダメでした。 どなたか、どうすればいいか教えてください。 お願いします。 x="x" echo $x | grep -Ee "/[\w\.]" echo $x | grep -Ee "\/[\w\.]" echo $x | grep -Ee '/[\w\.]' echo $x | grep -Ee '\/[\w\.]' echo $x | grep -e "/[\w\.]" echo $x | grep -e "\/[\w\.]" echo $x | grep -e '/[\w\.]' echo $x | grep -e '\/[\w\.]'
754 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 00:28:23.04 .net] やりたいことがわからない...
755 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 13:26:15.96 .net] テキスト中のurlを取得しようと、grepに/が先頭に来るパターンを使ってテストしてみたら、htttp://xが取得できなかった。 ヘルプミー。 だろ。 grepに/が先頭に来るパターンを使った取得は俺も出来ない。
756 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 13:46:05.11 .net] >>739 期待する出力は?
757 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 14:07:32.50 .net] >>741 おまえの言うことも分からないから739と741は同一人物っぽいな $xがURLそのものなら加工する必要が無い
758 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/09(金) 15:51:28.22 .net] 「grep」ではなくて「sed」による例だが、 URL(URI)の中からホスト名(サーバー名 *1)を抽出したいなら *1 スキーム(http:)とパス(/yyy/zzz/index.html)に挟まれた部分 [入力]URL www.xxx.co.jp/yyy/zzz/index.html [出力]ホスト名 www.xxx.co.jp $ echo "www.xxx.co.jp/yyy/zzz/index.html" | sed -e 's/.*http:\/\/\([^\/]*\)\/.*/\1/i' www.xxx.co.jp
759 名前:744 mailto:sage [2016/09/09(金) 16:31:07.62 .net] 実行例、何かURLの後ろに勝手に「; セミコロン」が挿入されているな これ2chの仕様? もし試すなら「index.html"」の後ろの「; セミコロン」は削除して試してくれ
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が不正だっただけやん