[〜#〜] edit [〜#〜]:実際には、エイリアスではありません(回答を参照)
ご存じのとおり、シェルではドットコマンド(.
)は、sourceコマンドのエイリアスです。
しかし、そのような奇妙なエイリアスの背後に理由があるのだろうか?どうやら、私はあまり使用しないので、短いエイリアスが必要になるでしょう。
では、なぜドットなのか?また、source
やcd
やls
などの一般的に使用されるコマンドではないのはなぜですか。なぜエイリアスなのか?その背後に正当な理由はありますか?それとも歴史的な理由がありますか?
注:私は最初にこの質問をServer Faultに投稿しましたが、代わりにここに投稿するよう提案されました。
.
は POSIX標準 です。
source
は.
のbash組み込みシノニムであり、.
ほど移植性がありません
また、Bashリファレンスマニュアルでは、.
は 4.1 Bourne Shell Builtins の下にリストされ、source
は 4.2 Bash Builtin Commands の下にリストされます。
の同義語。 (Bourne Shell Builtinsを参照してください)。
Bashがそれをsource
と名付けた可能性があります。これは、Cシェルで呼び出されたためです(コマンドが明らかに発生した場所です)。
Bashに関する限り、.
とsource
はどちらか一方のエイリアスではありませんが、どちらも同じ基本的な関数source_builtin
を呼び出す組み込み関数であるというのは簡単な事実です。 。
Bashソースコードのsource.def
ファイルを見てください:
$PRODUCES source.c
$BUILTIN source
$FUNCTION source_builtin
$SHORT_DOC source filename [arguments]
Execute commands from a file in the current Shell.
Read and execute commands from FILENAME in the current Shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
$END
$BUILTIN .
$DOCNAME dot
$FUNCTION source_builtin
$SHORT_DOC . filename [arguments]
Execute commands from a file in the current Shell.
Read and execute commands from FILENAME in the current Shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
$END
Dotコマンドは、おそらく1976年にBourne Shellによって導入されました。
Sourceコマンドは、1977年または1978年にcshによって導入されました。
したがって、別名関係ではなく、「発明」の2つの異なる名前が同時に存在します。
ところで:cd
がこのように命名された理由を教えてください。このコマンドは以前はchdir
と呼ばれていましたが、1974年に予定されている110ボーモデムには長すぎ(タイプが遅い)...