Как определить имя скрипта, запущенного как ". ./script.sh" ?
От: Аноним  
Дата: 04.10.12 08:41
Оценка:
$0 в этом случае указывает на командную оболочку, а не на скрипт. BASH_SOURCE есть не во всех версиях.
Какие-нибудь еще переносимые варианты бывают?
Re: Как определить имя скрипта, запущенного как ". ./script.sh" ?
От: hotdox  
Дата: 04.10.12 15:07
Оценка:
Здравствуйте, Аноним, Вы писали:

А>$0 в этом случае указывает на командную оболочку, а не на скрипт. BASH_SOURCE есть не во всех версиях.

А>Какие-нибудь еще переносимые варианты бывают?

`dirname $0`/`basename $0`
Re: Как определить имя скрипта, запущенного как ". ./script.sh" ?
От: ДимДимыч Украина http://klug.org.ua
Дата: 04.10.12 16:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Какие-нибудь еще переносимые варианты бывают?


Сомневаюсь. С точки зрения bash'а код, считанный из файла через source, ничем не отличается от полученного с stdin.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re: Как определить имя скрипта, запущенного как ". ./script.sh" ?
От: Vain Россия google.ru
Дата: 04.10.12 20:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>$0 в этом случае указывает на командную оболочку, а не на скрипт. BASH_SOURCE есть не во всех версиях.

А>Какие-нибудь еще переносимые варианты бывают?
Пользую такое:
  if (( ${BASH_LINENO[0]} > 0 )); then
    ScriptFilePath="${BASH_SOURCE[1]//\\//}"
  else
    ScriptFilePath="$0"
  fi
  if [[ "${ScriptFilePath:1:1}" == ":" ]]; then
    ScriptFilePath="`/bin/readlink.exe -f "/${ScriptFilePath/:/}"`"
  else
    ScriptFilePath="`/bin/readlink.exe -f "$ScriptFilePath"`"
  fi
  ScriptDirPath="${ScriptFilePath%[/]*}"
  ScriptFileName="${ScriptFilePath##*[/]}"
  ScriptBaseFileName="${ScriptFileName%.*}"

заодно и пути приводятся к униформным
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.