この問題に対して再開できる提案/修正を探しています。これらの回答の多くは私にとって客観的に見え、正確に私が見つけたタイプの答えでした。
POSIXに関する4つの記事を読みましたが、答えが見つかりませんでした。今、POSIXが何であるかがわかりました。はい、私はすでに標準が何であるかを知っていますが、POSIX標準が今日でもなぜまだ関連しているのかわかりません。私が読んだ3つの記事の1つはリチャード・ストルマンとのインタビュー。その中で彼は言った。
セス:POSIX準拠のフリーソフトウェアプロジェクトを他のUnixシリーズシステムに移植するのは簡単ですか?
有効な値:そう思いましたが、1980年代に私はもはやソフトウェアをGNU以外のシステムに移植するのに時間を無駄にしたくないと決めました。 ...
セス:POSIXはソフトウェアの自由にとって重要ですか?
有効な値:基本的には違いはありません。しかし、標準化は私たちがフリーソフトウェアに向かってより速く進むのを助けます。これは1990年代初頭に達成された。...[強調私のもの]
彼の答えはGNUの観点から染まっていましたが、「POSIXはもはや関連していませんか?」という私の質問に答えているようです。
まず、私がこの部分に興味を持っている理由をより具体的に説明すると、次のようになります。この回答では、プロセスリダイレクトを使用することをお勧めします<(command)
。応答は次のとおりです。残念ながら、プロセスリダイレクトはPOSIX機能ではないため、すべてのシステムがそれをサポートしているわけではありません。
スクリプトが#!/bin/bash
。ウィキペディアによると、bashは「ほとんどのLinuxディストリビューションでデフォルトのログインシェルとして使用されました。」
しかし、この記事は言う「現在、Linuxは高コストのため、2つの商用LinuxディストリビューションであるInspur K-UX [12]とHuawei EulerOS [6]を除いてPOSIX認証を受けていませんでした。 。
だから私は考えるPOSIXの目標は移植性ですが、少なくとも私の経験では、私のスクリプトは次のとおりです。もっとbashで動作し、POSIXを無視すると移植可能です。逆の場合ではありません。
私の質問をもう一度申し上げると、なぜ作者はPOSIXコンプライアンスに集中するのに時間を費やす必要がありますか?
答え1
たぶん気にする必要はありません。知るPOSIX機能だけでなく、特定のシェルのみを使用します。
ただし、最終的に他のものを使用する可能性がまだあります。この場合、非標準機能について知っておくと便利です。おそらくあなたは一生の間Linuxで働いてきましたが、新しい$ DAYJOBを使用すると、まったく異なるシステムのシェルに入ります。
しかし、これが単にLinuxではないシステムであるという意味ではありません。組み込み/小型システムにはBusyboxのみがあり、デフォルトのash
シェルはBashよりも通常のPOSIX shに近いです。 (Busyboxにはhush
私がよく知らない別のシェルがあります。またこれがBashクローンであると疑われます。とにかく、小規模なシステムでは一般的に小さなシェルが必要です。これはおそらく機能が少ないことを意味する可能性があります。) (そしてUbuntu)彼らも非常に懸念していた。 Bashは非常に遅く、systemdが登場する前にシステムの起動にシェルスクリプトが多く使われていたので、デフォルトを別のAshベースのシェルであるDash/bin/sh
に。 (例えばLWN関連記事そしてダッシュUbuntu Wikiから。 )
場合によっては、機能が同じであるため、POSIX 操作を実行するのに費用はかかりません。私が考えることができるのは、[ a = b ]
代わりに使用する[ a == b ]
かi=$((i + 1))
、代わりに使用するのと同じ単純なものだけであることを認めます((i++))
。とにかくそのような状況が存在します。特別な特典なしで使用するの==
が一般的なようです。 ([[ .. ]]
vs。[ .. ]
は少し異なりますが、実際には違いがあります。)
これは、ローカル変数、配列、プロセス置換、文字列置換、およびスライス拡張を絶対に使用しないでください。むしろそうだと思います。非常に必要なときに便利です。世界中のすべてのシェルで機能していないことに気づくのは役立ちます。またはさらに悪いことは、同じように動作しないということです。
unix.SEへの回答を考えると、Webサイトのタイトルは「Unix&Linux」と呼ばれ、代わりにunix.stackexchange.com
そう呼ばれることに注意してくださいlinux.stackexchange.com
。したがって、Linux以外のシステムを念頭に置くことはある程度関連しています。そして私の考えでは、多くの長いユーザーがそれほど賢いと思います。 ;)
POSIXチェーンを離れてBashに依存したい場合は、zshの使用を検討することもできます。 POSIXとの互換性がはるかに低下するため、実際には多くの点でより健全になります。
答え2
POSIX以外の機能を使用してシェルスクリプトを作成するオプションがある場合は、その言語でスクリプトを作成することもできます。外のBourne シェル言語シリーズ。これらの言語はほとんどの場合、シェルよりも優れた人間工学的特性を持っています。たくさんより優れた人間工学的設計(私が遭遇した唯一の例外はTclとcshです)。
したがって、移植性が必要ない場合 - 関連するデザイン制約でない場合に/bin/sh
使用できる唯一のスクリプトソルバーです。確かにUnixのふりはすべてに存在します。シェルスクリプトを書かない。代わりに、より人間工学的な言語の1つを使用してください。
答え3
Bashスクリプトを書くときは、POSIXについて考えたことがないことを認めなければなりません。 Bashコードを書くときにそれを考慮したか、それを考慮しなかったのはよかったでしょう。
私の経験によれば、POSIXはCやC ++(または他のコンパイルされた言語)で移植可能なコードを書くときに非常に便利です。 WindowsでもPOSIX互換ライブラリを見つけることができます。それとも20年前には削除したかもしれませんが、C ++でWindows機能で使用できるものを得るために絶望的な戦いをした記憶があります。しかし、POSIX機能を使い始めたときに効果がありました。
Java、Python、bashなどの解釈された言語ではさまざまなプラットフォームに移植されているため、Windowsパス名などの機能を除いて、コードはすべてのプラットフォームで実行する必要があります。