Подстановка команд прерывает подстановку команд
Я извлек часть сценария оболочки в другой сценарий оболочки, и по какой-то причине после вызова вспомогательного сценария подстановка команд перестает работать. Я не могу представить, что это что-то в этом сценарии, но я также не вижу, что я делаю неправильно.
делаю ли я:
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"`
вперед и не повторять команду снова и снова.