2012-11-19 1 views
2

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

делаю ли я:

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 

имя_директория, кажется, работает хорошо, но кавычка и $() перестает работать. Подстановка команды возвращает пустую строку.

EDIT: удаление всех двойных кавычек "" не имеет эффекта

EDIT2: выполнение Баш явно при вызове суб-сценарий не имеет никакого эффекта

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

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

EDIT5: согласно Requ est, вывод сценария

/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' 
+0

ли работать это нормально, если вы просто закомментируйте строку назвать индекс? Просто хотел убедиться. – anishsane

+1

Можете ли вы рассказать о нижнем индексе? – anishsane

+0

Кроме того, попробуйте переместить ваш скрипт/s в каталог, не содержащий специальных символов, например пробел. Вы уверены, что индекс заканчивается и возвращает управление обратно родительскому скрипту? – anishsane

ответ

0

это не имеет смысла, но попробовать ваш индекс поиске

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

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

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

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

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

mydir="$0" 

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

и еще лучше, сделать

mydir=`dirname "$0"` 

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

+0

попробовал оба. ни один из них не имеет эффекта! 'bash" $ HERE "/setup_buildroot.sh $ BUILDROOT' – Jayen

+0

, заменив все' $ 0' в вашем скрипте '$ HERE' (где' HERE = \ 'dirname" $ ​​0 "\' ') не работал ? – coder543

+0

Я только что заменил этот. это первый в скрипте. – Jayen

 Смежные вопросы

  • Нет связанных вопросов^_^