во время выполнения сценария оболочки в Unix Bash Shell, как определяется местоположение файла для относительных путей? - PullRequest
2 голосов
/ 18 ноября 2009

при выполнении сценария оболочки в 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

так относительно какого файла разрешен файл2? в папку script.sh или папку file1.

Ответы [ 5 ]

4 голосов
/ 18 ноября 2009

Относительные пути разрешаются со ссылкой на текущий рабочий каталог, как указано $(pwd).

Каждый раз, когда происходит разрешение, $(pwd) оценивается. Это означает, что одна и та же строка пути ../myfile представляет другой файл до и после команды cd в вашем сценарии.

2 голосов
/ 18 ноября 2009

Это зависит от того, что вы подразумеваете под «ссылкой».

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

Если ваши пути не используются для доступа к файлу или папке, то они просто строки и не "разрешаются" ни к чему.

2 голосов
/ 18 ноября 2009

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

1 голос
/ 18 ноября 2009

Разрешается относительно текущего рабочего каталога. Если сценарий не меняет каталоги с cd или подобным, это каталог, в котором вы находились при запуске сценария.

1 голос
/ 18 ноября 2009

Что вы увидите, если вы добавите ls в свой script.sh? Это отправная точка для оценки относительных путей. Обычно это ваш текущий рабочий каталог. Итак, чтобы ответить на ваш вопрос: это, вероятно, ни сценарий .sh, ни местоположение file1.

Почему, наверное? Потому что это зависит от того, что вы делаете в вашем сценарии. Если вы выполните cd /home/ в файле script.sh, путь включения изменится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...