存在する.sh

存在する.sh

約20個の小さなファイルで構成されるプロジェクトがあります.sh。通常、どのファイルにも20行以上のコードがないため、「小さい」と命名しました。私はモジュラーアプローチをとりました。Unixの哲学そしてプロジェクトを維持する方が簡単です。

各ファイルの先頭.sh#!/bin/bash

簡単に言えば、スクリプト宣言は2つの目的に使用されることを理解しています。

  1. これは、ユーザーがファイルを実行するために必要なシェルが何であるかを覚えるのに役立ちます(たとえば、数年間ファイルを使用していない後など)。
  2. これにより、スクリプトが特定のシェル(この場合はBash)を介してのみ実行されるため、他のシェルを使用するときの予期しない動作を防ぎます。

プロジェクトが5つのファイルから20のファイルに、または20のファイルから50のファイルに増え始めると(単純なデモ用ではない)、20行または50行になります。ワイヤースクリプト宣言。認めます。何人かの人々にとってこれは興味深いかもしれませんが、私には20または50と言うのが少し重複しているように感じます。アイテムごとに1つ(おそらくマスターファイルプロジェクト)。

一部の基本ファイルで、いくつかの「グローバル」スクリプト宣言を使用して、いわゆる20行または50行以上のスクリプト宣言行の重複を回避する方法はありますか?

ベストアンサー1

現在のプロジェクトが50個のBashスクリプトで構成されていても、すぐにPerlやPythonなどの他の言語で書かれたスクリプトが蓄積し始めます(これらのスクリプト言語にはBashにはない利点があるため)。

各スクリプトに正しい#!-line がない場合は、次のようになります。とても難しいどのインタプリタを使用すべきかわからず、さまざまなスクリプトで作業します。すべてのスクリプトが実行されるかどうかは問題ではありません。他のスクリプトから、これはエンドユーザーの困難を開発者にのみ伝えます。どちらのグループも、スクリプトを使用するためにスクリプトがどの言語で書かれているかを知る必要はありません。

-line および明示的なインタプリタなしで実行されるシェルスクリプトは、#!呼び出されるシェルによって異なる方法で実行されます (たとえば、質問を参照)。Shebangなしでスクリプトを実行するシェルインタプリタとは何ですか?特にスティーブンの答え)これは本番環境では望ましくありません(一貫した動作と移植性が必要です)。

明示的なインタプリタを使用して実行されたスクリプトは、-lineの内容に関係なく#!そのインタプリタによって実行されます。 Pythonや他の言語でBashスクリプトを再実装することにした場合、追加の問題が発生します。

追加のキーストロークを消費し、常に#!各スクリプトに1行を追加する必要があります。


一部の環境では、すべてのプロジェクトのすべてのスクリプトに定型句法テキストが複数あります。#!プロジェクトで「重複」と感じられるラインにすぎないことに満足してください。

おすすめ記事