Raspbian Stretch Lite:
$ mkdir --help
Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.
Mandatory arguments to long options are mandatory for short options too.
-m, --mode=MODE set file mode (as in chmod), not a=rwx - umask
-p, --parents no error if existing, make parent directories as needed
-v, --verbose print a message for each created directory
-Z set SELinux security context of each created directory
to the default type
--context[=CTX] like -Z, or if CTX is specified then set the SELinux
or SMACK security context to CTX
--help display this help and exit
--version output version information and exit
私が書いたスクリプトでは、次のようになります。
mkdir -p /mnt/target/home/user/resources
どこに/mnt/target/home/user/resources
存在できますか?この場合、スクリプトは次のエラーで停止します。
mkdir: '/mnt/target/home/user/resources' ディレクトリを作成できません。ファイルが存在します。
しかし、マニュアルページにはエラーが存在する場合、エラーを返すべきではないとされています!
修正する
ファイルがありませんresources
:
$ ls -la /mnt/target/home/user/
totale 13
drwxr-xr-x 4 mark mark 1024 gen 10 16:56 .
drwxr-xr-x 4 root root 1024 gen 10 16:56 ..
-rw-r--r-- 1 mark mark 220 nov 13 14:09 .bash_logout
-rw-r--r-- 1 mark mark 3523 nov 13 14:09 .bashrc
drwxr-xr-x 3 root root 1024 gen 10 16:56 bin
-rw-r--r-- 1 mark mark 675 nov 13 14:09 .profile
drwxr-xr-x 2 root root 4096 gen 1 1970 resources
アップデート2
スクリプトの周辺コードは次のとおりです。
losetup -P /dev/loop0 image.img
e2fsck -f /dev/loop0p2
resize2fs /dev/loop0p2
mkfs.ext4 /dev/loop0p3
e2fsck -f /dev/loop0p3
mkfs.vfat -F 32 /dev/loop0p4
mount /dev/loop0p2 /mnt/target
cd /mnt/target/home/
tar cf home.tgz user/
rm -r user/
mount /dev/loop0p1 /mnt/target/boot/
mount /dev/loop0p3 /mnt/target/home/
tar xf home.tgz -C /mnt/target/home/
#mkdir -p /mnt/target/home/user/resources
mount /dev/loop0p4 /mnt/target/home/user/resources
image.img
4つのパーティションが含まれています。
答え1
mount /dev/loop0p2 /mnt/target
cd /mnt/target/home/
mount /dev/loop0p3 /mnt/target/home/
mkdir -p /mnt/target/home/user/resources
mkdir
作業ディレクトリをオン/home
に設定して電話をかけています/dev/loop0p2
。作業ディレクトリは以前はパスを介してアクセスできましたが、/mnt/target/home
今は隠されています/dev/loop0p3
。呼び出すと、mkdir
pathはのディレクトリを参照します/mnt/target/home
。/
/dev/loop0p3
なぜ作業ディレクトリに興味があるのか分かりませんが、mkdir
奇妙に見えます。質問にスクリプトを表示する前にスクリプトを単純化した場合、現在発生している問題は、マウントポイントの後ろに隠されたディレクトリが複雑になっている可能性があります。
したがって、インストールする前に終了してみてくださいcd
。または/mnt/target/home
まったく使用しないで、通話オプションとを使用してください。cd
-C
tar
rm
通常、何らかの方法で使用されるディレクトリに何かをインストールしないでください。ターゲットディレクトリは空でなければならず、プロセスの作業ディレクトリではありません。オペレーティングシステムは正しいことをしますが、それが正しいと思うことは驚くことがあり、これはとにかく人間とソフトウェアを混乱させる可能性があります。