Подстановка команд прерывает подстановку команд

Я извлек часть сценария оболочки в другой сценарий оболочки, и по какой-то причине после вызова вспомогательного сценария подстановка команд перестает работать. Я не могу представить, что это что-то в этом сценарии, но я также не вижу, что я делаю неправильно.

делаю ли я:

dirname "$0"                                      # works
echo "`dirname "$0"`"                             # works
echo "$(dirname "$0")"                            # works
cat <<< "`dirname "$0"`"                          # works
cat <<< "$(dirname "$0")"                         # works
"$(dirname "$0")"/setup_buildroot.sh "$BUILDROOT" # call the sub-script
dirname "$0"                                      # works
echo "`dirname "$0"`"                             # empty string
echo "$(dirname "$0")"                            # empty string
cat <<< "`dirname "$0"`"                          # crash
cat <<< "$(dirname "$0")"                         # crash

или я делаю:

dirname "$0"                                      # works
echo "`dirname "$0"`"                             # works
echo "$(dirname "$0")"                            # works
cat <<< "`dirname "$0"`"                          # works
cat <<< "$(dirname "$0")"                         # works
"`dirname "$0"`"/setup_buildroot.sh "$BUILDROOT"  # call the sub-script
dirname "$0"                                      # works
echo "`dirname "$0"`"                             # empty string
echo "$(dirname "$0")"                            # empty string
cat <<< "`dirname "$0"`"                          # crash
cat <<< "$(dirname "$0")"                         # crash

dirname вроде бы работает нормально, но не работает $() прекрати работать. Подстановка команды просто возвращает пустую строку.

РЕДАКТИРОВАТЬ: удаление всех двойных кавычек "" не имеет эффекта

EDIT2: явное выполнение bash при вызове подпрограммы не имеет никакого эффекта

EDIT3: сохранение "$(dirname "$0")" к переменной и использование, которое не имеет никакого эффекта

EDIT4: добавление того же echo команды для подпрограммы показывают, что в подпрограмме все в порядке

EDIT5: согласно запросу, вывод сценария

/home/jayen/rep
/home/jayen/rep
/home/jayen/rep
/home/jayen/rep
/home/jayen/rep
#setup_buildroot.sh output here
/home/jayen/rep


bash: syntax error near unexpected token `newline'
bash: syntax error near unexpected token `newline'

2 ответа

Решение

Это не имеет смысла, но попробуйте найти свой под-скрипт

. "$(dirname "$0")"/setup_buildroot.sh "$BUILDROOT" # call the sub-script

Я чувствую, что вызов подпрограммы нарушает переменные окружения вашего существующего сеанса bash-скрипта. Может быть, попробуйте добавить префикс строки сценария bash, так

bash "`dirname "$0"`"/setup_buildroot.sh "$BUILDROOT"

и посмотрите, решит ли это проблему. Это странная ситуация.

Другое решение, которое я рекомендую, находится на первой линии, сделайте

mydir="$0"

и заменить все $0 с $mydir

а еще лучше сделай

mydir=`dirname "$0"`

вперед и не повторять команду снова и снова.

Другие вопросы по тегам