次のような結果があるとします。
node_modules/
suman/
node_modules/suman
シンボリックリンクです
これにより:
mkdir -p "$PWD/node_modules/suman"
mkdir -pがシンボリックリンクを上書きしないと仮定しますか?
$PWD/node_modules
シンボリックリンクならどうでしょうか?私はまた、mkdir -p
シンボリックリンクがディレクトリとして扱われると仮定していますか?最後に、「node_modules」がディレクトリの代わりにファイルにシンボリックリンクされている場合はどうなりますか?
答え1
それに関しては、最初の2つのサブ問題が非常に明らかになりますmkdir
。man
まだディレクトリがない場合は、ディレクトリを作成します。
ファイルシンボリックリンクの場合は、簡単な実験で十分です。
$ touch a
$ ln -sr a A
$ mkdir -p A/b/c
mkdir: cannot create directory ‘A’: Not a directory
答え2
他の答えが示すように、シンボリックリンクの場合はファイルとして処理され、失敗します。ただし、他の人がシンボリックリンクをディレクトリに処理するソリューションを探している場合は、次のいずれかが機能します。
mkdir -p "$(realpath DIR)"
mkdir -p "$(readlink -f DIR)"
答え3
私はnode_modulesが$ PWDにディレクトリまたはシンボリックリンクとして存在すると仮定します(明示的に言及していません)。
最後の問題を最初に処理します。 node_modulesがファイル(またはファイルへのシンボリックリンク)の場合は、ディレクトリとして機能することを許可しないでください。したがって、/ sumanをサブディレクトリとして持つことはできません。
mkdir -p node_modules/anything
「ディレクトリではない」のため失敗します。
sumanがnode_modulesディレクトリにファイル(またはファイルまたはディレクトリへのリンクまたはシンボリックリンク)として存在する場合
mkdir -p node_modules/suman
「ファイルが存在します」のため失敗します。
sumanがnode_modulesディレクトリにディレクトリ(またはディレクトリへのシンボリックリンク)として存在する場合
mkdir -p node_modules/suman
エラーは生成されませんが、既存のディレクトリやシンボリックリンクは上書きされません。