0

次の 2 つのシェル コマンドがあります。

[[ ! -d $TRACEDIR/pattrace/rpt/.tracking ]] && mkdir $TRACEDIR/pattrace/rpt/.tracking  
[[ ! -d $TRACEDIR/pattrace/rpt/.tracking ]] && mkdir -p $TRACEDIR/pattrace/rpt/.tracking

明らかに、これらのコマンドの唯一の違いは-pフラグです。しかし、このフラグはこのコンテキストで何をするのでしょうか?

ありがとう。

4

2 に答える 2

4

mkdir の man ページから:

-p, --parents
      no error if existing, make parent directories as needed

つまり、必要なディレクトリが存在しない場合は、必要に応じて作成されます。ディレクトリが既に存在する場合、エラーは発生しません。

これは、 man ページを探すのに適した場所です(もちろん、Google を使用することに加えて)

于 2012-07-16T11:39:44.797 に答える
2

mkdirこの-pオプションを指定すると、指定されたパスの必要なすべての親ディレクトリが作成されます (存在しない場合) ( man ページを参照)。また、-pディレクトリ自体が既に存在する場合でも、エラーは発生しません。

特定のケースでは、完全なパスのテストが十分でないため、最初のコマンドが失敗する可能性があります。テストは、たとえば存在する場合にのみ失敗し$TRACEDIR/ますが、後続のテストは存在mkdirする必要があるため失敗$TRACEDIR/pattrace/rpt/します。

2 番目のコマンドは、mkdir -p欠落しているすべてのディレクトリを「間に」作成するため、機能します。

于 2012-07-16T11:39:12.567 に答える