「。」を使用しても大丈夫ですか?ソースの代わりにファイルを実行するには-UbuntuとOS Xの.bashrcで?


11

OK、その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で動作し.、つまり、シェルで必要な機能が得られます)。どちらを選ぶべきですか、それとも何か不足していますか?

FWIW、OS Xでは、自分のを.bashrcから調達してい.bash_profileます。


1
「sh」ベースのシェルの場合、「。」を使用します。グローバルな互換性のため、そして 'csh'ベースのシェルを使用している場合は、ソースを使用します。
mdpc 2014年

2
リンクされた投稿のどこに「source現在のシェルでスクリプトを.個別に実行する」と表示されていますか?どちらも現在のシェルで実行します。そうでなければ意味がありません
マイケル・ムロゼック

回答:


11

これはPOSIXの定義です.dot

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

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

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

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

test -f ./file && . $_

2
ああ、知っている人$_、好きです。:)
Andreas Wiese 2014年

@AndreasWiese-誰もがすべきこと-POSIXで定義されている7つの特別なパラメータの1つにすぎません。
mikeserv 2014年

+1私はtest -f /.file && . $_ここに示すアプローチを使用しました
Michael Durrant 2014年

6
@mikeservいいえ、$_POSIXでは標準化されていません。8つの特別なパラメータがあり$@$*$#$$$!$?$-$0$_され、明示的に省略。間違ったコメントが質問を引き起こしました。
Gilles「SO-邪悪なことをやめなさい」

19

ではbash.source同義語です。見るとbash、ソースコード、ファイルbuiltin/source.def、あなたが見ることができる.source同じ内部機能を使用しますsource_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で呼び出される場合は、.ではなくを使用する必要がありますsource。POSIXはシェルを制限しないため、上記のスクリプトはすべて機能します。

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


すべてが等しいので、「。」の代わりに「ソース」を使用します。理由の1つ:「。」を検索/ grepしてみてください。大きなスクリプト内の式。それは悪夢です。
abonet 2014年

この答えは、@ abonetが言うように、を使用すること.が通常を使用するよりも「優れている」理由を説明していますが、検索がはるかに簡単です。多くの言語ではピリオドは句読点であるため、目をスキップするのは簡単です。だから私はを使うことを好む。sourcesourcesource
ジョー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.