何が問題なのかを理解するには、助けが必要です。要するに、ターゲット ディレクトリ内のソース ディレクトリの内容へのリンクを作成する bourne シェル スクリプトを作成しました。ホストシステムでは問題なく動作しましたが、マウントされた fs (chroot とネイティブシステムの両方から) のディレクトリをターゲットにすると、動作せず、出力がまったく提供されません。
詳細: マウントされた fs: ext3, rw
ホストシステム: 3.2.0-48-generic #74-Ubuntu SMP GNU/Linux
質問を絞り込むために、「/usr」を例に挙げました。
ホストシステムの「/usr」のパーミッション: drwxr-xr-x
マウントされたパーティションの「/usr」のパーミッション: drwxr-xr-x
ホストシステムからbashとdashの両方を使用しようとしました。同じ結果 - ネイティブ ファイル システムでは機能しますが、マウントされたファイル システムでは機能しません。
スクリプト (cord.sh; 私の場合はルートから実行):
# !/bin/sh
SRCFOLDER=$2 # folder with package installation
DESTFOLDER=$3 # destination folder to install symlinks to ('/' - for base sys; '/usr' - userland)
TARGETS=$(ls $SRCFOLDER) # targets to handle
SRCFOLDER=${SRCFOLDER%/} # stripping slashes from the end, if they are present
DESTFOLDER=${DESTFOLDER%/} #
##
## LINKING
##
if [ "$1" = "-c" ];
then printf %s "$TARGETS" | while IFS= read -r line
do
current_target=$(file $SRCFOLDER/$line) # had an issue with different output in different systems
if [ "${current_target% }" = "$SRCFOLDER/$line: directory" ]; # stripping space helped
then
mkdir -v $DESTFOLDER/$line # if other package created it - it'll fail
/usr/local/bin/cord.sh -c $SRCFOLDER/$line $DESTFOLDER/$line # RECURSION
else
ln -sv $SRCFOLDER/$line $DESTFOLDER/$line # will fail, if exists
fi;
done
##
## REMOVING LINKS
##
elif [ "$1" = "-d" ];
then printf %s "$TARGETS" | while IFS= read -r line
do
current_target=$(file $SRCFOLDER/$line)
if [ "${current_target% }" = "$SRCFOLDER/$line: directory" ];
then
/usr/local/bin/cord.sh -d $SRCFOLDER/$line $DESTFOLDER/$line # RECURSION
else
rm -v $DESTFOLDER/$line
fi;
done
elif [ "$1" = "-h" ];
then
echo "Usage:"
echo "cord -c /path/to/pkgdir /path/to/linkdir - create simlinks for package contents"
echo "cord -d /path/to/pkgdir /path/to/linkdir - delete links for package"
echo "cord -h - displays this help note"
else
echo "Usage:"
echo "cord -c /path/to/pkgdir /path/to/linkdir - create simlinks for package contents"
echo "cord -d /path/to/pkgdir /path/to/linkdir - delete links for package"
echo "cord -h - displays this help note"
fi;
提案する最も明白なことは、権限に関する問題でした。それでも、すべてが正気に見えます。多分私は何かを逃しましたか?