ソフトウェアがインストールされているかどうかを(スクリプトから)検出するための最良の方法は何ですか?

iconoclast

私は以前、さまざまwhichなプラットフォーム(LinuxとSolarisvx。OSX)でコマンドからの出力が異なり、さまざまなシェルが問題に関与している可能性があることに不満を感じていましたtypeより良い代替案として提案されていますが、それはどれほどポータブルでしょうか?

過去に、私が遭遇しwhichたさまざまなユースケースの出力を解析して処理する関数を作成しました。それらは私が使用するマシン全体で機能するので、私の個人的なスクリプトには問題ありませんが、他の人が使用できるようにどこかに投稿するソフトウェアでは、これはひどく信頼できないようです。

考えられる例を1つだけ挙げると、マシンでbashとzshが使用可能かどうかをスクリプトから検出し、存在する場合はzshを使用して、zshが存在しない場合はbashを使用して、bashで十分なコマンドを実行する必要があるとします。特定のバグがないバージョン。スクリプトの残りのほとんどは、BourneシェルまたはRubyまたはその他のものである可能性がありますが、この1つの特定のことは、zshまたは最近のバージョンのbashのいずれかを使用して実行する必要があります(AFAIK)。

typeプラットフォーム間で利用できることを期待できますか?which特定のソフトウェアがインストールされているかどうかの質問に簡単かつ一貫して答えることができる他の代替手段はありますか?

(私が示した例に特に関連するアイデアも提供したい場合、それは素晴らしいことですが、私は主に一般的なケースについて質問しています:特定のものが特定のマシンにインストールされているかどうかを確認するための最も信頼できる方法は何ですか? ?)

Gilles'SO-悪であることをやめなさい '

21世紀では、特にbashまたはzshを搭載している可能性が高いマシンをターゲットにしている場合は、type利用可能であることを期待できます。(1970年代や1980年代初頭のように、非常に古いユニスには存在しませんでした。)何かを意味する出力を期待することはできませんが、その名前のコマンドがあれば、0を返すことを期待できます。それ以外の場合はゼロ以外。

which標準ではなく、実際には信頼性がありませんtype推奨される代替手段です。whereisと同じ問題を抱えてwhichおり、あまり一般的ではありません。whencekshとzshに固有です。

それが可能な場合は、コマンドの存在をテストし、その動作が妥当であるかどうかをテストする方が信頼性が高くなります。たとえば、次のコマンドを実行してbash -c 'somecommand'適切なバージョンのbashの存在をテストします

# Test for the `-v` operator (which appeared in bash 4.2)
if bash -c 'test -v HOME' 2>/dev/null; then …

今日では、Singe UNIX仕様バージョン2のほとんどすべてを信頼できます(FortranやSCCSなどのエキゾチックなものは例外です。これらはオプションです)。バージョン3のほとんども信頼できますが、これはまだ完全に実装されているわけではありません。バージョン4のサポートは大ざっぱです。これらの仕様を読む場合は、バージョン3を読むことをお勧めします。バージョン3は、バージョン2よりもはるかに読みやすく、あいまいさが少なくなっています。

システムの特異性を検出する方法の例については、autoconfconfigureさまざまなソフトウェアのスクリプトを参照してください

その他のヒントについては、ポータブルシェルプログラミングのリソースも参照してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

オブジェクトがjavafxデスクトップアプリケーションに保存されているかどうかを検出するための最良の方法は何ですか?

分類Dev

一部のソフトウェアがインストールされているかどうかにかかわらず、bashスクリプトをチェックインするにはどうすればよいですか?

分類Dev

ストリームがJavaで圧縮されているかどうかを検出する最良の方法

分類Dev

インストール/アップグレードスクリプトを検証するための最良の方法は何ですか?

分類Dev

スクリプト内からPythonコンソール出力を電子メールとして送信するための最良の方法は何ですか?

分類Dev

AMDグラフィックカードがインストールされているかどうかを知るための最良の方法は何ですか?

分類Dev

どのソフトウェアがubuntuにインストールされているかを確認するにはどうすればよいですか?

分類Dev

どのソフトウェアがubuntuにインストールされているかを確認するにはどうすればよいですか?

分類Dev

Expoを使用して構築された新しいReactNativeアプリを「ソフトローンチ」するための最良の方法は何ですか?

分類Dev

これらのifステートメントをクリーンアップするための最良の方法は何でしょうか?

分類Dev

ソフトウェアがソースからインストールされた日付を確認するにはどうすればよいですか?

分類Dev

インストーラーの[このサードパーティソフトウェアをインストールする]ボックスとは何ですか?また、どのサードパーティソフトウェアがインストールされていますか?

分類Dev

インストーラーの[このサードパーティソフトウェアをインストールする]ボックスとは何ですか?また、どのサードパーティソフトウェアがインストールされていますか?

分類Dev

Javaでファイルをリストするための最良の方法は、更新日でソートされていますか?

分類Dev

.javaファイルしかない場合、それらを使用してプロジェクトを作成するための最良の方法は何ですか?

分類Dev

アプリケーションがWebstartによって起動されたかどうかを検出する最良の方法は何ですか

分類Dev

