ソースと なぜ異なる振る舞いですか?


17

最近知った

. ./.a.aそして./.a.a同じです。

ただし、試行source source .a.aするとエラーが発生します。IMO、の.Bashエイリアスであるためsource、異なる動作をするべきではないので、何が欠けていますか?

ボーナス、なぜ. .大丈夫なのにそうでsource sourceはないのですか?


8
あなたの例では、より明確な名前を選んだかもしれません:)。いずれにせよ、何があなたのアイデア与えた. script./script同じものですか?彼らは間違いなくそうではありません。また、.へのエイリアスではありませんsource。それは逆です。.は標準でsourceあり、のエイリアスです.
テルドン

2
シェルスクリプトを見てしばらくすると、.コマンドに慣れsourceますsource somefileが、スクリプト内でそのステートメントが何をしているのかがすぐにわかる. somefile だけでなく、それが何をしているのかがはっきりしないだけでなく、あなたは簡単に. キャラクターを完全に逃すことができます
-the_velour_fog

ボーナス、なぜですか。。ソースソースはそうではありませんか?-エラーメッセージをどのように遠くにあるbash: .: .: is a directoryのは、. .説明するためのOKニーズです。
カウンター

@terdon-絶対に正しい。元の例は. ./.a.a .正直でした。:-DAのクイズ。:-)リンクされた質問は素晴らしいです、ありがとう。そのアイデアを与えたのは、この方法でファイルを実行しても違いが見られなかったという事実と、どこか.で読んだという事実はのエイリアスですsource。:-)
LAFKは、モニカ

回答:


27

あなただけ置き換えることができない.sourceどこにでも。もし

. ./.a.a

動作する場合、最初のものを置き換えることができます.(少なくともBashでは):

source ./.a.a

第二は、.あなたがそれを置き換えることはできません、現在のディレクトリを表しますsource(特にない./sourceあなたがやったように)。

source source

source現在のディレクトリで呼び出されるファイルがあり、現在のシェルにとって意味のあるものが含まれている場合は問題ありません。どうして. .いいかわかりません...

また、. ./.a.a./.a.a同じではない、第二の形態は、実行.a.a別のシェルで。参照してください(「」または『ソース』)を調達し、bashでファイルを実行するとの違いは何ですか?詳細については。


9

sourceは、次のように使用されることになっているシェルキーワードです。sourcefileここにfileは、有効なシェルコマンドが含まれています。これらのシェルコマンドは、コマンドラインから入力したかのように、現在のシェルで実行されます。今、.fileまったく同じことを行います。

それ.だけでなく、「現在の作業ディレクトリ」./xyz(「xyzこのディレクトリ内」)またはa/b/./c/./d(「と同じ」)を意味しa/b/c/dます。

それを超える.ファイル名は、.foobar「隠された」ファイルを示す(実際には...ではない)かfoobar.pdf、拡張子でファイル形式を示す(ここ.pdf)のように、慣例によってのみ意味を持ちます。

これらの異なる意味は交換できません。


8
.決して時代遅れではありません。sourceポータブルで、POSIXで定義されたファイルのソースとは異なります。sourceエイリアスは、シェル固有であり、(例のためのいずれかで存在しないことができるdash)、または標準とは異なる振る舞い.
テルドン

@terdonのおかげで、Wikiは、コマンドが最初に現れたCシェルではドット(。)としてのソースは受け入れられないと言っています。
ノーム・マノス

1
@NoamManosかもしれませんが、CシェルはPOSIXではないため、動作が非常に異なります(実際に動作します)。
テルドン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.