докато изпълнявате скрипт на обвивка в Unix Bash Shell, как се разрешава местоположение на файл за относителни пътища?

докато изпълнявате скрипт на обвивка в Unix Bash Shell, кажете, че всеки файл в друга папка и който е посочен от скрипта, препраща към друг файл като ../../file_system_1/public/dir1/dir2/file2.xml

script.sh --> препраща към dir1/file1 като "./dir1/file1" dir1/file1 препраща към друг файл като ../../file_system_1/public/dir1/dir2/file2.xml

така че спрямо кой файл е разрешен file2? към местоположението script.sh или местоположението на папката file1.


person yli    schedule 18.11.2009    source източник


Отговори (5)


Какво виждате, ако поставите ls във вашия script.sh? Това е отправната точка за оценка на относителните пътища. Обикновено това е текущата ви работна директория. И така, за да отговоря на въпроса ви: вероятно не е местоположението на script.sh, нито на file1.

Защо вероятно? Защото зависи от това какво правите във вашия сценарий. Ако изпълните cd /home/ в script.sh, включващият път се променя.

person Boldewyn    schedule 18.11.2009
comment
Можете да направите pwd вместо ls. Резултатът е по-сбит и използваем. - person Dennis Williamson; 18.11.2009
comment
Вярно. Просто исках да дам един лесно разбираем пример. - person Boldewyn; 18.11.2009

Относителните пътища се разрешават по отношение на текущата работна директория, както е дадено от $(pwd).

Всеки път, когато има разрешаване, $(pwd) се оценява. Това означава, че един и същ низ на ../myfile път представлява различен файл преди и след команда cd във вашия скрипт.

person mouviciel    schedule 18.11.2009

В скрипта на обвивката .. пътеките винаги са относителни към текущата работна директория, а не към други имена на файлове. това е стойността на $PWD.

person bmargulies    schedule 18.11.2009

Зависи какво имате предвид под "референция".

Относителните пътища се интерпретират -- когато се използват за достъп до файл или директория -- спрямо текущата работна директория на процеса. CWD се наследява между fork() и приятели, така че всички подпроцеси, които вашият скрипт изпълнява, ще наследят CWD. Интерпретирането на относителните пътища се извършва от C библиотеката и/или слоя на файловата система и това работи по същия начин във всички програми, които използват стандартните API, не само bash.

Ако вашите пътеки не се използват за достъп до файл или папка, тогава те са само низове и не се „преобразуват“ в нищо.

person thsutton    schedule 18.11.2009

Решено е спрямо текущата работна директория. Ако скриптът не променя директории с cd или подобно, това е директорията, в която сте били, когато сте стартирали скрипта.

person sth    schedule 18.11.2009