2012-11-19 178 views
2

我將部分shell腳本提取到另一個shell腳本中,出於某種原因,在調用子腳本後,命令替換停止工作。我無法想象這是子腳本中的內容,但我也看不出我做錯了什麼。命令替換中斷命令替換

我是否做:

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 

目錄名稱似乎工作正常,但反引號和$()停止工作。命令替換隻是返回一個空字符串。

編輯:刪除所有雙引號""沒有效果

EDIT2:調用子腳本時明確執行bash有沒有效果

EDIT3:保存"$(dirname "$0")"一個變量,並且使用有沒有效果

EDIT4:添加相同echo命令給子腳本顯示,一切正常的子腳本

EDIT5:按熱曲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

此外,嘗試將腳本移動到不包含特殊字符(如空格)的目錄中。你確定,下標正在結束並將控制返回給父腳本嗎? – 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

用'$ HERE'替換腳本中的所有'$ 0'(其中'HERE = \''dirname「$ 0」\'')不起作用? – coder543

+0

我剛剛取代了這一個。這是腳本中的第一個。 – Jayen