なぜシェルスクリプトに「会社の将来を賭ける」べきではないのでしょうか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/17231

  •  08-06-2019
  •  | 
  •  

質問

私は見ていました http://tldp.org/LDP/abs/html/why-shell.html そして次のような衝撃を受けた。

シェルスクリプトを使用しない場合

...

  • 会社の将来を賭けたミッションクリティカルなアプリケーション

なぜだめですか?

役に立ちましたか?

解決

シェル スクリプトの利点を活用する場合は、シェル スクリプトを使用しても問題ありません。私の会社にはクラス 5 のソフト スイッチがいくつかあり、通話処理コードとプロビジョニング インターフェイスは Java で書かれています。他のすべては KSH に書き込まれます。つまり、バックアップ、プルーニング、ログ ファイルのローテーション、およびすべての自動レポート用の DB ダンプです。私は、これらすべてのサポート機能は、コールパスには直接関係していませんが、ミッションクリティカルであると主張します。特にDBインタラクション。DB インタラクション コードに問題が発生し、コール ルーティング テーブルがダンプされた場合、廃業する可能性があります。

しかし、シェル スクリプトはこのような作業に最適な言語であるため、何も問題が発生することはありません。これらは小さく、よく理解されており、ファイルの操作が強みであり、安定しています。KSH09 はバイト コードにコンパイルする必要があると誰かが考えているため、KSH09 が完全に書き直されるわけではないため、安定したインターフェイスになります。率直に言って、Java で書かれたプロビジョニング インターフェイスはかなりの頻度で不安定になりますが、シェル スクリプトが混乱したことは私の記憶にある限り一度もありません。

他のヒント

この記事は、シェル スクリプトを使用しない理由の非常に優れたリストを指摘していると思います。あなたが指摘した 1 つのミッション クリティカルな箇条書きは、他のすべての箇条書きに基づいた結論に近いものです。

そうは言っても、ミッション クリティカルなアプリケーションをシェル スクリプトで構築したくない理由は、たとえ他の箇条書きがどれも当てはまらないからだと思います。 今日, 、一定期間にわたって保守されるアプリケーションはすべて、 進化 ある時点で、これらの潜在的な落とし穴の少なくとも1つに噛まれるという点まで....そして、それを完全にやり直すことなく、実際にそれに対してできることは何もありません。修正を加えて....最初からもっと工業用の強力なものを使用してほしかった。

明らかに、これは私にとってはちょっとした藁人形です。私はなぜ「ミッションクリティカルなアプリケーション」ではシェルスクリプトを避けるべきだと人々が信じているのかに非常に興味がありますが、説得力のある理由は思いつきません。

たとえば、私は SQL*Plus を使用して Oracle データベースと対話するいくつかの ksh スクリプトを見てきました (そして書きました)。残念なことに、クエリでバインド変数が使用されなかったため、システムは適切にスケーリングできませんでした。シェルスクリプトに対して一撃を加えますよね?間違っている。問題はシェル スクリプトではなく SQL*Plus にありました。実際、SQL*Plus をデータベースに接続してバインド変数を使用する Perl スクリプトに置き換えると、パフォーマンスの問題は解決しました。

宇宙船の飛行ソフトウェアにシェル スクリプトを組み込むのは悪い考えであることは容易に想像できます。しかし、Java や C++ も同様に不適切な選択肢かもしれません。最善の選択は、その目的で通常使用される言語 (アセンブリ?) です。

実際のところ、Unix のいずれかを使用している場合は、起動がミッション クリティカルであると考えて、ミッション クリティカルな状況でシェル スクリプトを使用していることになります。シェルが特に得意ではないことをスクリプトで実行する必要がある場合は、その部分をサブプログラムに入れます。脚本を丸ごと捨てることはありません。

スクリプトはコンピューター プログラム以上でも以下でもありません。スクリプトがあまり洗練されていないと主張する人もいるでしょう。こうした人々は通常、スクリプト言語で高度なコードを作成できることは認めますが、これらのスクリプトは実際にはもはやスクリプトではなく、定義上、本格的なプログラムであると認めています。

何でも。

私の意見では、正しい答えは「状況による」です。ちなみに、これは、ミッション クリティカルなアプリケーションのコンパイルされた実行可能ファイルを信頼すべきかどうかという逆の質問に対する答えと同じです。

良いコードは良いものであり、悪いコードは悪いものです。Bash スクリプト、Windows CMD ファイル、Python、Ruby、Perl、Basic、Forth、Ada、Pascal、Common Lisp、Cobol、コンパイル済み C のいずれで書かれたものであってもです。

それは ない 言語の選択は重要ではないと言えます。 特定の言語を選択したり、コンパイルしたり、言語をコンパイルしたりするには、十分な理由がある場合があります。解釈(パフォーマンス、スケーラビリティ、機能、セキュリティなど)。しかし、すべての条件が同じであれば、私は、いつでも、愚か者が作成した同等の C++ プログラムよりも、優れたプログラマが作成したシェル スクリプトを信頼します。

企業の買収に役立つのはおそらくシェルスクリプトです の中へ 未来。プログラミングの観点から見ても、シェル スクリプトに委任した反復的なタスクを実行すると、多くの時間が無駄になることがわかります。たとえば、私はコマンド ラインの Subversion コマンドのほとんどを知っていますが、これらすべてのコマンドを 1 つのスクリプトにまとめて自由に実行できれば、時間と精神的エネルギーを節約できます。

他の何人かの人が言語が要因であると述べているように。覚えたくない短い手順やグルー プログラムについては、シェル スクリプトを完全に信頼し、頼りにしています。これは、バックエンドで bash を実行する Web サイトを構築するという意味ではありませんが、スケルトン プロジェクトの生成とパッケージ化とデプロイメントの管理に役立つように、bash/ksh/python などを確実に使用します。

この引用を読むとき、私は「」に焦点を当てます。アプリケーション「ミッションクリティカル」の部分ではなく「」の部分です。

私はこれを読んで、bash はアプリケーションを書くためのものではなく、スクリプトを書くためのものであると言っているように読みました。確かに、アプリケーションにはいくつかのハウスキーピング スクリプトがあるかもしれませんが、書き込む必要はありません。 critical-business-logic.sh なぜなら、そのようなことには別の言語の方がおそらく適しているからです。

作者は、質の高いシェルスクリプトの特定の側面に不快感を抱いていることを示しているのではないかと思います。たとえば、BASH スクリプトの単体テストを行うのは誰ですか。

また、スクリプトは基盤となるオペレーティング システムとかなり密接に結合しているため、これがマイナスになる可能性があります。

私たちは皆、OS と対話するための柔軟なツールを必要としています。これは、私たちが使用している OS との人間が判読できる対話であり、ドライバーでネジを締めるようなものです。コマンドラインは常に、 admin、programmer、または network のいずれかが必要なツールになります。彼らがPowerShell上で展開したウィンドウを見てください。

スクリプトは、機能するには +r と +x の両方のアクセス許可が必要であるため、特定のミッション クリティカルな機能の実装には不適切です。実行可能ファイルには +x のみが必要です。

スクリプトに +r が付いているということは、ユーザーがスクリプトのコピーを作成し、編集/破壊し、編集した Cuckoo's-Egg バージョンを実行できる可能性があることを意味します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top