$ 0 в исходном скрипте Bash не возвращает имя скрипта - PullRequest
5 голосов
/ 02 мая 2011

Когда я указываю $ 0 в сценарии Bash на моем Mac под управлением Mac OS X v10.6.7 (Snow Leopard), я получаю -bash, а не имя сценария .

Я запустил скрипт, описанный в этом вопросе переполнения стека :

#!/bin/bash

echo
echo '# arguments called with ($@) -->  '"$@"
echo '# $1 -------------------------->  '"$1"
echo '# $2 -------------------------->  '"$2"
echo '# path to me ($0) ------------->  '"$0"
echo '# parent path (${0%/*}) ------->  '"${0%/*}"
echo '# my name (${0##*/}) ---------->  '"${0##*/}"
echo

Произведено следующее:

> . show_parms.sh foo

# arguments called with ($@) -->  foo
# $1 -------------------------->  foo
# $2 -------------------------->
# path to me ($0) ------------->  -bash
# parent path (${0%/*}) ------->  -bash
# my name (${0##*/}) ---------->  -bash

Есть идеи?

Ответы [ 3 ]

8 голосов
/ 02 мая 2011

Это имеет смысл, поскольку вы используете сценарий

. show_parms.sh foo

вместо его выполнения

./show_parms.sh foo

Как объяснено в этом ответе на тот же вопрос , вы можете использовать $BASH_SOURCE, чтобы узнать имя файла, из которого поступают команды.

3 голосов
/ 02 мая 2011

$ 0 возвращает имя процесса. Используя. оператор, вы просто читаете скрипт в свой существующий процесс bash и оцениваете содержащиеся в нем команды; название процесса остается «-bash», так что вот что вы видите. Вы должны фактически выполнить скрипт как его собственный процесс:

chmod +x show_parms.sh
./show_params.sh foo

И тогда вы получите то, что ожидаете. Это не специфично для OS X; так работает bash (или sh).

1 голос
/ 02 мая 2011

Это потому, что вы используете.оператор.Если вы только что набрали

show_parms.sh foo

, вы получите желаемый результат.

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