0

良いチュートリアルを読んだり、スクリプトを読んだりして、シェル スクリプトを学んでいます。

私はそのスクリプト ( https://github.com/Ahtenus/minecraft-init/blob/master/minecraft )を読んでいましたが、これらの最初の行が私を襲いました:

if [ -L $0 ]
then
    source `readlink -e $0 | sed "s:[^/]*$:config:"`
else
    source `echo $0 | sed "s:[^/]*$:config:"`
fi

したがって、これらの行は、同じシェルで「config」という名前のスクリプト (すべての構成値が格納されている場所) を起動します。しかし、なぜ、ファイルを直接起動する代わりに (「ソース構成」のようなものを使用して)、そのスクリプトの作成者は元のスクリプトの名前 (リンクであるかどうかにかかわらず) を読み取り、結果を sed に送信してこの名前を「構成」?

ご説明ありがとうございます。

4

3 に答える 3

0

このコードconfigは、スクリプトの実際のパスと同じパスに含まれるファイルをソースします。

コードを説明しましょう:

if [ -L $0 ]
then
    source `readlink -e $0 | sed "s:[^/]*$:config:"`
else
    source `echo $0 | sed "s:[^/]*$:config:"`
fi

質問で言うようにif [ -L $0 ]、スクリプト名 ( $0) がリンクかどうかを確認します。

readlink -e $0リンクのターゲットを返します。

$ ln -s a mylink
$ ls -la
lrwxrwxrwx  1 me me    1 Sep  5 11:59 mylink -> a
$ readlink -e mylink 
/home/me/test/a

スクリプト/home/something/script.shの実際のパスである withは、last の後のすべてを:sed "s:[^/]*$:config:"に置き換えます。/config

$ echo "hjio/hi/hi" | sed "s:[^/]*$:config:"
hjio/hi/config

configつまり、スクリプトの同じパスに含まれるファイルを取得することです。

于 2013-09-05T09:57:36.347 に答える
0

あなたの質問には2つの部分があります:

そのスクリプトの作成者は、元のスクリプトの名前を読み取ります...

これは基本的に、構成ファイルの名前がconfig. 単純。このスクリプトは、指定されたファイルへのパスが何であれ、config.

また、あなたは について混乱しているようsourceでした。 source現在のシェルと同じコンテキストでファイルを実行します。

于 2013-09-05T09:58:52.720 に答える