.bashrcを直接実行できないのはなぜですか?「調達」とは何ですか?

.bashrcを直接実行できないのはなぜですか?「調達」とは何ですか?

私の.bashrcには次の権限があります。 -rwXアール字形Xアール字形X

そのため、「実行可能」と表示されます。だから私はそれを実行できるはずです。

しかし、私が試したとき

$ ./.bashrc

私は得る:

./.bashrc: line 6: return: can only `return' from a function or sourced script

.bashrcの5行と6行:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

私はこの問題を検索し、次の "source"コマンドが私が必要とするものを完全に実行します。

$ source .bashrc

質問:

1-./.bashrcを直接実行できない理由とこの行の機能:

[ -z "$PS1" ] && return

2-「ソーススクリプト」とは何ですか?「ソース」コマンドの具体的な役割は何ですか?(私のシステムには「source」のマニュアルページはありません)

答え1

sourceドットスクリプトを取得するための使用(または標準コマンドである使用)とそれを独自のスクリプトとして実行することの.違いは、以前に議論されました。

たとえば、ソース("."または"source")とbashでのファイル実行の違いは何ですか?source「これは最終的に別の環境(またはなし.)でスクリプトを実行することです。現在のシェル環境、現在のシェルの環境変数、シェルオプションなどを設定する必要がある場合は、これを行う必要があります。シェルオプションを設定したり、スクリプトから変数をエクスポートしたり(使用したりsource実行したりしないで.)、親シェルには影響しません。

ご質問いただいた具体的な試験は、

[ -z "$PS1" ] && return

$PS1デフォルトのプロンプトが空の場合、ドットスクリプトから返されます。これは、現在のシェルセッションが対話型かどうかをテストする方法です。対話型でない場合、PS1変数は設定されず、プロンプトは空です。この場合、スクリプトの残りの部分(おそらく)は対話型で初期化する必要がある項目のみを処理するため、実行する必要はありません。シェル。

現在のシェルセッションを終了するには、asのreturn代わりにドットスクリプトを使用する必要があります。これは、またはを使用してスクリプトを呼び出したセッションと同じです。したがって、ドットスクリプトはシェル関数と非常によく似ています。exitexitsource.

関連情報