Ubuntuでアプリをインストール/アンインストールするための最良の方法はどれですか?

分類Dev

新しいシステムにマウントされたディスクから、機能していないシステムにインストールされているソフトウェアの完全なリストを取得するにはどうすればよいですか?

分類Dev

libreofficeの満たされていない依存関係エラーにもかかわらず、他のソフトウェアをインストールしてアップグレードするにはどうすればよいですか?

分類Dev

使いやすさの観点から、ファイルをエクスポートするための最良の方法は何ですか?

分類Dev

Angular 2-認証トークンなどのグローバル変数を保存して、すべてのクラスがそれらにアクセスできるようにするための最良の方法は何ですか?

分類Dev

インデックス付けされていない場所に追加できるリストを作成するための最良の方法は何ですか

分類Dev

ファイルからスクリプトをロードする最良の方法は何ですか?

分類Dev

Fedoraインストールですべてのソフトウェアを更新するための好ましい方法は何ですか?

分類Dev

ジャージ付きの(リクエストされた)ファイルをアップロードする最良の方法は何ですか?

分類Dev

実行されていないアプリケーションのフルパスを取得するための最良の方法は何ですか?

分類Dev

ディレクトリにあるファイルの数を数えるための最もリソース効率の良い方法は何ですか?

分類Dev

PythonのWebスクレイピングの結果でAndroidアプリを作成するためのよく知られたプラットフォームはありますか?そして、そうするための最良の方法は何でしょうか?

分類Dev

Typescript、異なるタイプのネストされたオブジェクトを宣言するための最良のアプローチは何ですか?

Related 関連記事

  1. 1

    オブジェクトがjavafxデスクトップアプリケーションに保存されているかどうかを検出するための最良の方法は何ですか?

  2. 2

    一部のソフトウェアがインストールされているかどうかにかかわらず、bashスクリプトをチェックインするにはどうすればよいですか?

  3. 3

    ストリームがJavaで圧縮されているかどうかを検出する最良の方法

  4. 4

    インストール/アップグレードスクリプトを検証するための最良の方法は何ですか?

  5. 5

    スクリプト内からPythonコンソール出力を電子メールとして送信するための最良の方法は何ですか?

  6. 6

    AMDグラフィックカードがインストールされているかどうかを知るための最良の方法は何ですか?

  7. 7

    どのソフトウェアがubuntuにインストールされているかを確認するにはどうすればよいですか?

  8. 8

    どのソフトウェアがubuntuにインストールされているかを確認するにはどうすればよいですか?

  9. 9

    Expoを使用して構築された新しいReactNativeアプリを「ソフトローンチ」するための最良の方法は何ですか?

  10. 10

    これらのifステートメントをクリーンアップするための最良の方法は何でしょうか?

  11. 11

    ソフトウェアがソースからインストールされた日付を確認するにはどうすればよいですか?

  12. 12

    インストーラーの[このサードパーティソフトウェアをインストールする]ボックスとは何ですか?また、どのサードパーティソフトウェアがインストールされていますか?

  13. 13

    インストーラーの[このサードパーティソフトウェアをインストールする]ボックスとは何ですか?また、どのサードパーティソフトウェアがインストールされていますか?

  14. 14

    Javaでファイルをリストするための最良の方法は、更新日でソートされていますか?

  15. 15

    .javaファイルしかない場合、それらを使用してプロジェクトを作成するための最良の方法は何ですか?

  16. 16

    アプリケーションがWebstartによって起動されたかどうかを検出する最良の方法は何ですか

  17. 17

    Ubuntuでアプリをインストール/アンインストールするための最良の方法はどれですか?

  18. 18

    新しいシステムにマウントされたディスクから、機能していないシステムにインストールされているソフトウェアの完全なリストを取得するにはどうすればよいですか?

  19. 19

    libreofficeの満たされていない依存関係エラーにもかかわらず、他のソフトウェアをインストールしてアップグレードするにはどうすればよいですか?

  20. 20

    使いやすさの観点から、ファイルをエクスポートするための最良の方法は何ですか?

  21. 21

    Angular 2-認証トークンなどのグローバル変数を保存して、すべてのクラスがそれらにアクセスできるようにするための最良の方法は何ですか?

  22. 22

    インデックス付けされていない場所に追加できるリストを作成するための最良の方法は何ですか

  23. 23

    ファイルからスクリプトをロードする最良の方法は何ですか?

  24. 24

    Fedoraインストールですべてのソフトウェアを更新するための好ましい方法は何ですか?

  25. 25

    ジャージ付きの(リクエストされた)ファイルをアップロードする最良の方法は何ですか?

  26. 26

    実行されていないアプリケーションのフルパスを取得するための最良の方法は何ですか?

  27. 27

    ディレクトリにあるファイルの数を数えるための最もリソース効率の良い方法は何ですか?

  28. 28

    PythonのWebスクレイピングの結果でAndroidアプリを作成するためのよく知られたプラットフォームはありますか?そして、そうするための最良の方法は何でしょうか?

  29. 29

    Typescript、異なるタイプのネストされたオブジェクトを宣言するための最良のアプローチは何ですか?

ホットタグ

アーカイブ