Папка, в которой находится скрипт bash при запуске через ln -s

416
Egon Willighagen

В / usr / local / bin у меня есть файл 'ln -s' для /usr/local/foo/bash.script, и в этом последнем скрипте я хочу узнать текущий каталог / usr / local / foo, чтобы я мог запустить вторичный скрипт из этой папки.

Теперь я попробовал dirname $ 0, но вместо этого я получаю папку / usr / local / bin . Что я должен использовать в bash.script для получения папки / usr / local / foo ?

1

1 ответ на вопрос

5
Vokuhila-Oliba

попробуйте readlink, например

d=$0  while readlink $d >/dev/null; do d=`readlink $d` done echo $d 

РЕДАКТИРОВАТЬ :

Я не уверен, что это работает на других ОС Unix, но если вы работаете в Linux, то выше можно упростить с помощью

d=`readlink -f $0`  echo $d 

увидеть

readlink --help 
Спасибо за указатели! Мне все еще нужно объединиться с dirname, и я увидел readlink -f, выполняя вышеизложенное в одной команде ... есть идеи о том, насколько это переносимо? Egon Willighagen 14 лет назад 0
@Egon: `-f` также работал на Cygwin (на Win-7-64bit). Но это не работает на MacOS. Vokuhila-Oliba 14 лет назад 0
Ну, это достаточно хорошо для моих нужд, потому что это часть скрипта только для Linux :) спасибо! Egon Willighagen 14 лет назад 0