私がインストールしたソフトウェアは、私のプロフィールに次の行を挿入しました。
[ -s "$SOME_FILE" ] && \. "$SOME_FILE"
私はドットが.
同義であるsource
ことを知っているので、これはファイルをインポートするだけだと思いますが、\.
以前は他の操作を実行したことを見たことがありません。
DVに関する編集:./
「バックスラッシュポイント」を検索すると、実行可能ファイルを呼び出すときに問題が発生し、マンページはman source
表示\.
されません。他に何を試すべきかわからないので、この質問をします。
編集2:関連質問を見る
答え1
引用符の外側のバックスラッシュは、「分析中に次の文字を文字通り解釈する」という意味です。.
パーサの通常の文字であるため、組み込みコマンド\.
と同じ方法で解析され、呼び出されます(bashでは同義語です)。.
.
source
場合によっては、この場合に違いがある可能性があります。ユーザーが.
以前に呼び出されたエイリアスを定義し、エイリアスを拡張するシェルから読み取っている場合(bashはデフォルトで対話式に呼び出されたときにのみこれを実行します)、エイリアスはトリガーされますが、組み込み.profile
コマンドは引き続き機能します。これは、シェルが何らかの方法で参照される単語に対してエイリアス拡張を試みないために発生します。.profile
.
\.
ユーザーがに書き込みをしていたので.
に変更されたようです。\.
.
これはという\.
関数を呼び出すことに注意してください.
。おそらく、関数を書くユーザーはエイリアスを書く人よりも知識が多く、サードパーティの.profile
コードを含める場合は標準コマンドをオーバーライドするのが悪いことがわかります。ただし、エイリアスと関数を避けるには、次のように書くことができますcommand .
。このコードスニペットの作成者は、組み込み機能のないアンティークシェルに興味があるか、command
それを認識していなかったため、そうしませんでした。それ。
しかし、定義はどのエイリアシングインは.profile
悪い考え.profile
です。会議初期化スクリプトではありませんシェル初期化スクリプト。 bashのエイリアスはに属します.bashrc
。
答え2
これは\.
「文字通りの点」、つまり単なる点です。これは標準コマンドとして扱われます.
(source
のコマンドに似ていますbash
)。
POSIX 標準には次の内容があります。これについて(私の強調点)
<backslash>
引用符なしのAは、後続の文字のリテラル値を保持します。、を除いて<newline>
。が<newline>
後に来ると、<backslash>
シェルはそれを行の連続として解釈します。入力をトークンに分割する前に削除する必要があります<backslash>
。<newline>
。エスケープ文字は<newline>
入力から完全に削除され、スペースで置き換えられないため、トークン区切り文字として使用できません。
ドット文字できるニックネーム:
$ alias .='echo hello'
$ .
hello
これは\.
、コマンドのエイリアスバージョンを使用しないことを意味します.
。なぜなら、
トークンを区切った後、Shell Grammarの文法規則を適用する前に、単純なコマンドとして認識されるコマンド名の単語の結果の単語を調べて決定する必要があります。引用されていませんか?、有効なエイリアスです。