1 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 11:53:21.38 ID:BBiLRgnj0.net] !extend:on:vvvvv:1000:512 !extend:on:vvvvv:1000:512 シェルスクリプトに関する総合スレッドです。 スレ立て時は以下の文を先頭行に加えて下さい。 後のつけ忘れ防止の為に複数行重ねて追加推奨 !extend:on:vvvvv:1000:512 全般 ・荒しは無視しましょう。 ・丁寧な姿勢を心掛けましょう。 ・ネチケット(死語)を意識しましょう。 前スレ シェルスクリプト総合 その28 mevius.5ch.net/test/read.cgi/tech/1532397676/ VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
699 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 12:14:20.49 ID:I8hvszb00.net] Qiitaで知ったけどこの構文便利だね。 ${VAL+:} false ↑これで$VAL変数が空文字だろうが定義されてさえいれば真,そうでなけば偽。 今まで[ -n ]と[ "x$VAL" = "$VAL:-x" ]とか組み合わせてたけどこれでスッキリ解決。 コマンド呼び出しも少なくなるから微妙に処理速度も上がるだろうし。 ただ難点は,test構文を用いた方法より遥かに難読になること。${VAL+:} false←これで何をやってるかなんて注釈がないと分からん。
700 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 12:41:53.30 ID:emfrr2Lm0.net] >>699 なんだそりゃ? 相変わらずのQiitaクオリティなのか? 変数が定義されているかの一般的なチェック方法はこれだろ? [ "${VAR+1}" ]
701 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 14:04:21.10 ID:jPqivsUqa.net] 定義されてるかどうかってどういう時に用いるんだ C言語やってた頃は二重インポート防ぐためとかやってたけど同じような感じ?
702 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 14:31:59.62 ID:I8hvszb00.net] >>700 「一般的」かどうかは知らない。それともその形式がより多く使われているという根拠があるのかな? いずれにしてもコロンコマンド(と変数展開)がシェルのビルトインとしてPOSIXで定められているのに対して testコマンドはPOSIXにおいては外部コマンド。尤もBashやZshではシェルに組み込まれてるけど。 外部コマンドを呼び出すのとシェルの内部でコマンドを展開するとでは後者のほうが早いよ。 君にとっては「Qittaクオリティ」でも,速度が優秀なのは君が提示したほうじゃなく「Qittaクオリティ」の方。
703 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 14:49:43.89 ID:I8hvszb00.net] dashでも[はシェル組込だね。実際testユーティリティを外部コマンドに頼ってるシェルって今現在存在しているのだろうか。 Heirloom shellあたりだとありえそう(試してないけど)
704 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 15:54:11.31 ID:emfrr2Lm0.net] > 「一般的」かどうかは知らない。それともその形式がより多く使われているという根拠があるのかな? ぐぐればコレばっかり見つかるはずだが? > testコマンドはPOSIXにおいては外部コマンド。尤もBashやZshではシェルに組み込まれてるけど。 全てのシェルで [ はビルトインだ シェルに組み込まれていないというものがあれば教えてくれ
705 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 16:18:05.53 ID:emfrr2Lm0.net] falseコマンドはPOSIXでシェルのビルトインではない もっともどのシェルでもビルトインになっているが
706 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 17:26:54.56 ID:I8hvszb00.net] >>704 > ググればこればっかり ほう,それは知らなかった。pws=0にしたGoogle検索英語版では${VAR+:}が多いように見受けられるな。 > 全てのシェルで[はビルトイン test(1)ユーティリティは,あくまでPOSIXにおいて組込ユーティリティじゃないという話。 根拠はこれ: pubs.opengroup.org/onlinepubs/9699919799/idx/sbi.html > シェルに組み込まれていないというものがあれば教えてくれ ご査収ください→https://www.unix.com/man-page/v7/1/sh/#neo-man-page-output
707 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 17:36:50.26 ID:b7tmfxF40.net] >>706 falseがビルトインって話じゃなかったの?w
708 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 17:38:22.47 ID:b7tmfxF40.net] > ほう,それは知らなかった。pws=0にしたGoogle検索英語版では${VAR+:}が多いように見受けられるな。 "${VAR+:}"で検索したけど5件しかなかったよ? "${VAR+x}"だと約 3,410,000 件
709 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 17:41:59.00 ID:I8hvszb00.net] ちなみに「すべてのシェル」と言うくらいなのだから, 主要でありPOSIX互換を謳うGNU Bash, Zsh, Debian Almquist shell(dash), yash, MirOS ksh(mksh)くらいについては知らべてるとは思うものの, POSIXの記述を知らないようなので, 一応,これら5つのシェルがtest(1)ユーティリティを組込コマンドにしているという根拠を以下に挙げておこう。 GNU Bash: https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html#Bourne-Shell-Builtins Zsh: zsh.sourceforge.net/Doc/Release/Shell-Builtin-Commands.html#Shell-Builtin-Commands dash: man7.org/linux/man-pages/man1/dash.1.html yash: https://yash.osdn.jp/doc/ja/#alpha-order mksh: https://www.mirbsd.org/htman/i386/man1/mksh.htm
710 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 17:44:33.96 ID:I8hvszb00.net] >>707 以下>>704 の書き込みを引用 > > testコマンドはPOSIXにおいては外部コマンド。尤もBashやZshではシェルに組み込まれてるけど。 > 全てのシェルで [ はビルトインだ > シェルに組み込まれていないというものがあれば教えてくれ ということでfalse(1)ユーティリティの話ではなく test(1)ユーティリティがシェル組込みかどうかという話でした。
711 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 17:47:23.27 ID:I8hvszb00.net] ちなみにfalse(1)ユーティリティもPOSIXにおいてシェル組込みとして定められている訳ではない。
712 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 17:49:01.92 ID:362BcdsM0.net] となると処理速度的にはどっちが良いの?
713 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 17:50:38.66 ID:b7tmfxF40.net] いや、俺が言ったことを復唱されてもこまるんだがw ちなみにビルトインかどうかはPATHを空にして実行できるかどうかでわかるよ builtinやtypeがないシェルもあるからね
714 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 17:51:02.76 ID:b7tmfxF40.net] >>712 大差なし
715 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 18:05:17.83 ID:I8hvszb00.net] >>712 大差ないけど,ただ,もしもPOSIXで定めらていないのを理由にしてtest(1)ユーティリティを組み込んでいないシェルがあったとして そのシェルにおいては変数展開(これは確実にシェルが仕事する)のほうがtest(1)ユーティリティをforkしてexecするより若干早いので 速度は${VAR+:}のほうが上。
716 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 18:06:48.53 ID:I8hvszb00.net] >>713 typeはPOSIXで定められているので,もしないシェルがあればPOSIX互換ではない。 つまり「ビルトインコマンド」なんていう概念はないかもしれないので,そんなことを調べるのは無駄に思えるな。
717 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 19:13:13.38 ID:b7tmfxF40.net] へー、poshはPOSIX互換じゃなかったのか >Debian Policy に準拠した普通のシェル >posh は、pdksh の軽装版であり、Debian ポリシーの準拠を目指し、 いくつかの特別な機能を付け加えたものです。 > >警告: Debian の /bin/sh スクリプトの多くは、実際はポリシーに準拠していると は限りませんので、 >posh を /bin/sh として使うと破損箇所が判明するかもしれま せん。 って書いてある割に大したことないな
718 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 20:44:49.31 ID:I8hvszb00.net] まあ ここまでPOSIX POSIX連呼しときながらアレだけども, 別にシェルってPOSIX shに準拠してる必要性なんてまったくないよなw poshも「POSIX互換じゃないシェル」として,便利に使えるようになればそれでいい。 実際,俺は使っていないものの,同級生にはfishを勧めてる。
719 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 20:55:10.29 ID:32uSmIhta.net] ポジクッス警察がいるから多少はね?
720 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 20:57:06.31 ID:b7tmfxF40.net] それじゃ俺も言っておかなきゃいかんのか? まあ ここまでPOSIX POSIX連呼しときながらアレだけども, 別にシェルってPOSIX shに準拠してる必要性なんてまったくなくて POSIXに準拠していなくても、現実にPOSIX互換の標準シェルとして デフォルトシェルで採用されているのであればそれに対応すべきだと思っている だから、dash、(busybox)ash、bash、ksh あたりは対応必須で zsh、posh、yash、あたりは優先度が低い。mksh、pdkshは デフォルトシェルとして採用されている事例があるのかわからんが
721 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 20:58:50.94 ID:b7tmfxF40.net] 俺は現実主義なんでね。標準とか仕様がどうこうよりも 現実としてそれは選択肢にならないのであれば、選択肢にならないし 非標準でも選択肢としてなり得るのならそれを使う
722 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 23:48:23.42 ID:u7Q7GReoM.net] ポジコレ棒で葬ってやんよ
723 名前:デフォルトの名無しさん mailto:sage [2018/11/25(日) 07:40:30.00 ID:rsPEFWOD0.net] もっと面白い書き込みして、どうぞ。
724 名前:デフォルトの名無しさん mailto:sage [2018/11/25(日) 12:05:00.87 ID:Yow09MRJ0.net] >>715 その前提条件で言えば false も組み込みじゃないかもしれないのだから同じじゃないの? 変数が定義されていれば false は実行されないけど、未定義かどうかを確認したいから 実行するわけで。 ただ、fork and exec に関して言えば test コマンドが 1.1ms, false コマンド は 0.8ms 程度 (コマンドバイナリのテキストセクションがメモリキャッシュされている場合で、実行環境は Intel Xeon E3-1220 3.1GHz/Linux kernel 4.15.0/glibc 2.27)。何千回も実行する様なケース なら違いが分かるかも。
725 名前:デフォルトの名無しさん mailto:sage [2018/11/25(日) 12:16:11.88 ID:wMoGqmE60.net] POSIXでビルトインの方が速いって決まってるんだっけ?
726 名前:デフォルトの名無しさん mailto:sage [2018/11/25(日) 12:29:43.54 ID:nRWf72Y30.net] >>725 外部コマンドはforkが発生するから結果的にビルトインの方が速い
727 名前:デフォルトの名無しさん mailto:sage [2018/11/25(日) 12:32:22.92 ID:wMoGqmE60.net] いやPOSIXでどうなっているかの話だよ
728 名前:デフォルトの名無しさん [2018/11/25(日) 13:54:00.21 ID:eaHucPl10.net] なんやこのバカwwww
729 名前:デフォルトの名無しさん mailto:sage [2018/11/25(日) 14:01:17.29 ID:nRWf72Y30.net] >>727 下のページをざっと見る限り規定されてないように思う オーバヘッドがある分遅いのは自明だからPOSIXが云々は関係ない話だとは思う pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
730 名前:デフォルトの名無しさん mailto:sage [2018/11/25(日) 18:36:53.00 ID:74eaLfxV0.net] 多分,なんでもPOSIX POSIXと言うので,からかってやろうとしたんだろう。 「お前の主張は全部POSIXに起源があるのか?」ってな。 まあ結果としてはネタにマジレスの嵐だった訳だがw
731 名前:デフォルトの名無しさん [2018/11/26(月) 12:25:16.95 ID:RdZe26lCr.net] 必死すぎる言い訳のせいで逆にひかれてしまったパターンw
732 名前:デフォルトの名無しさん [2018/11/26(月) 12:32:05.28 ID:mqDjQZG/M.net] とっても惹かれます
733 名前:デフォルトの名無しさん mailto:sage [2018/11/26(月) 12:44:40.04 ID:sgq1LDCF0.net] スプラッターやめろ
734 名前:デフォルトの名無しさん mailto:sage [2018/11/26(月) 17:46:57.26 ID:M+tccdiG0.net] echoでログを残そうとしています。 echo "メッセージ" > ログファイル で、ログファイルはNASに保存しようと考えているのですが NASがなんらかの原因で見えない場合、bashだと無視して処理を続けるのに cshだと、echoのとこで止まってしまいます。 止まらないようにする方法とかないですか?
735 名前:デフォルトの名無しさん mailto:sage [2018/11/26(月) 20:45:32.63 ID:dIk0IZ2NM.net] >>734 その「何らかの原因」を解決するのが先決じゃねーの? 素知らぬ顔でログ残ってないならそこで止まってもらった方が良くね?
736 名前:デフォルトの名無しさん [2018/11/27(火) 00:51:26.43 ID:IxTjeZ9T0.net] >>734 NFSならマウントオプションである程度はなんとかなるのでは? Windowsの共有(cifs)の場合は知らない。しかし何かオプションあると思うけどね。
737 名前:デフォルトの名無しさん mailto:sage [2018/11/27(火) 02:59:30.28 ID:vfcz+SK40.net] なぜかアホの子ってnfsをローカルファイルシステムと同様に信用しちゃうよね
738 名前:デフォルトの名無しさん mailto:sage [2018/11/27(火) 07:15:38.13 ID:EYppSGpIM.net] 唐突にお前の仲間の話しされても困る
739 名前:デフォルトの名無しさん mailto:sage [2018/11/28(水) 08:43:07.23 ID:lgqPOMnJr.net] >>737 信用ってのは常につながると思っちゃうってこと? それはいかんね
740 名前:デフォルトの名無しさん mailto:sage [2018/11/28(水) 09:03:44.81 ID:6Gc6vrWs0.net] NFS特有のエラーがあるとは思いもしなかったりするんだよな。 挙げ句の果てにファイルロックがうまく動かないとか言い出す。
741 名前:デフォルトの名無しさん mailto:sage [2018/11/28(水) 12:41:41.17 ID:V/2Czdkr0.net] 所詮、ネットワークを介したファイル共有だからね ディスクはアクセスできない = 故障 と考えていいけど ネットワークは一時的な切断やエラー、大きな遅延が想定される だからリトライやタイムアウトといった処理を行う 通常のディスクアクセスを行うコードは、こういった ネットワーク特有の事象について考慮されてない場合が多い だから(NFSの設定により)ネットワーク通信が正常に完了 できるまで待ち続ける(プログラムはタイムアウトしないのでフリーズした状態) もしくは一時的な接続不良でエラー終了したりする
742 名前:デフォルトの名無しさん mailto:sage [2018/11/28(水) 20:10:37.32 ID:N04UITTm0.net] シェルスクリプトの関数の名前の直後の括弧って あれはshに 「これは関数の名前ですよ」って教えるためのものっていう認識でOK? foo() { echo foo } ↑こういうのの「()」。なんかCやらと同じように引数の指定とかができたらいいのにと 初心者ながら思ったんだけど そういう訳でもなさそうだし。
743 名前:デフォルトの名無しさん mailto:sage [2018/11/28(水) 20:12:50.29 ID:aLWNsKMba.net] えっ
744 名前:デフォルトの名無しさん [2018/11/28(水) 20:22:26.38 ID:wHjpMIAFa.net] 引数は $1, $2 とかで受け取る。 呼び出す側は普通のコマンド実行のように書く。
745 名前:デフォルトの名無しさん mailto:sage [2018/11/28(水) 20:31:09.87 ID:Vqd4vFOqM.net] >>742 ともかく ( とか、普通使わない文字を挟んでおかないと、 foo { だとただの引数になっちゃうから。
746 名前:デフォルトの名無しさん mailto:sage [2018/11/29(木) 13:01:23.15 ID:Msn7clch0.net] >>745 なるほど。 「(」はサブシェルの開始だと思ってたけど そうでもないんだね……。 シェルの構文ってちょっと難しいことすると途端に複雑怪奇になるな(俺の頭の問題かも知れんがw) 対話的な利用を前提にした設計だから仕方無いとは言え、Pythonみたいに対話状態でもバッチ状態でも扱いやすくできなかったのかな。
747 名前:デフォルトの名無しさん mailto:sage [2018/11/29(木) 13:04:56.47 ID:lCOis1qI0.net] 小学生が政治語ってるのを聞いてる気分だ
748 名前:デフォルトの名無しさん mailto:sage [2018/11/29(木) 14:34:26.85 ID:Msn7clch0.net] 「どうして解散するですか?」
749 名前:デフォルトの名無しさん mailto:sage [2018/11/29(木) 15:57:37.21 ID:QFUJhwUI0.net] Python を使えばいいんじゃないかな
750 名前:デフォルトの名無しさん mailto:sage [2018/11/29(木) 16:07:41.49 ID:lCOis1qI0.net] Pythonは構文が複雑怪奇すぎる かっこは関数呼び出しの引数の開始だと思っていたのに 関数を定義するときにも使うらしい とかいうだろうな
751 名前:デフォルトの名無しさん [2018/11/29(木) 16:11:55.77 ID:qd4rCcG0M.net] wwwww
752 名前:デフォルトの名無しさん [2018/11/29(木) 19:19:50.88 ID:8tueZiBHa.net] そしてあらゆる言語が気に入らず、新たな言語がまた一つ作られるのであった。
753 名前:デフォルトの名無しさん [2018/11/29(木) 19:39:24.56 ID:qd4rCcG0M.net] − 世界には1,400もの競合するプログラミング言語があった − 「1,400だって!? バカげてる! み全ての用途をうまくこなす統一言語の開発が必要だ!」 「そのとおりだわ!」 やがて… − 世界には1,401もの競合するプログラミング言語があった − https://imgs.xkcd.com/comics/standards.png
754 名前:デフォルトの名無しさん mailto:sage [2018/11/29(木) 20:23:55.28 ID:DaeVxseX0.net] >>753 男女の仲違いでもう2個増えるんだろ?
755 名前:デフォルトの名無しさん mailto:sage [2018/11/29(木) 20:25:46.41 ID:dRsmoy+za.net] 新しいのを作るんじゃなくて既存のを潰さないとな
756 名前:デフォルトの名無しさん [2018/11/29(木) 20:45:38.03 ID:C+POVdju0.net] (中二なんかな・・・)
757 名前:デフォルトの名無しさん mailto:sage [2018/11/29(木) 21:43:22.71 ID:Msn7clch0.net] 中二だろうがなんだろうが良いソフトウェアを作ってくれればそれでいい。
758 名前:デフォルトの名無しさん [2018/11/29(木) 22:17:13.73 ID:C+POVdju0.net] >>757 そおやってすぐ他人に頼ろうとするからいつまでたってもクズなんやおまえ
759 名前:デフォルトの名無しさん mailto:sage [2018/11/30(金) 01:40:39.33 ID:ZZJKHSVT0.net] ワロタ
760 名前:デフォルトの名無しさん [2018/11/30(金) 08:21:31.28 ID:ShAjvwZw0.net] 目的を見失ってるよね 道具であるはずの言語そのものを作り出すってのは だからって、なんでもアセンブラってわけにもいかないが
761 名前:デフォルトの名無しさん [2018/11/30(金) 09:15:03.33 ID:vx8Iixcxa.net] タイヤは永遠に発明され続ける。
762 名前:デフォルトの名無しさん mailto:sage [2018/11/30(金) 09:32:04.72 ID:n+1J2GMZa.net] (車輪じゃね?)
763 名前:デフォルトの名無しさん [2018/11/30(金) 09:38:04.79 ID:vx8Iixcxa.net] あ、そうか。まあどっちでもいいが。
764 名前:デフォルトの名無しさん mailto:sage [2018/11/30(金) 09:40:18.92 ID:5+dLrTA80.net] 現代だって刀鍛冶とかいるじゃん
765 名前:デフォルトの名無しさん mailto:sage [2018/11/30(金) 09:53:55.88 ID:pEng5xY00.net] 発明、改良と生産は違う タイヤ、車輪で行われてるのは、発明ではなくて生産 発明こそ行われなくとも、小規模な改良は続いている 刀鍛冶も生産だろう。改良している人がいるのかは知らんが。 様々なデザインの洋服など、改良しているわけじゃないが 新しいものを作るっていうのはなんというべきだろうね 生産なんだが古い、新しいという概念はある。 だけど好みの違いでしか無いので改良とも違う 多くのものは改良されて続けているが、改良するためには まず生産能力が必要。同じものを作れなければ改良はできないだろう
766 名前:デフォルトの名無しさん mailto:sage [2018/11/30(金) 10:02:51.33 ID:pEng5xY00.net] 今の言語は最高とまでは言えない。 いつしか高級言語への進化が止まって、 単なる改良しか行われなくなってしまった 高級言語を超える、超高級言語が必要 俺にはそのアイデアがあるが、なにぶん能力がないw 目的は、超高級言語の開発だが、そのためには まず言語が作れるようにならないといけないだろうな ちなみに超高級言語のアイデアとは、現在設計書として 自然文で書いてあるものをプログラム言語として 記述可能にしようというもの。今の言語はモジュールやクラス構造までは プログラム言語で記述できるが、プロジェクト全体の構造までは記述できない 例えば、Railsなどのフレームワークのmodelsやcontrollersといったディレクトリ構造は プロジェクトで決まっているにもかからわず、ドキュメントで書くしかない。 だからmodelsに置くべきものをcontrollersにおいたり、modelsではやっては いけないような処理をやることが出来てしまう。コンパイルエラーにも実行時エラーにもならない
767 名前:デフォルトの名無しさん mailto:sage [2018/11/30(金) 11:38:14.68 ID:n+1J2GMZa.net] 3行で
768 名前:デフォルトの名無しさん [2018/11/30(金) 12:29:51.33 ID:vx8Iixcxa.net] 超 高級言語が 必要
769 名前:デフォルトの名無しさん [2018/11/30(金) 12:30:21.78 ID:+/lt4tPpr.net] タイヤと 車輪は 同じもの
770 名前:デフォルトの名無しさん [2018/11/30(金) 12:47:31.33 ID:vx8Iixcxa.net] も う 止めよう
771 名前:デフォルトの名無しさん mailto:sage [2018/11/30(金) 13:04:32.40 ID:iEacaeBh0.net] 実は CASEツール です
772 名前:デフォルトの名無しさん mailto:sage [2018/11/30(金) 15:46:57.55 ID:ZZJKHSVT0.net] それずっと前にKnuthが実践してた文芸作譜と同じじゃね? そしてアレは超絶面倒な作業。
773 名前: mailto:sage [2018/11/30(金) 23:23:00.81 ID:MkfLpznc0.net] >>766 >高級言語を超える、超高級言語が必要 ちょっとワクワクしてしまいましたことを、ここに告白いたします
774 名前:デフォルトの名無しさん mailto:sage [2018/12/01(土) 01:32:04.95 ID:3WCvWAVjM.net] 言語に縛られてるから駄目なんだよ とか言ってみる
775 名前:デフォルトの名無しさん mailto:sage [2018/12/01(土) 02:53:09.42 ID:7CoKqMj50.net] 「縛られるのが好き」ってプログラマ、結構多いんですよ とか言ってみる
776 名前:デフォルトの名無しさん [2018/12/01(土) 07:47:52.11 ID:U3mK8vlPr.net] 下ネタはもっと堂々と言わな逆にいやらしく感じるで
777 名前:デフォルトの名無しさん mailto:sage [2018/12/01(土) 10:18:14.73 ID:Ly5JuDld0.net] 全部縛ってヤってなんぼだと思うんです。 とか言ってみる。
778 名前:デフォルトの名無しさん mailto:sage [2018/12/01(土) 10:47:37.07 ID:Km1sjdO20.net] お前らくだらない話ばっかり盛り上がるな
779 名前:デフォルトの名無しさん [2018/12/01(土) 12:34:48.97 ID:U3mK8vlPr.net] さほど盛り上がっとらんやろw 人と関われよw
780 名前:デフォルトの名無しさん mailto:sage [2018/12/02(日) 02:44:47.66 ID:+c90NOTB0.net] まあ 使える言語は多いほうが手広いわな
781 名前:デフォルトの名無しさん mailto:sage [2018/12/02(日) 17:31:01.53 ID:OYZHkh2Or.net] >>776 知ってる一つの言語でなんでもしようとしちゃう っていう意味かとおもてた
782 名前:デフォルトの名無しさん mailto:sage [2018/12/02(日) 18:30:06.74 ID:RWr+AACs0.net] 自由に安くやってが最も困る。
783 名前:デフォルトの名無しさん mailto:sage [2018/12/04(火) 18:22:49.34 ID:VVlGsdy50.net] find(1)ユーティリティの速度に関しての疑問なんだけど https://linuxjm.osdn.jp/html/GNU_findutils/man1/find.1.html#lbAO ここに 「検査 -name を -type の前に置いているのは、すべてのファイルに対して stat(2) システムコールを行う無駄を省くためである。」 とある。これは「find(1)は-nameのほうが-typeより処理速度が速い」ということを言っているよね。 実のところ手元ではfindが優秀すぎるのか知らんが-nameを-typeより前に書いても後に書いても速度に変化はなかった。 が 基本的にはfindで複数の条件を指定するときは-nameを先頭あたりに置いたほうがいいのかな。 findのソースコードを見てないので推測になるが-permや-newerもstat(2)を実行してるぽいので-nameより遅い筈。
784 名前:デフォルトの名無しさん mailto:sage [2018/12/04(火) 18:56:51.46 ID:bTQB60BC0.net] statが遅いと言うのも幻想
785 名前:デフォルトの名無しさん mailto:sage [2018/12/04(火) 19:07:42.58 ID:HBlgjyZNM.net] 最近のファイルシステムはreaddirでタイプが取得できるよ
786 名前:デフォルトの名無しさん [2018/12/06(木) 00:12:43.36 ID:pQ33EIUW0.net] >>783 linuxjm.osdn.jp/html/GNU_findutils/man1/find.1.html#lbAE -Olevel 1 これはデフォルトの最適化レベルであり、伝統的な動作に当たる。 式を並べ替えるとき、ファイル名にのみ基づいた検査 (たとえば、 -name や -regex) が先に実行されるようにする。
787 名前:デフォルトの名無しさん mailto:sage [2018/12/06(木) 09:10:09.33 ID:cC0kDT7D0.net] >>786 へえ!そうなんだ。 ってことはGNU/Linux使ってる限りは順番はどうでもいいんだな ありがとう。
788 名前:デフォルトの名無しさん mailto:sage [2018/12/06(木) 15:10:37.27 ID:cC0kDT7D0.net] 引数に一律にコマンドで操作を施したあと、それらをもう一度引数として扱うにはどうすればいいかな $ a.sh arg1 arg2 arg3 みたいに起動されたとして$1,2,3にはarg1,2,3が入ってる。 これを$(echo $1 | tr '[:lower:]' '[:upper:]')みたいなコマンド置換を使ってARG1,2,3みたいに変形させる。 問題はこの後にa.shの中の別のコマンドに somecmd "$@" のような形でARG1,2,3を与えたいってこと。 while [ $# -eq 0 ]とshiftを使う普通のやりかたではループを抜けた後に$@が空になってしまう。 どうにかして引数の構造を維持したいんだけども……。
789 名前:デフォルトの名無しさん [2018/12/06(木) 16:06:47.11 ID:59uVculK0.net] >>788 eval set -- $(printf ' "$(printf "%%s" "$%d" | tr "[:lower:]" "[:upper:]")"' $(seq $#))
790 名前:デフォルトの名無しさん mailto:sage [2018/12/06(木) 16:38:57.36 ID:cC0kDT7D0.net] >>789 ありがとう。
791 名前:デフォルトの名無しさん mailto:sage [2018/12/12(水) 21:07:46.42 ID:7+bnD1C/0.net] ここかどうかわからんのだけど、メールの添付ファイルのテキストCSV部分を切り出してDB格納しようと思ったら、 シェルスクリプトでヘッダから切り出すしかない?
792 名前:デフォルトの名無しさん mailto:sage [2018/12/12(水) 21:36:28.16 ID:xr4it+i10.net] そういう専用ツールがないんだったらそうだろうな
793 名前:デフォルトの名無しさん mailto:sage [2018/12/13(木) 19:34:10.52 ID:Nc8J2Ufn0.net] >>550 別件でググっていたら、言及しているドキュメント見つけた ${1+"$@"} で動かないシェルもあるようだ web.sfc.wide.ad.jp/~sagawa/gnujdoc/autoconf-2.59/autoconf-ja_10.html > 最も有名なシェルの移植性の問題の一つは,`"$@"'との関連です.位置に 依存する引数が無いとき, > POSIXでは`"$@"'を何もないことと 等価になっていますが,オリジナルのUnixバージョン7の > Bourneシェルはその代 わりに`""'として扱い,この動作はDigital Unix 5.0のようにそれ以降の 実装でも提供されています. > > この移植性の問題を回避する伝統的な方法は,`${1+"$@"}'を使用する ことです. > 残念ながら,この手法はMac OS Xでも使用されている,Zsh (3.x と 4.x)では動作しません. > Bourneシェルをエミュレートしているとき,Zshは `${1+"$@"}'で単語の分離を実行します.
794 名前:デフォルトの名無しさん mailto:sage [2018/12/16(日) 07:48:44.86 ID:AoQUSXZn0.net] Bashってシングルクォートの内部でない限りバックスラッシュでシングルクオートを直接エスケープできるんだな。 マニュアルにも書いてないけど他人のスクリプト見て発見した。 $ squo=\' $ echo $squo ' ↑こうできる。Bashは楽でいいなぁ
795 名前:デフォルトの名無しさん mailto:sage [2018/12/16(日) 09:07:44.57 ID:rkLF3tWt0.net] >>794 水を差すようで悪いがposixで規定されているから他のシェルでも同じになる
796 名前:デフォルトの名無しさん mailto:sage [2018/12/16(日) 09:55:51.26 ID:0jv0YmXXa.net] なぜそれを特別に思ったのかわからんけど他は出来なかったりするの?
797 名前:デフォルトの名無しさん [2018/12/17(月) 19:35:33.43 ID:41bJ0tdVa.net] \ はエスケープだし使う事はあるので特に目新しい感じはしない。 sambaでファイルサーバ作ってWindowsからもファイルが書かれるような状況だとファイル名にスペースだの括弧だの普通に入れられてLinuxでログインしている端末からだとエスケープせざるを得なかったりする。 俺の場合はそれで一文字だけエスケープはよく使う。
798 名前:デフォルトの名無しさん mailto:sage [2018/12/17(月) 21:17:48.10 ID:lO+98ZHR0.net] Linuxで普通にファイル名にスペース入れられるんだから sambaとかwindowsは全く関係ないけどね
799 名前:デフォルトの名無しさん mailto:sage [2018/12/17(月) 23:45:58.91 ID:LS1nUj7m0.net] CUI使いとGUI使いの違いだな CUIでわざわざくそめんどくさいスペースなんぞを好き好んでは使わない。GUIではふつーにわかりやすくもなるから使う、普通に入れるのはあたりまえ
800 名前:デフォルトの名無しさん [2018/12/17(月) 23:52:42.27 ID:oCmK2PVR0.net] めんどくさくないけど?エアプなんキミ?
801 名前:デフォルトの名無しさん mailto:sage [2018/12/17(月) 23:54:51.53 ID:faSovs330.net] 有志のコードに ファイル名が空白入りだと事故るものがあったような? 自分は 安全とって全部アンダーバー変換しておく
802 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 00:10:28.35 ID:DLVg/wUV0.net] >>800 めんどくさいめんどくさくないはまあ人次第だけどな CUIでなんやかんやキーボード打ってる時に、エスケープしたり"や'囲ったり、そもそもスペースはもろもろコマンドでデリミッターだったりで、めんどくさいと思うけどな 人次第ではあるが、そゆのが想像できなずにエアプと言えるのがエアプっぽいと思わなくもない
803 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 01:24:02.71 ID:2j/3pVMu0.net] >>801 有志って言ってもタダの素人だっただけの話じゃん
804 名前:デフォルトの名無しさん [2018/12/18(火) 03:02:35.05 ID:HuP+yDtL0.net] >>798 もちろんファイル名には / 以外は何でもありだが Linux だけ使ってると普通はあまりそういうファイル作らないじゃない。一々エスケープしなきゃならないしシェルスクリプトで扱いづらいし。 まあ趣味の問題ではあるけどな。
805 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 03:52:25.12 ID:aYYQx5Ta0.net] libreofficeから「報告書 2018-12-18」という名前で保存することの何が面倒なのか?
806 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 05:00:11.76 ID:CtnsxEVc0.net] うわあ
807 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 05:48:13.89 ID:aYYQx5Ta0.net] ファイル名にスペースが使えるOSが悪いんだって言いたいのかな?w
808 名前:デフォルトの名無しさん [2018/12/18(火) 06:17:30.36 ID:mQMHvFDr0.net] >>802 アルファベットや数字打つのとなんら変わらんけど? そもそもシェルには補完ゆうもんがあるんやでエアプさんw
809 名前:デフォルトの名無しさん [2018/12/18(火) 09:37:03.21 ID:92SsvGE7a.net] >>805 ああ。WindowsみたいにGUIメインで使ってるの?それだけだったら面倒じゃないかもね。
810 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 10:24:35.01 ID:H+ovSSRq0.net] >>808 なにをいいたいのかイミフすぎだな、プロフェッショナルwすぎて 補完時にもバックスラッシュ打たなきゃならんだろ?打たなくていい環境なの?そういう環境もあるんだよ なんかただ馬鹿にしたいだけのお人か?しょうもない
811 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 12:13:46.40 ID:bhmdNwABa.net] なんで自分以外みんな非効率って思ってるのここの人たち 最強は俺だから落ち着けよ
812 名前:デフォルトの名無しさん [2018/12/18(火) 12:15:53.17 ID:92SsvGE7a.net] Tabキー押すと自動で保管したり変換したりしてくれる場合は楽かも。 楽ってだけで見た目エスケープだらけの見辛い状態にはなるが。
813 名前:デフォルトの名無しさん [2018/12/18(火) 12:25:17.53 ID:Lulkb9OFr.net] >>810 はいはいエアプさんはそろそろお昼寝の時間でちゅよ〜w
814 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 15:34:29.41 ID:kLOm0zeN0.net] アホすぎなレスで笑うww
815 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 15:42:44.01 ID:DOEC5j1K0.net] こいつらプログラム言語はシェルスクリプトしか使ったこと無いんか? シェルスクリプトは珍しく引数の文字列をクォート(もしくはダブルクォート)で くくるのが必須じゃない言語だが他の言語は殆どクォートでくくるんだぞ "foobar" も "foo bar" も入力のしやすさに大差ないだろ エスケープが必要なのは \ 等であってスペースはエスケープ不要なごく普通の文字なんだが いつものことだが(シェルスクリプト以外の)経験の差を感じるよな
816 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 16:01:13.36 ID:kLOm0zeN0.net] 何をお怒りか存じませんが、括らなくてもいいから括らないのが普通になるんでございますよ。当然括るのが必須なら括るのが普通。シェルスクリプトでもスクリプトファイル書くときは変数展開では普通に括るし コマンド叩くときにはいつも括ってるの??
817 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 16:03:24.94 ID:kLOm0zeN0.net] >スクリプトファイル書くときは ああ、ワンライナーなんぞでもだな。ここんとこ間違い/不要
818 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 16:21:43.27 ID:DOEC5j1K0.net] >>816 > 何をお怒りか存じませんが、 わかってないのか? スペースが含まれてるファイル名に対応するのは プログラマとして当然の話だということだよ
819 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 16:24:38.45 ID:kLOm0zeN0.net] >>818 別にそれは普通だな。>>816 でそう書いているんだけど? そんな話じゃないぞ。自分の範疇でが主な話だよ?俺はな
820 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 16:28:29.69 ID:DOEC5j1K0.net] >>819 わかってないのに、途中から割り込んでくるなよ 最初からLinuxでもファイル名にスペースを入れるのは普通だって言ってるだろ sambaとかwindowsは全く関係ない
821 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 16:33:56.90 ID:kLOm0zeN0.net] >>820 >>815 で具体的に誰かになんて言ってないやん ああ、それに対しても>>799 だっただけどなあw また、>>818 と同じ意味で>>797 に対しても わかんねえかなあw経験を生かしてご理解ください
822 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 16:56:33.71 ID:DOEC5j1K0.net] アホすぎなレスで笑うww
823 名前:デフォルトの名無しさん [2018/12/18(火) 17:14:23.03 ID:92SsvGE7a.net] WindowsだとC言語とかでパスの区切りが \ になってて毎回 \\ と入れなきゃいけないのも面倒だな。 実は / でも大丈夫だったりはするが。
824 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 17:18:15.10 ID:1JLRyxNd0.net] 今はパスにスペース入れるのも普通だし、対応もできるけど トラブルのもとは根絶したいから、自分は使わない、それだけ
825 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 17:24:06.70 ID:kLOm0zeN0.net] >>822 ww ざんねんなこって。いろいろとw
826 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 17:31:06.24 ID:1JLRyxNd0.net] パスをコマンドの引数にする必要がある場合、 例えば、hogecommand --foo_option="filepath=[パス],otheroption=bar" なんていうのがある時、 パスにスペースが入っていると、コマンド自体がパースするときに一工夫がいる。 シングルクォートが使えるシェルならいいが、Windowsのように使えないものもあるから、 バックスラッシュなどでエスケープしたり、コマンドが以下の様な別の区切り文字を用意していたりする。 --foo_option=[filepath="/path/with space/",otheroption=bar] 対処方法がなかなか見つからないこともあり、面倒くさいので、 自分からすすんでスペースを入れようとは思わない。
827 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 17:46:09.05 ID:DOEC5j1K0.net] × パスにスペースが入っていると、コマンド自体がパースするときに一工夫がいる。 ○ コマンドの引数の形式を適当に決めると、パースするときに一工夫がいるようになってしまう。
828 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 17:50:36.86 ID:DOEC5j1K0.net] ちなみに気づいていないようだから言うと >>826 はパスにスペースが入っていると困る問題ではない hogecommand --foo_option="filepath=/path/with space/,otheroption=bar" ,でsplitして、○○=を消せばいいだけだから何も困らない この例で困るのは、パスにカンマが含まれている場合であって スペースではない
829 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 18:16:22.51 ID:1JLRyxNd0.net] >>828 ああ、わるい、オプションの階層が一段階足らなかった。 hogeコマンドが、別のライブラリ(foo)のオプションを呼ぶような場合に、 hogecommand --hoge_option=foo_option="filepath=[パス],otheroption=bar" hogecommand --hoge_option "--foo_option filepath=[パス],otheroption=bar" こんなパターンがあって、そのままではやはりパースに一工夫が必要で面倒くさい。 ちなみに、上はmpv、下はyoutube-dlで使われている。
830 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 18:19:12.99 ID:DOEC5j1K0.net] 別のコマンドを呼び出すなら、別のコマンドにそのまま渡せばよかろう? hogecommand --foo_option="どんな内容でも" betsucommand どんな内容でも はい。おしまい
831 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 18:24:29.26 ID:n1+CJQ+h0.net] ちなみにファイル名により柔軟なのはWindowsよりも寧ろLinux(というかUnix系)だぞ。 Windowsは「con」とか「aux」とかも駄目だしバックスラッシュやコロンが含まれても駄目。 Unix系のOSは「\0(空文字)」と「/(スラッシュ)」だけが不適合で,あとは全ての文字をファイル名として 使用できる。
832 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 18:35:11.65 ID:/rMHixhE0.net] 開業コードもつかえるのはまれにネタになる
833 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 22:33:16.76 ID:2j/3pVMu0.net] >>810 今時はWindowsのコマンドプロンプトだって必要に応じてエスケープしてくれるぞ?
834 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 22:34:34.10 ID:2j/3pVMu0.net] >>831 \0も使えたと思うが... 消せなくなったりするけどさ
835 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 22:57:59.19 ID:uKKjGArEH.net] >>834 消す前に作れねーだろ
836 名前:デフォルトの名無しさん [2018/12/18(火) 22:59:29.33 ID:mQMHvFDr0.net] 消せるわこのエアプw
837 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 23:44:21.87 ID:n1+CJQ+h0.net] 名前に\0を含むファイルは作れないと思うけど。 少なくともPOSIXでは禁止されているし,pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_170 ext4でも作成できない。 ……「エアプ」はどっちだろう。
838 名前:デフォルトの名無しさん mailto:sage [2018/12/18(火) 23:56:48.31 ID:DOEC5j1K0.net] 正直ファイル名に\0が使えようが使えまいが シェルスクリプトで\0が扱えないのでどうでもいい
839 名前:デフォルトの名無しさん [2018/12/19(水) 04:45:08.43 ID:gf1Tua9E0.net] エアプってなんなん?
840 名前:デフォルトの名無しさん mailto:sage [2018/12/19(水) 07:27:20.06 ID:+7lasSiAM.net] ¥x00
841 名前:デフォルトの名無しさん [2018/12/19(水) 12:42:42.59 ID:guVdMf63r.net] >>839 おまえらの事やんw
842 名前:デフォルトの名無しさん mailto:sage [2018/12/20(木) 00:17:43.13 ID:6pIAvd2J0.net] Airぷ
843 名前:デフォルトの名無しさん mailto:sage [2018/12/20(木) 00:39:10.52 ID:0M5ZFUn5M.net] for i in {0..255}; do touch "./hoge$(printf "\x$(printf "%02x" $i)")foo"; done
844 名前:デフォルトの名無しさん mailto:sage [2018/12/22(土) 13:28:39.38 ID:t1Sp89dZ0.net] エロ動画サーフィンで広告サイトが開いてしまったら、 デスクトップのシェルスクリプトにドラッグアンドドロップすることで そのサイトのIPアドレスをHOSTSファイルに追加する
845 名前:デフォルトの名無しさん mailto:sage [2018/12/22(土) 13:59:19.13 ID:aa5NQG9N0.net] なんていうことをしていたら、hostsファイルの行数が 数千行になってしまった
846 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 08:08:03.20 ID:W0WvAA710.net] sedだと簡単に動く一文字以上の半角スペースを一文字スペースに置換するコレ echo "$strings" | sed -E 's/ {1,}/ /g' bashだとどーしてもうまく動かず次のように[]で囲ってやるとなんとか全連続スペースじゃなく一部 だけが置換できた。 ${strings// [ \{1,\}]/ } それ以上どうしようもなかったので、次のような関数を作った function Rep2One(){ local str=$1 local chr=$2 while : do str="${str//$chr$chr/$chr}" if [[ ! $str =~ $chr$chr ]]; then break fi done echo "$str" } srings=`Rep2One "$strings" " "` これで任意の2文字以上の連続を1文字に置換できたが、 sedみたいに一発でかっこよく記述できない? 至る所でbashからsedやgrep起動してたんだが、 bashのなかでできることはbashだけでやった方が大分速いことがわかったんで なんとかbashの正規表現だけでやりたい
847 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 08:14:34.77 ID:yUjQiXy10.net] なんでそんなに正規表現に拘るのかわからん #!/bin/sh while IFS= read -r line; do echo $line done
848 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 12:09:04.04 ID:W0WvAA710.net] >>847 おお、早速 thx 単に知らなかっただけです。 任意文字の繰り返しを1文字に置換したいときはどーするんですか?
849 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 12:13:13.41 ID:W0WvAA710.net] 結局、bashの正規表現は2文字以上全置換を記述できないんですかね? bashの正規表現でわからないことがいろいろあるんですよ。 文頭置換したいとき'^'に相当するのはどう書くかとか?
850 名前:デフォルトの名無しさん [2018/12/23(日) 13:58:44.05 ID:nNQ759QC0.net] ま、とりあえずこれでも見ろ。 bashの変数内文字列置換まとめ https://qiita.com/aosho235/items/c36568830a8d47288284
851 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 14:09:56.35 ID:yUjQiXy10.net] >>848 IFSで指定しろ
852 名前:デフォルトの名無しさん [2018/12/23(日) 14:18:28.55 ID:nNQ759QC0.net] でもってこれ。bash のパス名展開。 https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbBG この中に +(pattern-list) というのがある。 なので例えばこんなことも出来る。 a="a b c d" # ← 複数のスペースを適当に入れた文字列を a にセット b="${a//+( )/ }" # ← 全ての1文字以上のスペースを1文字のスペースに変換して b にセット
853 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 15:08:28.31 ID:eEMSqKaq0.net] >>848 ちょっと目的と違うかもしれんが trコマンドの-sオプションもお勧めだよ。 POSIXで定められているので汎用性高いし、あとawkやsedを使う方法より若干高速
854 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 15:10:20.98 ID:yUjQiXy10.net] 外部コマンドを呼び出している以上 遅くなることに変わりはない
855 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 16:10:20.07 ID:eEMSqKaq0.net] 「awkやsedを使う方法より」
856 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 16:20:58.12 ID:yUjQiXy10.net] 「awkやsedを使う方法より若干高速 と言ったって外部コマンドを呼び出している以上 遅くなることに変わりはない」
857 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 16:57:53.53 ID:snCJQSVKM.net] awkやsedより遅いの?違うでしょ?日本語勉強しなよ。
858 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 17:02:15.89 ID:yUjQiXy10.net] bashだけでやるより遅いって話をしてる所に awkやsedよりも早いって言うことに意味がないと言ってる
859 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 17:12:57.88 ID:jos3UrGDa.net] まーた始まったよ(パリポリ
860 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 17:15:39.87 ID:YhyQsVDP0.net] )ソ) ッλ ノ(.,ノ) (゙- ..::.::. . ( (ソ. .彡⌒ミ. )ソ) ).::'; (´・ω・`) ス ( ソ .::;';'(つ ⊂)::;';'`〜、. ( :;';' |__∧_| ::;';' ヽ) `'~`'''`'`'`~'~~`~~'`'`''''"`'`'`''`''''"`'``'~`''`'~`'''`'`'`~ さ あ 禿 げ 上 が っ て ま い り ま し た
861 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 17:15:41.10 ID:yUjQiXy10.net] しーかたないねー(パリポリ
862 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 17:46:37.96 ID:eD9rxy9Z0.net] あ?やんのかこら
863 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 17:47:26.96 ID:GvU/LsqE0.net] >>857 質問者の意図を汲み取りましょうw
864 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 20:07:54.91 ID:0+7qAFFh0.net] 今時汲み取り式なんて・・・
865 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 20:36:12.95 ID:W0WvAA710.net] >>852 ほんと感謝します ようやくすっきりしました。 そのサイトにも行き着いていたのですが、ちゃんと読めていませんでした ありがとうございました。 >>853 trコマンドは知ってますし、今回も使いました。 今回の処理は結局、全処理c++で書き直したりもしてるんで、 他のツール使えばできるとかの情報は全く必要なく あくまでもbash単体で処理するにはどうするかということでここで質問しました bashでの正規表現に関する情報があまりなくて、 20年ほど前に買ったオライリーのbash本にも正規表現の記載が一切なく bashの正規表現に制限があるならそれを教えてもらうことも目的でここで聞きました。
866 名前:デフォルトの名無しさん mailto:sage [2018/12/26(水) 09:38:30.84 ID:GigxKnwz0.net] watchで表示更新時間ごとに変数の加算は出来ませんか?
867 名前:デフォルトの名無しさん mailto:sage [2018/12/26(水) 11:17:37.79 ID:SKc2oSlY0.net] 無理。自分でwatchを実装しろ
868 名前:デフォルトの名無しさん mailto:sage [2018/12/26(水) 11:19:29.41 ID:SKc2oSlY0.net] 訂正 自分でシェルスクリプト版watchを実装しろ
869 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 08:42:00.02 ID:btIksil/0.net] 区切り文字を指定して文字列を分割するときに 区切り文字が一種類の場合はcut(1)とかを使うし 区切り文字がBREで表わされるような場合はAWKを使うけど 各フィールド毎に特定の区切り文字があるような時はどうすればいいかな。 今やろうとしていることはISO 8601形式の日付を空白区切りに分解することで 2018-12-30T08:36:50+09:00 ↑こういう文字列を 2018 12 30 08 36 50 + 09 00 ↑こういう空白区切りに分解したい。 その為には「第1,2,3フィールドはハイフン,第4フィールドは文字T,第5,6,7フィールドはコロンで分割する」 っていう具合の処理を考えないといけない。 正直,sedを使えばいいんだけど,もうちょっとスマートな方法があれば教えてほしい……。 sedだと↓ sed -n -e 's/\([[:digit:]]\{4\}\)-\([[:digit:]]\{2\}\)-\([[:digit:]]\{2\}\)T\([[:digit:]]\{2\}\):\([[:digit:]]\{2\}\):\([[:digit:]]\{2\}\)\([+-]\)\([[:digit:]]\{2\}\):\([[:digit:]]\{2\}\)/D:\1\2\3\4\5\6\7\8'"'"'\9/1p' ↑こんなことになるw
870 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 10:20:55.12 ID:Ob5186rT0.net] >>869 入力形式が確定しているから単純化して sed 's/[-+:T]/ /g' とかはどう?
871 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 10:23:20.84 ID:Ob5186rT0.net] >>870 書き込んでから気づいたがこれだと+の周りが処理できないな
872 名前:デフォルトの名無しさん [2018/12/30(日) 10:40:37.85 ID:btIksil/0.net] >>871 そうなんだよね…… もし+に特殊な処理をしないならば tr '-+:T' ' ' で一発なんだけど、できないんだよ。
873 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 10:53:56.67 ID:MMB+AHvh0.net] sed 's/+/ + /;s/[-:T]/ /g' では??
874 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 11:01:57.94 ID:/wKH6dhf0.net] >>869 #!/bin/sh t="2018-12-30T08:36:50+09:00" IFS="-T:+" set -- $t echo $1 $2 $3 $4 $5 $6 + $7 $8
875 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 11:08:31.89 ID:MMB+AHvh0.net] タイムゾーンはマイナスありか
876 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 11:25:42.74 ID:MMB+AHvh0.net] sed 's/-/ /;s/-/ /;s/\([+-]\)/ \1 /;s/[:T]/ /g' なんか泥臭いけど
877 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 11:28:51.37 ID:/wKH6dhf0.net] #!/bin/sh t="2018-12-30T08:36:50+09:00" IFS="-T:+" set -- $t case ${t%?????} in *+) echo $1 $2 $3 $4 $5 $6 + $7 $8 ;; *-) echo $1 $2 $3 $4 $5 $6 - $7 $8 ;; esac
878 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 11:32:49.36 ID:/wKH6dhf0.net] date -d "2018-12-30T08:36:50-09:00" "+%Y 略" (飽きた)
879 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 11:48:16.88 ID:btIksil/0.net] >>874 それだとアメリカとかのタイムゾーン-03:00に対応できなくね?
880 名前:879 mailto:sage [2018/12/30(日) 11:49:02.96 ID:btIksil/0.net] >>877 すまん。ちゃんと対応してくれてた。
881 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 16:00:37.71 ID:yEx+bcWd0.net] GNU grep の場合 $ echo '2018-12-30T08:36:50+09:00' | grep -Po '([0-9]{2,4}|(?<=:[0-9]{2})(\+|-))' | xargs
882 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 16:49:11.50 ID:btIksil/0.net] >>881 すげー。 でも後から自分でデバッグできなさそうなのでやめておくw
883 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 18:51:33.10 ID:iF2NHAVN0.net] t="2018-12-30T08:36:50+09:00" echo "${t:0:4} ${t:5:2} ${t:8:2} ${t:11:2} ${t:14:2} ${t:17:2} ${t:19:1} ${t:20:2} ${t:23:2}"
884 名前:デフォルトの名無しさん mailto:sage [2019/01/01(火) 13:16:40.82 ID:0CXB5czV0.net] :digit:より0-9のほうが打件数少ないのはなんなんだ
885 名前:デフォルトの名無しさん mailto:sage [2019/01/01(火) 13:57:25.01 ID:WRhsD0vEa.net] 単に意味を優先した表現方法があるだけやろ
886 名前:デフォルトの名無しさん mailto:sage [2019/01/05(土) 11:12:13.83 ID:dE0KuiGH0.net] 本当に一部のシステムでの話だけど [:digit:]がロケールの数値表現にも合致する場合がある 「1」とか。
887 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 14:59:50.50 ID:01rSRjtda.net] test.txtの内容が hoge fuga puge で、 sed -i -e s/hoge\n// test.txt とやったのに『hoge(改行コード)』が消えてくれないたすけて test.txtの一行目を削除 → 2行目が一行目に、 みたいにトコロテンしたい
888 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 15:08:57.37 ID:01rSRjtda.net] 自己解決・・・ sed -i -e ':a;N;$!ba;s/hoge\n//' test.txt ってやったらできました・・何この呪文。。
889 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 15:30:19.88 ID:RynyI9pj0.net] sed -i -e '/hoge/d' test.txt じゃダメなん?
890 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 15:36:38.32 ID:01rSRjtda.net] >>889 で、できました それ使っていきます ありがとうございました
891 名前:デフォルトの名無しさん [2019/01/07(月) 19:03:53.04 ID:fnTlHl64a.net] grep -v もよろしく
892 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 19:52:44.45 ID:fRqqYmWxa.net] 一行目を消したいのかhogeを消したいのか
893 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 19:54:56.69 ID:52D4hsE60.net] 全部消したい。何もかも
894 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 20:31:04.88 ID:Opohu4pM0.net] 要らない 何も 消してしまおう
895 名前:デフォルトの名無しさん [2019/01/08(火) 09:33:22.38 ID:LJT6VvGba.net] そんなあなたに rm
896 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 04:57:31.17 ID:yVo/NDAD0.net] ネットワーク通信(特にhttpクライアント)に関するコマンドって 大きくwgetとcurlとfetchなんかがあるけどもみんなはなに使ってます? 大抵のLinuxにはwgetが、MacとWindowsにはcurlが初期搭載されてるので そのどっちかだとは思う。
897 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 09:31:04.31 ID:d7ZwxpvN0.net] スクリプトの場合はオプションが面倒くさくいのは関係ないから 個人的には自由度の高いcurl一択かな 直接コマンド打ってダウンロードするときはaria2cを使ったりする
898 名前:デフォルトの名無しさん [2019/01/10(木) 10:00:22.11 ID:jQehovm3a.net] 昔から使ったていたというだけの理由で wget
899 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 11:40:29.86 ID:DS8wsvUQ0.net] wgetが入っていればwget、curlが入っていればcurl 両方入っているなら、ファイルにしたいときはwget、出力結果を見たいときはcurl
900 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 16:56:41.32 ID:jhx89QXs0.net] PowerShell では、Invoke-WebRequest のalias が、curl, wget get-alias (gal) で表示できる
901 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 18:31:34.76 ID:yVo/NDAD0.net] >>900 え、それつまり $ curl ... としたときのオプションは実はcurlのじゃなくて Invoke-WebRequestに向けたオプションってこと? そんなに互換性があるオプション体系だとは思わないのだけど なぜエイリアスにしてあるんだろう……。
902 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 20:31:11.75 ID:UUY7OixDM.net] 呼ばれたときの名前によって処理を切り替えてるんじゃないの?知らんけど
903 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 22:34:40.34 ID:qJAnpZ0RM.net] cURL以外使わん
904 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 03:35:07.12 ID:tAdCcMWb0.net] bashで「=」という文字をコマンドにすることってできますかね。 「=」を「bc -l <<<」に割り当てて $ = '4 / 5.1' みたいな簡易電卓として使いたいなと思ったんだけど alias =='bc -l <<<'やfunction = { bc -l <<< "$1" }はダメ……。 一応GNU Bashの「コマンドに使っていい文字」ではあるんだけど、使えない
905 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 05:36:31.36 ID:YPYEBq870.net] =というファイル名のシェルスクリプト書いたら? bashもいらんし #!/bin/sh echo "$@" | bc -l
906 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 08:51:55.60 ID:EZ88NWNa0.net] function = { bc -l <<< "$1"; } ってすればできる(セミコロンが必要)