各コマンドへのフルパスを含むCD

各コマンドへのフルパスを含むCD

シェルスクリプトでは、まずディレクトリにCDを挿入し、次にコマンドを実行するか、フルパスを作成する方が高速またはより良いと見なされますか?例:最初に書いてから書き込むcd /directory1/ことをお勧めmkdir subdirectory/しますmkdir /directory1/subdirectory/

ディレクトリでいくつかのコマンドを実行する必要がある場合(上記の例では複数のサブディレクトリを作成する)、答えは変わりますか?

mkdir /directory1/subdirectory/それが実際に行われていると言うときcd /directory1/、またはmkdir subdirectory/行われていないと言うとき?

mkdirは単なる例ですが、この質問は多くの同様のコマンドに適用できます。

ベストアンサー1

これは実際にあなたが決める問題です。この決定に影響を与える可能性のある要因は、審美的に満足しているか読みやすいかどうかです。実行速度の面では大きな違いはありません。

既存のディレクトリの下に3つのサブディレクトリを作成できます/path/to/dir

mkdir /path/to/dir/a \
      /path/to/dir/b \
      /path/to/dir/b
( cd /path/to/dir && mkdir a b c )

cd(サブシェルを使用すると元の作業ディレクトリに戻ることができます)

中かっこ拡張を知っているシェルを使用する(cdシェルが呼び出す前に中かっこ拡張を拡張するので、これは本質的に上記の-lessバージョンと同じですmkdir):

mkdir /path/to/dir/{a,b,c}

ユーティリティはCライブラリ関数をmkdir使用できます。この関数は、mkdir()作成したいディレクトリを作成する前に作業ディレクトリ1を変更しません。

特定の作業ディレクトリでの実行に興味のあるスクリプトを実行すると、状況が異なります。スクリプトが現在の作業ディレクトリ外の相対パスを使用してファイルを見つけることを期待している場合は、明らかにコマンドを実行する前に作業ディレクトリが正しいことを確認する必要があります。

( cd directory && thescript )

...スクリプトが直接実行しない限り。


1 少し修正: Linux では、次のコマンドを使用します。mkdir -p a/b/c 〜する、、、、を呼び出しますが、OpenBSDではmkdir("a")、、、。のみ呼び出します。 Linuxでは、追加の個別のディレクトリを作成するだけで。chdir("a")mkdir("b")chdir("b")mkdir("c")mkdir("a")mkdir("a/b")mkdir("a/b/c")a/b/c/dmkdir a/b/c/dmkdir("a/b/c/d")

したがって、Linuxでは、mkdir -pディレクトリの作成時に各中間パスが実際に内部的に「一度実行」されます(noを使用するとこれは実行されません)。cdmkdir-p

-pmkdirこのユーティリティには、不足している中間ディレクトリを生成するためのフラグがありますが、明らかにBSDとLinux開発者はこれを少し異なって実行します。

おすすめ記事