2015-07-01 2 views
2

Я пытаюсь связать файлы в цикле while для моего скрипта, но сам простой код связывания создает неработающую ссылку.Почему моя ссылка сломана? Bash

Структура каталогов заключается в следующем:

main/working/script.sh 
main/working/dir 
main/shared/default/some_files 

Мой сценарий имеет следующий код:

ln -s ../shared/default/* dir 

Это создает неработающую ссылку. Я могу сделать ссылку не сломанной, если я войду в каталог main/working/dir и использую ln -s ../../shared/default/* .

ответ

1

Это потому, что вы ссылаетесь на относительный путь; Внутри вашего сценария перейти на главную/работать /:

cd main/working/ 
ln -s ../shared/default/* dir 

либо использовать абсолютный путь:

ln -s /absolute/path/to/shared/default/* dir 

вы даже deduce the path where your script is located и использовать этот путь:

DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) 
ln -s $DIR/../../shared/default/* dir 

редактировать: bash не может развернуть *, если вы не находитесь в правильном каталоге, поэтому вы можете обойти это, чтобы временно сменить каталоги:

# go to dir to make correct relative links 
cd dir 
ln -s $DIR/../../shared/default/* ./ 
cd .. 
+0

есть ли другой способ связывания его без использования абсолютного пути? – Gibs

+0

Я дал вам три возможности; первое относительное, второе абсолютное, третье - это сочетание обоих: относительно места, где находится ваш скрипт ... –

+0

Первый вариант, который вы дали, - это код, который я использовал, и он дает неработающие ссылки. Третий вариант, хотя и слишком длинный. – Gibs

Смежные вопросы