Ubuntu および OS X の .bashrc で、ソースの代わりに「.」を使用してファイルを実行しても問題ありませんか?

Ubuntu および OS X の .bashrc で、ソースの代わりに「.」を使用してファイルを実行しても問題ありませんか?

OK、source現在のシェルでスクリプトを実行し、.詳細を記載したとおりに個別に実行します。「.」と「source」でスクリプトを実行する例えば、具体的には、私の.bashrcファイルには以下があります:

[ -f ~/.bash_aliases ] && source ~/.bash_aliases
[ -f ~/.git-completion.bash ] && source ~/.git-completion.bash
[ -s ~/.autojump/etc/profile.d/autojump.sh ] && source ~/.autojump/etc/profile.d/autojump.sh

これを次のように置き換えることはできますか:

[ -f ~/.bash_aliases ] && . ~/.bash_aliases
[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash
[ -s ~/.autojump/etc/profile.d/autojump.sh ] && . ~/.autojump/etc/profile.d/autojump.sh

それは OS X でも動作しますか - それは「POSIX」の問題ですか?

試してみたところ、上記は Ubuntu でも動作するようです (つまり、実際にはsourceとの両方で動作し.、シェルで必要な機能を提供します)。どちらか一方を選択する必要がありますか、それとも何か見落としているのでしょうか?

ちなみに、OS X では、.bashrcからソースを取得します.bash_profile

答え1

ではbash.と は同義語です。ソース コード ファイルsourceを調べると、同じ内部関数 が使用されていて、次のように表示されます。bashbuiltin/source.def.sourcesource_builtin

$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.

ただし、sourceは POSIX と互換性がないため、スクリプトが POSIX で呼び出される場合は、の代わりに/bin/shを使用する必要があります。POSIX はシェルを制限しないため、上記のスクリプトはすべて機能します。.source

個人的には、.の代わりに常に を使用しますsource。(私が書いたスクリプトの多くは で実行されますcron)。

答え2

これはPOSIXの定義.dot

シェルは現在の環境でファイルからのコマンドを実行します。

ファイルに が含まれていない場合/<slash>、シェルは で指定された検索パスを使用して、$PATHファイルを含むディレクトリを検索します。ただし、通常のコマンド検索とは異なり、.dot ユーティリティによって検索されるファイルはない実行可能であること。読み取り可能なファイルが見つからない場合、非対話型シェルは中止します。対話型シェルは診断メッセージを標準エラーに書き込みますが、この状態は構文エラーとはみなされません。

[ -f ./file ] && source ./file上記を考慮すると、を完全に置き換えたほうがよいでしょう. ./file。ファイルがない場合、最悪の場合、ログイン時に通知が表示されます。これはおそらく、必要な情報だと思います。

もちろん、テストを保持したい場合は、次のようにすることもできます。

test -f ./file && . $_

関連情報