Как запустить сценарий с другого пути и узнать путь сценария?


8

Мне нужно запустить скрипт, который обращается к файлу по тому же пути, в котором он находится.

Например: у меня есть скрипт /home/me/folder/script.sh, и этот скрипт будет обращаться к файлу /home/me/folder/myfile. Поскольку файл находится в том же пути сценария, я просто использую имя myfile, а не полный путь.

Но если я запускаю его /tmp/, например:

/tmp$ /home/me/folder/script.sh

это дает мне:

myfile: No such file or directory

Итак, как я могу сказать в сценарии, что файл находится в том же пути, что и сам сценарий?


Можете ли вы показать, что использование myfile здесь?
Фахим Митха

@Faheem Mitha: просто еще один скрипт, который вызывает мой script.sh.
Том Брито

По какой-то причине вы не хотите использовать полный путь или перенести оба из них в свой PATH?
Фахим Мита

1
@Faheem Mitha: я хочу иметь возможность переместить эту папку со сценариями в другое место, возможно, даже на другой компьютер, без необходимости переписывать путь myfile.
Том Брито,

Ответы:



9

Вы не можете знать ни при каких обстоятельствах, но часто (не всегда), когда вы запускаете сценарий по пути вместо того, чтобы разрешить поиск в оболочке $PATH, путь к сценарию будет указан $0. Затем вы можете использовать dirname "$0"или, ${0%/*}чтобы получить путь.


4

Я обычно делал бы что-то вроде этого во главе моего сценария:

SCRIPTDIR=$(dirname "$0")

Или, чтобы получить полный путь к каталогу скрипта (вместо относительного пути):

SCRIPTDIR=$(cd $(dirname "$0") && pwd)

Тогда просто ссылка, ${SCRIPTDIR}где это необходимо.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.