2015-10-16 29 views
0

我有一個小bash腳本bdocs.shbash的續行切斷

#!/bin/bash 

REPO=$1 

QUICKBOOK=/usr/bin 
AUTOINDEX=/usr/bin 
XSLTPROC=/usr/bin 
DOCBOOK_DTD=/usr/share/xml/docbook/schema/dtd/4.2 
DOCBOOK_XSL=/usr/share/xml/docbook/stylesheet/docbook-xsl 

if [[ -n "$REPO" ]]; then 
    echo cmake -DBOOSTQUICKBOOK_ROOT=$QUICKBOOK    \ 
     -DBOOSTAUTOINDEX_ROOT=$AUTOINDEX     \ 
     -DXSLTPROC_ROOT=$XSLTPROC       \ 
     -DDOCBOOK_DTD_ROOT=$DOCBOOK_DTD      \ 
     -DDOCBOOK_XSL_ROOT=$DOCBOOK_XSL      \ 
     -DHPX_WITH_DOCUMENTATION=On       \ 
     $REPO 
fi 
但是如果我把它叫做 > ./bdocs.sh ../repo只回聲

cmake -DBOOSTQUICKBOOK_ROOT=/usr/bin -DBOOSTAUTOINDEX_ROOT=/usr/bin 
./build_docs.sh: line 14: -DXSLTPROC_ROOT=/usr/bin: No such file or directory 
./build_docs.sh: line 16: -DDOCBOOK_DTD_ROOT=/usr/share/xml/docbook/schema/dtd/4.2: No such file or directory 
./build_docs.sh: line 17: -DHPX_WITH_DOCUMENTATION=On: command not found 
./build_docs.sh: line 18: h: command not found 

怎麼來我行延續後不工作第二個命令行參數傳遞給cmake?

回答

2

在行尾有\後面不能有空格。

+0

這是正確的答案:@syntactic試試這個'sed -ri's/+ $ //'bdocs.sh' –

1

略效率較低,但更可讀的,是使用cat和這裏文件:

#!/bin/bash 

REPO=$1 

QUICKBOOK=/usr/bin 
AUTOINDEX=/usr/bin 
XSLTPROC=/usr/bin 
DOCBOOK_DTD=/usr/share/xml/docbook/schema/dtd/4.2 
DOCBOOK_XSL=/usr/share/xml/docbook/stylesheet/docbook-xsl 

if [[ -n "$REPO" ]]; then 
    cat <<EOF 
cmake -DBOOSTQUICKBOOK_ROOT=$QUICKBOOK 
     -DBOOSTAUTOINDEX_ROOT=$AUTOINDEX 
     -DXSLTPROC_ROOT=$XSLTPROC 
     -DDOCBOOK_DTD_ROOT=$DOCBOOK_DTD 
     -DDOCBOOK_XSL_ROOT=$DOCBOOK_XSL 
     -DHPX_WITH_DOCUMENTATION=On 
     $REPO 
EOF 
fi 

如果所生成的文件的格式並不重要(只是發電機的格式),則使用數組來保存cmake參數;換行符是隱含的。

#!/bin/bash 

REPO=$1 

QUICKBOOK=/usr/bin 
AUTOINDEX=/usr/bin 
XSLTPROC=/usr/bin 
DOCBOOK_DTD=/usr/share/xml/docbook/schema/dtd/4.2 
DOCBOOK_XSL=/usr/share/xml/docbook/stylesheet/docbook-xsl 

arguments=(-DBOOSTQUICKBOOK_ROOT=$QUICKBOOK 
      -DBOOSTAUTOINDEX_ROOT=$AUTOINDEX 
      -DXSLTPROC_ROOT=$XSLTPROC 
      -DDOCBOOK_DTD_ROOT=$DOCBOOK_DTD 
      -DDOCBOOK_XSL_ROOT=$DOCBOOK_XSL 
      -DHPX_WITH_DOCUMENTATION=On 
) 
if [[ -n "$REPO" ]]; then 
    echo cmake "${arguments[@]}" "$REPO" 
fi