Запуск скрипта bash из другого местоположения, но ссылка на то, где находится скрипт

#linux #bash #shell

#linux #bash #оболочка

Вопрос:

Некоторое время назад я написал скрипт, который выполнял бы некоторые простые процедуры установки в Linux для людей, которым не нравится командная строка, но кажется, что они запускают скрипт из местоположения (например, root). Итак, у меня есть решение, но я пытаюсь выяснить, как указать, где находится файл.

Пример. У меня есть скрипт, который называется Install.sh в папке /root/Server/Scripts/, которая ссылается на себя, используя следующее:

 SCRIPTSDIR=`pwd`
 

Но у меня возникли проблемы с людьми, запускающими этот скрипт из root, выполнив sh Server/Scripts/Install.sh

Как я мог бы создать SCRIPTS= что-то, что ссылается на то, где находится файл, а не на то, откуда он запускается?

Спасибо, спросите, нужна ли вам дополнительная информация!

Редактировать: все ответы были хорошими, я хотел указать, что мне нужен абсолютный путь.

Ответ №1:

Вы можете получить каталог с помощью

 dirname $0
 

Если ваш скрипт вызывается с относительным путем, dirname также вернет относительный путь. Если вы хотите по какой-либо причине разрешить его, вы можете сделать

 readlink -f `dirname $0`
 

Ответ №2:

Вы можете использовать:

 SCRIPTDIR=$(dirname $0)
 

Если вам нужен абсолютный путь, попробуйте:

 cd $(dirname $0)
SCRIPTDIR=$(pwd)
cd -
 

Ответ №3:

Вы могли бы добавить что-то вроде:

 fullscriptpath=$( dirname $0 )
 

Комментарии:

1. ха-ха, тест рефлексов stackoverflow в лучшем виде 🙂 (3 почти идентичных ответа с интервалом в несколько секунд друг от друга).