我有这个简单的脚本可以使用第七感(这是一个独狼游戏书阅读器/玩家):
#!/bin/bash
GAME_PATH=$(dirname "$(readlink -f "$0")")
SEVENTH_SENSE_PATH=$(echo ~)"/.wine/drive_c/users/"$(whoami)"/Documents"
mkdir -p $SEVENTH_SENSE_PATH
ln -s -f "$GAME_PATH/Lone Wolf/books" "$SEVENTH_SENSE_PATH/Seventh Sense"
cd "$GAME_PATH/Lone Wolf"
wine Lone\ Wolf.exe
这非常简单,只需将文件夹内的目录移动到该 Windows 程序在 wine 目录中期望的位置 - 但这不是问题。
ln
这里第一次工作(它创建一个符号链接到wine 用户的文件夹内books
命名。问题是,第二次它在符号链接指向的文件夹内创建一个符号链接(讽刺的是,正是原始文件夹),当运行时两次。Seventh Sense
Documents
books
Seventh Sense
books
它不会造成任何伤害,但它似乎是一个明显的错误,我却没有注意到。
(books
是一个文件夹(在Lone Wolf
与脚本同级的文件夹内))。
答案1
ln
与cp
和 一样mv
,根据目标是否是现有目录(包括指向目录的符号链接)而表现不同。如果不是,则将源复制/移动/链接到目标名称。如果目标是现有目录,则源将被复制/移动/链接到目标目录下与源具有相同基本名称的文件。
使用 GNU ln(如 Linux 下所示),-n
当目标是目录的符号链接时,使用该选项覆盖目标而不是在目标下写入。
ln -snf "$GAME_PATH/Lone Wolf/books" "$SEVENTH_SENSE_PATH/Seventh Sense"
或者,您可以测试目标是否是目录,如果存在则不重新创建它。
[ -d "$SEVENTH_SENSE_PATH/Seventh Sense"/. ] ||
ln -s "$GAME_PATH/Lone Wolf/books" "$SEVENTH_SENSE_PATH/Seventh Sense"
或者,您可以先删除目标,然后无条件创建它。
rm -f "$SEVENTH_SENSE_PATH/Seventh Sense"
ln -s "$GAME_PATH/Lone Wolf/books" "$SEVENTH_SENSE_PATH/Seventh Sense"
答案2
发生这种情况是因为第二次运行脚本时,链接存在并且指向一个目录。因此它将新链接放入该目录中。你可以使用这样的东西:
if test -e "$SEVENTH_SENSE_PATH/Seventh Sense"
then
echo " link already exists"
else
ln -s -f "$GAME_PATH/Lone Wolf/books" "$SEVENTH_SENSE_PATH/Seventh Sense"
fi;