シェルスクリプト総合 その34
■ このスレッドは過去ログ倉庫に格納されています
シェルスクリプトに関する総合スレッドです。 全般 ・荒しは無視しましょう。 ・丁寧な姿勢を心掛けましょう。 ・ネチケット(死語)を意識しましょう。 ・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。 シェルスクリプト総合 その33 https://mevius.5ch.net/test/read.cgi/tech/1584893550/ >>200 もとの話とつながってないぞ!w やりなおし! >>200 bashがインストールされてない環境はあるし実際によく使われている これ何の話だっけ。 「シェルが存在せずにPerlなどが存在する環境」 と 「シェルは存在するがPerlは存在しない環境」 の比較? いや,違うのかもしれないが, だとするとPerlがどうとかいう話がどこから出てきたのか分からんw これだろ? 172 名前:デフォルトの名無しさん[] 投稿日:2020/09/13(日) 21:07:19.31 ID:Z+zAoG6v [4/5] Linuxをインストールしたら、Perlもデフォルトでインストールされることも知らないんだろうな。 200 名前:デフォルトの名無しさん[] 投稿日:2020/09/15(火) 15:48:33.27 ID:Yms7aROo [3/3] >>196 デフォルトというのはLinuxだったら、bashシェルがインストールされて起動するということ。 perlもbashも入ってない環境が実際にあってよく使われている 極論が好きな人が居るねぇ root権限でのパッケージ導入を依頼するでもOS/ディストリビューションの選定提案をするでもVMを生やすでもコンテナを建てるでも何でも使える手は使って、自分の手段と環境の中で一番楽な地獄を使うのがいい 手を尽くしてもシェルスクリプト以外使えないか、手を尽くすのがダルいならそりゃそのままシェルスクリプトを使うしかないのはそれはそう ただ現代においてシェルスクリプトしかスクリプト言語を使えない上に新規導入もできない案件が多数派だし普通だよって言われると本当?って思うしその立場に同情するまである 最近はコンテナ系がはやって、ガチガチの最小構成も現実的やろ。 昔なら、とりあえずあれこれ入ってるし入れるのがふつうだったが。 >>197 1つの道具しか使えない人や1つの道具への依存度の高い人は その道具の必要性を下げる話や短所を指摘されると 無意識に自分の存在意義を否定された(攻撃された)と感じるので必死になる 特定の道具への精神的依存度の高い人たちが集まってる所ではよくあること コンテナ向け最小構成ならそれこそコンテナ生やせばいいじゃん… >>210 PerlコンテナとかPythonコンテナとかつくるの? 粗なの?密なの?w >>209 C++23で書こう!w しかし、今さら使いやすそうになってきたな。。。 >>209 ほんの数行で作れるシェルスクリプトの代わりに goを使うのは手間がかかりすぎる なんでもPython、なんでもPerl、なんでもGoっていうのは 単に勉強したくないだけなんだろうなって思ってる Goがやろうとしてる「どこでも動く!,依存性最小!」って それまさにPOSIXシェルが数十年前から実践してることなんだけどねw YouTube で有名な雑食系エンジニア・KENTA は、 初心者が進む道を、サーバー側言語のRuby → Go を王道としてる この2つ以外は、出てこない GUI 系は、画面の手直しなどで、工数がかさむ。 C#, dot.net などのWindows 系は、いらない。 Java などの土方系も、いらない。 Elixir, Rust は、普及へのchasm・溝を超えられなかった 言語よりも、Docker, Kubernetes, AWS などの、サーバー構築・新規案件を重視する。 上流工程・新規案件の方が、価格交渉力が強いから >>208 なるほどね〜 コンプレックスの裏返しみたいなものか 「シェルスクリプトで書いていたもの」を他の言語に 置き換えることで楽になることなんてないと思っている ※最初からシェルスクリプトで書いてないものの話ではない >>211 単芝生やしてるけどそれこそDockerHubにPythonのOfficial Image普通にあるよ 正直お互い想定してる状況が違い過ぎてるような気もするが 1. PythonやPerlが入ってない環境がある 2. シェルスクリプトで実現できる 3. PythonやPerl入れればいいじゃん! 4. PythonやPerlで書き直す 5. コードがシェルスクリプトよりも面倒になってる ほとんどがこれ シェルスクリプトで実現できることを 他の言語で書いたら余計面倒になる 面倒になるのに他の言語で書こうとするやつは 単に(効率的な)シェルスクリプトを勉強したくないだけ はしゃいでるところに水を差して悪いけどシェルスクリプトに必要な心得ってなんですかね? 素人ながらとりあえず動く物は作れたけどifだらけのクッソ汚いコードなんで修正したい オプションもgetopts知らずにifと[[でなんとかしてる bashの基本は押さえたけどLinuxの常識までは網羅できてないんで ifだらけだからクソ汚いってことにはならない もしキレイなコードとやらを知ってるのであれば それをシェルスクリプトでやればいいだけ >>219 そりゃああるやろ。w あるからなんなの? コンテナのまま実運用で使うの? ほんとに必死だね よほどコンプレックスが強いんだろうな シェルスクリプトに固執しないとダメな状況ってそうそうないだろうに シェルスクリプトに固執っていうか、シェルスクリプトが最善な場合に シェルスクリプトを使うってだけだよね >>224 スレタイが読めないの?w どっちが固執してるんだか。。。 >>221 入門UNIXシェルプログラミングという名著を読めばよい。 >>226 シェルスクリプトと、コマンド、外部プログラムの呼び出しはシェルスクリプトではないからな? シェルのスクリプトだから、シェルスクリプトの構文だけの話をすると、このスレは過疎化すると思うぞ。 だからといって外部コマンドのオプションやら文法の話をしたって意味ない そういうのはmanページ見ろで終わる話 シェルスクリプトにこだわることの是非はともかく, このスレに住み着くのは理があるわけだけど, 一方でPythonやRubyに固執している人が このスレに居座りつづける理由が不明。 このスレはシェルスクリプトのことを話すスレなんだから, Perl,Python,Ruby,Goなんかにこだわってても ストレス溜まるだけだと思うんだけど……。 しかも不毛だしw >>229 過疎化してなにか問題あるか? シェルスクリプトの構文で質問がある場合は ageればいいだけだし, 技術系のスレは勢いがなくても一定数の閲覧があるんだから それで全く問題ない。 もしかしてなんJとかその辺りと同じような考えで 「過疎化する」=「悪」みたいに捉えちゃってる? シェルスクリプトとPythonやRubyの使い方は全く違っていて シェルスクリプトの代替にはならないんだよ だってPythonやRuby言語がシェルになるかい? そういうのもあるみたいだけど使わないだろ lslの代わりにPythonやRubyの関数を使えってことだよ やるかい? シェススクリプトはそういう手作業の操作をスクリプトにまとめたもので 「手作業の操作」そのものであることに価値があるんだよ × lslの代わりにPythonやRubyの関数を使えってことだよ ○ ls -alの代わりに シェルスクリプトを使わないほうがいいケースや使うべきでないケースを判断出来ないようなやつは技術力が低くて使えない だからリアルでは軽んじられる その反動がネット上でのマウンティング合戦 不毛なマウンティング合戦を繰り返すスレを見たらリアルでは相手にされない人達だと思って反面教師にしつつその技術への依存度を下げるといい >>235 シェルスクリプトを使ったほうがいいケースや使うべきであるケースを判断出来ないようなやつは技術力が低くて使えない だからリアルでは軽んじられる その反動がネット上でのマウンティング合戦 不毛なマウンティング合戦を繰り返すスレを見たらリアルでは相手にされない人達だと思って反面教師にしつつその技術への依存度を下げるといい >>223 当然その他個別に必要な要素はDockerfileに書き出すけど、実運用でコンテナを使えるのがDockerHubやオーケストレーションツールを含めた現代コンテナ運用の強みだし革新性だと思ってるよ なんていうか「シェルスクリプトの文法や仕様が嫌い過ぎてシェルスクリプト数行で済むものにも別の言語を導入して書こうとする1byteもシェルスクリプトを書きたくない人間」に対してシェルスクリプトの可搬性や有用性・必要性を説こうとしてる人と 「シェルスクリプトの文法や仕様でウッとなってしまう嫌な部分が出てくるような複雑さ・処理対象・処理内容の、シェルスクリプトで扱うのにある意味不適な案件がある人間」に対して別の言語や環境で扱うのも選択肢だよって説こうとしてる人が争ってる感 格言「すべての道は、Vagrant に通ず」 Homebrew が、何十年も他の言語で書かれないわけ つまり、システム構築運用は、できる限りRuby で書く。 シンプルなものに限って、シェルスクリプト このスレのおかげでシェルだけでWebサイト作れました! RubyやPythonなんて学ぶ価値無いですね >>235 PythonやRubyを使わないほうがいいケースや使うべきでないケースを判断出来ないようなやつは技術力が低くて使えない だからリアルでは軽んじられる その反動がネット上でのマウンティング合戦 不毛なマウンティング合戦を繰り返すスレを見たらリアルでは相手にされない人達だと思って反面教師にしつつその技術へ こうですか? 分かりません! いいかげん下らなくなってきたけど,ともかく 「シェルスクリプトにこだわるな! Python・Rubyを使え!」 という主張は同時に「Python・Rubyにこだわっている」わけなんだから, いくら「こだわり」をバカにしてマウント取ったところで, ものすごい勢いで自分に跳ね返ってくるだけっていうねw え、両方使いなよって主張じゃないの? そういうレスした本人じゃないから知らんけど >>237 > 「シェルスクリプトの文法や仕様でウッとなってしまう それってようするにオブジェクト指向言語にそまってて 関数型言語に抵抗があるやつと一緒なんだわ パラダイムが同じならそれもわかるけど、シェルスクリプトは異なるパラダイムなので 単に異なるパラダイムのものをつけつけられないだけ >>238 HomebrewのインストーラーをRubyからBashに書き直しました! https://itchyny.hate nablog.com/entry/2020/03/03/100000 > 将来的にmacOSデフォルトにRubyやPythonが含まれなくなる (参考リンク)。 こうなる >>237 シェルスクリプト自体に文句があるのはしゃあない(つーか、ないヤツはおらんやろw)が、全否定したらこのスレではただのあらしでしかない。 さらに、最近の一部のヤツはとくにバカっぽかったからな。 状況に応じて使う道具を変えなよって言われてるのに、PythonやRubyを持ち出して否定したがるのはそれらを使えないことへのコンプレックスが強いから どの技術でもその限界や短所を理解してないやつが多ければ要注意 シェススクリプトへの文句というより シェルスクリプトが改善されないことに文句がある 何年停滞してるんだ ハーバード大学には、Ruby on Rails の授業がある。 他の言語だと、数年以上遅れて、その間にシェアを取られてしまうから 他の言語では、複雑さが並みじゃないから、簡単に作れない。 かなりの費用・期間が掛かるから、そういうプロジェクトを起ち上げられない 例えば、Ruby以外のプロジェクトで、半年過ぎると取りやめになる。 サーバー側言語では、Ruby, Go しか使われない PythonとかRubyみたいな簡単な言語使ってる雑魚がイキってるのマジで笑える 例えば、Ruby の数値リテラルには、_ を含めることができる 1_000_000_000 # 1000000000 0xffff_ffff # 0xffffffff この機能がないと、下みたいに、コメントを書かないといけないし、確かめるのも大変 1000000000 # 1_000_000_000 Ruby では、こういうように、バグを減らす工夫をしている。 だから、こういうことを思いつく日本人は、smart だって言われる >>243 どこの誰の事を異なるパラダイムを受け付けられない人間としてるのか知らないけど、パラダイムが異なれば当然向き不向きがあるよね? その上で私は > シェルスクリプトの文法や仕様でウッとなってしまう嫌な部分が出てくるような複雑さ・処理対象・処理内容の、シェルスクリプトで扱うのにある意味不適な案件 っていう「シェルスクリプトのパラダイムに向かない作業」を話題の前提にしてる人が他の言語を提案してるんじゃないの?って話しかしてないのよ 「何らかの作業をシェルスクリプトのパラダイムに向かない作業だと感じるのは、そいつがパラダイムを受け付けないだけで不向きな作業だからではない」という可能性は間違いなくある ただ可能性はあるけれど恒真とは思わない 私がシェルスクリプトに向いてない作業はあると思ってるから もしあなたがシェルスクリプトに向かない作業なんてないと思ってるなら何も言わない この先は気持ちの問題なので ほとんどの人が「別にPythonでもRubyでもいいけど, そうじゃない選択肢としてシェルがある」というだけの話をしてるのに 「いまだにシェルを使ってるのは時代遅れ!」 「シェルにこだわるな!Python・Rubyを使え!(こだわり)」 となるのはなぜなのか。 あと一部の奴が「シェル最高!世の中にはこれしか要らない!」みたいな 主張をしてるのも問題。 >>250 PerlにもPythonにもC#にも、別の文字ならC++にもある。 Rubyがえらいわけではない。 もうすでにあたりまえ。 >>252 > あと一部の奴が「シェル最高!世の中にはこれしか要らない!」みたいな > 主張 どれ? 対比でそう返しただけじゃないの。 技術力のある人はシェルスクリプトの短所や限界をよく理解している Google曰く If you are writing a script that is more than 100 lines long, you should rewrite it in a more structured language now. https://google.github.io/styleguide/shellguide.html#s1.2-when-to-use-shell GitLab曰く we recommend staying away from shell scripts as much as possible. A language like Ruby or Python is almost always a better choice. https://docs.gitlab.com/ee/development/shell_scripting_guide/#avoid-using-shell-scripts >>255 全てに当てはまることだけど、理由が書いてないコーディング規約はクソ そういやユニケージで作られた例のシステム、ユニケージを捨てて 全部作り直したそうだな 同じディレクトリ内にある、yarn.js ファイルを呼ぶラッパーである、yarn ファイル・コマンド #!/bin/sh argv0=$(echo "$0" | sed -e 's,\\,/,g') basedir=$(dirname "$(readlink "$0" || echo "$argv0")") case "$(uname -s)" in Darwin) basedir="$( cd "$( dirname "$argv0" )" && pwd )";; Linux) basedir=$(dirname "$(readlink -f "$0" || echo "$argv0")");; *CYGWIN*) basedir=`cygpath -w "$basedir"`;; *MSYS*) basedir=`cygpath -w "$basedir"`;; esac command_exists() { command -v "$1" >/dev/null 2>&1; } if command_exists node; then if [ "$YARN_FORCE_WINPTY" = 1 ] || command_exists winpty && test -t 1; then winpty node "$basedir/yarn.js" "$@" else exec node "$basedir/yarn.js" "$@" fi ret=$? # Debian, Ubuntu では、node ではなく、nodejs elif command_exists nodejs; then exec nodejs "$basedir/yarn.js" "$@" ret=$? else >&2 echo 'Yarn requires Node.js 4.0 or higher to be installed.' ret=1 fi exit $ret ユニケージはシェルスクリプトじゃないからなぁ シェルスクリプトを使って作られたCOBOL用関数みたいなもん ユニケージを使った途端、シェルスクリプト言語から COBOL言語に開発スタイルが変わる シェルスクリプトを始めた頃は > usp Tukubaiは短期間低コストで企業システムを構築するエンタープライズ向けコマンド群。 > ユニケージ開発手法で利用するコマンド群であり、 https://uec.usp-lab.com/tukubai_man に便利なコマンドがあるんじゃないか?って思ったんだよ 実際に見てみたら完全にゴミ > ctail(1) ファイルの末尾n行を削って出力 例えばこれとかhead -n -10でいいじゃんとか > count(1) 同じキーの行数をカウント それをawkでやるのがシェルスクリプトでしょとか そういうのばかりで、 根底に CSVならぬ、空白区切りのファイル形式を使うという前提があって そのデータ操作するためのコマンド群でしかないことに気付いた ユニケージのコマンドに絶望した後 クソコマンドをまともにしてやろうと思ったが クソな理由はコマンドではなくデータ形式だったので どうしようもないというねw データ形式を空白区切り前提にしなければ、 通常のシェルスクリプトで使うコマンドを使うことになるが ユニケージのコマンドとは全く異なる仕様になる 直しようがない >>255 >a more structured language ↑ここがポイントだろうね ポイント? なんでそう思ったの? 根拠がないから具体的ではないだけ どうでもいいんですけど, シェルスクリプト以外の話題なら他所でやってもらえません? もちろんシェルスクリプトの存在論も含めて。 テンプレくらい読んでくれよな〜頼むよ〜 長々とどうでもいいこと書き綴ってスレ荒らしてたのお前じゃん >>264 わかる人にはわかる。 わからない人のほうがその理由を内省するべき。 ただ、Bashは関数と連想配列のおかげで、それなりの構造化はできてるな。 逆に言うと、よっぽどややこしいデータ構造を組むのでなければ、シェルスクリプトでも可、ってことか。w >>267 分かる人が理由を書くべきだろ こういう意味不明なこと言うから信用されないんやで まあ結局 「シェルスクリプトでおかしな書き方をするやつは Pythonで書こうがRubyを使って メタプログラミング() をしようが 下手な書き方をすることに変わりない」 ってことよね。 シェルスクリプトから○○言語に変更したってやつは 変更した結果どうなったのか、そのコードを見てみたいんだが シェルスクリプトで一体何をしていたのか? Pythonさえやっておけばシェルスクリプトやる必要ないってことじゃないですかやったー! Pythonの関数(特別に作られたものではなく標準関数)を使うという前提の シェルが作れるものなら作ってみて欲しいね Python以外でもいいけど >>268 べつに信用せんでもええで。w 相手にしないだけの話やから。 >>273 信用されないというのは「その他大勢の人から」という意味だよ >>268 の内容は俺がお前を信用しないという宣言じゃなくて その他の人に対して、お前は信用に値しないという宣言をしている >>267 POSIX準拠じゃないから使えないねw >>274 そんな個人的アホ宣言はいらんで。w 「その他大勢の人から」とか少数側が主張しても意味なんかあらへん。 bash特有の機能を使おうと思った時点で それはシェルスクリプトでやるべきことじゃないんだろうな もちろんちゃんとシェルスクリプトのスタイル(関数型)でコーディングするのは大前提 ようするにシェルスクリプトはPOSIX準拠の機能で十分なんだよ シェルスクリプトのスタイルは関数型! さすがシェルスクリプターの考えることは次元が違うぜ >>278 https://qiita.com/piroor/items/77233173707a0baa6360 ところで、「流入してくるデータを加工して返却する」「ステートレスな」処理が得意で、 「内部で複雑な状態を持つ必要のある」「ステートフルな」処理が苦手だというのは、 関数型言語にも見られる特徴です。14 そう考えると、シェルスクリプトで凝った事をしようとする人があまり多くないのも頷けます。 「関数型言語は難しい」と言われる事が多いですが、他の言語とパラダイムが違う言語だと思えば、 これまでのプログラミングのパラダイムに囚われたままでは理解が進まないのも当然です。 14. 実際、関数型言語が得意な人にこの説を披露してみた所、 「関数型言語というのはストリーム型のデータを処理するという所が キモ(なので、解釈としてそう外してはいない)」という感じの感想を頂きました。 ? 関数型Elixir は、map・パイプラインばっかり 元の要素を変更しない。 新たに要素を作りながら、変換していく >>279 ,280 関数型言語にも見られる特徴があることを関数型とは言わない 知らないなら関数型なんて書かずにパイプでつなぐスタイルとでも書いとけば恥かかずに済んだのにね 関数型言語と同様の特徴があるなら、関数型スタイルでいいだろw 関数型言語だって言ってないんだからさぁ > パイプでつなぐスタイルとでも書いとけば恥かかずに済んだのにね パイプ以外も関数型にみ見られる特徴があるので 関数型スタイルでいいだろw >>283 ダメ。 関数型は、結果を呼び出し側に戻すことに意義がある。 処理の流れも記述の形式も、むしろ何も似ていない。 もとの文で「特徴」と言っているが、カテゴリの基準にしていい意味ではない。 シェルスクリプトは、フィルタ型とかパイプライン型とか呼べばいいのでは。 > 関数型は、結果を呼び出し側に戻すことに意義がある。 結果を呼び出し側に戻すなんて、どの言語でも同じじゃん 正しく説明することすらできない程度なら語らないようがいいよ 墓穴掘るだけだから その理屈で言うなら C言語は「C言語型」だし Elixirは「Elixir言語型」だし F*は「F*言語型」だね。 言語使うたび,パラダイム増えるね♪ >>286 まともに理解することすらできない程度なんだね。w シェルスクリプトでは、関数式のように値を返すのではなく、パイプラインのように出力を流していくように考えよう、とリンク先は主張してる。 ステートレスでというほかの主張とあわせて一貫している。 うむ。 これは、たしかにわかりやすいな。 覚えておこう。 >>288 > シェルスクリプトでは、関数式のように値を返すのではなく、パイプラインのように出力を流していくように考えよう、とリンク先は主張してる。 > ステートレスでというほかの主張とあわせて一貫している。 まさに関数型の動作だねw 初心者でよくいるんだわ。関数を使うのが関数型だって思ってるやつ お前がそれだな シェルスクリプトは手続き型 他言語との一番の違いは処理の入力と出力が文字列に固定されていること 処理の合成を容易にした代わりに入出力に関わる部分で一般的な手続き型言語とは異なる作法が必要 その作法はプログラミングパラダイムというほど大げさなものじゃない >>290 アホには通じなかったか。。。 まあ、そんでええんちゃう。w >>293 理解力が足りへんもん。w ワイはおまえの先生やないからな。 しゃあない。 >>294 俺に説明しろって言ってないよ 他の人にわかるように説明しろと言ってる それがないから、他の人はお前のことを○○だと思う >>295 ほかのひとてだれやねん。w ま、アホの衆が集ったところで、知能が上がるわけやないからな。 通じひんもんは通じひん。 しゃあない。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる