ln дает различные результаты, когда выполнено многократно

Пакеты Fedora подписываются и проверены суммированием. Даже репозитории сторонних производителей, такие как rpmfusion подписывают свои пакеты.

Конфетка (диспетчер пакетов) требует специального флага (--nogpgcheck) устанавливать пакеты, которые не были подписаны.

4
25.07.2011, 20:53
2 ответа

ln, как cp и mv, ведет себя по-другому в зависимости от того, является ли место назначения существующим каталогом (включая символьную ссылку на одну). Если это не, то источник скопирован/перемещен/связан в имя desintation. Если место назначения является существующим каталогом, источник скопирован/перемещен/связан в файл того же базового имени как источник, в соответствии с целевым каталогом.

С 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"
1
27.01.2020, 21:02

Это происходит, потому что во второй раз Вы запускаете свой скрипт, ссылка существует, и это указывает на каталог. Таким образом, это помещает новую ссылку в том каталоге. Можно использовать что-то вроде этого:

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;
0
27.01.2020, 21:02

Теги

Похожие вопросы