「.」を使ってもいいですか? UbuntuとOS Xの.bashrcでソースコードの代わりにファイルを実行しますか?

「.」を使ってもいいですか? UbuntuとOS Xの.bashrcでソースコードの代わりにファイルを実行しますか?

いいですね。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で動作しているようです(したがって、彼らは実際にandで動作しますsource.つまり、シェルで必要な機能を提供します)。これらのいずれかを選択する必要がありますか、それとも何か抜けましたか?

.bashrcFWIW、OS Xで.bash_profile

答え1

でとbash.同義語sourceです。bashソースコードファイルを見ると、同じ内部関数を表示して使用できますbuiltin/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.

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

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

答え2

これはPOSIXの定義.dot

シェルは現在の環境でファイルのコマンドを実行する必要があります。

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

[ -f ./file ] && source ./file上記を考慮して完全に交換することをお勧めします. ./file。ファイルが存在しない場合、最悪のシナリオはログイン時に通知を受け取ることです。私の考えでは、これはおそらくあなたが望む情報です。

もちろん、テストを維持するには、次のようにすることができます。

test -f ./file && . $_

関連情報