
すべて読んだときGoogleのシェルスタイルガイド、私は少し混乱している次の行を見つけました。 「実行ファイルには拡張子を含めないでください(強くお勧めします)。または.sh拡張子が必要です。ライブラリには.sh拡張子が必要です。実行可能ではありません。」協会少なくともbashスクリプトの場合、実行可能ファイルとbashスクリプトライブラリの違いは正確に何ですか?ライブラリのスクリプトも実行できませんか?
答え1
少なくともbashスクリプトの場合、実行可能ファイルとbashスクリプトライブラリの違いは正確に何ですか?
私はシェルスクリプトで「ライブラリ」という言葉が多用されていることを聞いたことがありません。もしそうなら、プログラムをライブラリに分割する必要があるという事実は、それがより良いプログラミング言語で最もよく実装されることを意味すると提案したいと思います。
つまり、シェルプログラミングのライブラリは他のプログラミング言語のライブラリと似ていると思います。つまり、他のプログラムで使用する関数とサブルーチンを提供しますが、それ自体は提供しません。する特にこれらのツールに関連するすべて。たとえば、ライブラリは特定のデータを圧縮/圧縮解除するためのツールを提供できますが、コマンドラインで指定されたファイルを圧縮/圧縮解除するためのコマンドラインツールを実装するには、ライブラリを使用するプログラムが必要になる場合があります。
実際、シェルに実装されているプログラムは他のプログラムと同様に正常に実行されますが、シェルライブラリには関数定義のみが含まれており、これらの定義は他のシェルスクリプトから取得されます。
main
たとえば、以下の2つのファイルでは、プログラムとライブラリと呼ばれることがありますfunctions.sh
。実行可能にmain
してください./main
。$PATH
functions.sh
$PATH
source
bash functions.sh
main
:
#!/bin/bash
source functions.sh
say hello world
functions.sh
:
say() {
printf "%s\n" "$*"
}
実行可能プログラムに関する重要事項いいえ拡張を持つことは、実装を公開しないことに関連する可能性があります。プログラムユーザーはそれがどのように実装されるかを知る必要はなく、シェルスクリプトをPerlで再実装すると呼び出さないと混乱が少なく、名前が必要ない場合はfoo.sh
作業量が減ります。プログラムのすべてのユーザーが変更される可能性があります(修正が必要です)。
ただし、シェルライブラリはシェルスクリプトでのみ使用できるため、実装が公開されます。する合理的な。
答え2
Bashの観点からは、ライブラリと実行可能ファイルの間に厳密な区別はありません。
Google のスタイルガイドで説明する部分の違いを説明します。
ライブラリには .sh 拡張子が必要です。実行可能ではない
これらのファイルは通常、一連の環境変数と関数定義です。実行ファイルとして実行すると何も起こりません。これらのファイルは他のスクリプトからのみインポートされます。
Googleスタイルガイドでは、他のプログラマ/メンテナンス者に通知するために「.sh」サフィックスを表示することをお勧めします。
答え3
引用したGoogleガイドはやや不明ですが、文書ルーチンが含まれています。彼らは一つだと言う文書ルーチンライブラリを含むように作成されたファイルには実行ビットを設定しないでください。ファイル名は.sh
。
この種のライブラリファイルには呼び出されるルーチンが含まれていますが、特定のタスクを実行するために一連のタスクを実行するスクリプトではありません。したがって、ライブラリファイルのコードは実行可能ですが、ファイル自体は「実行可能」ではありません。
これはGoogleのスクリプトガイドラインです。人々が本当に良いシェルスクリプトを書くのを助けることができる慣行パターンを説明しますが、そうではありません。鉄筒のようなルール。 IMOがライブラリ・ファイルに対する実行権限を省略することについて話すのは非常に良いアドバイスです。ファイル名について彼らがどう思うかはそれほど重要ではありません(特に良いまたは悪いアドバイスではありません)。
答え4
私はこれがファイルシステムのプロパティを参照していると思います。
バイナリとシェルスクリプトには「chmod + x」実行可能フラグがあり、ライブラリスクリプト(誤って直接呼び出されるのを防ぐため)は実行可能ではありません。