2016-07-28 136 views
0

我想從bash腳本創建一個bash腳本。用舊的echo風格(例如echo -e「some commands」> /path/to/file.sh)執行它的問題是命令被解釋並由其值取代。從bash腳本編寫一個bash腳本。沒有解釋的行

谷歌搜索,我發現這個論壇上該解決方案: Generating a bash script from a bash script

在那裏,他們用:

cat >/path/to/file.sh <<'EOF' 
    some commands 
EOF 

如果我做一個小腳本只這一點,它的工作原理...問題是而嘗試集成在我的大腳本...與一個非常基本的「一些命令」...它會產生一個錯誤:它會產生一個錯誤:

警告:這裏 - 文件在行xxxx由文件結尾分隔(通緝`EOF ')./myscript.sh:行xxxx:語法錯誤:意外結束的文件

我在做什麼錯?不能在函數內部使用,或者錯誤的要點是什麼......我不確定是否理解錯誤試圖說出什麼。謝謝。

+2

你在行首有沒有'EOF'(即之前沒有空格)? –

+0

omfg ...我有一些選項卡,因爲在我的代碼裏面是一個函數,我有所有縮進和美化...如果我刪除EOF行上的標籤,它的工作原理!它破壞了我的劇本的美,但它的工作....我感覺像一個n00b:/ – OscarAkaElvis

回答

0

這裏的文檔的末尾分隔符需要左側齊平,不管是否出現在函數中或其他地方,都不會有任何縮進。

允許縮進,但僅限於製表符,如果這裏的文檔是以<<-word而不是<<word開頭的(任何初始製表符將從這裏的文檔的每一行的開始處被移除)。

另請注意,如果您使用bash腳本輸出的腳本包含here-documents,則這些here-documents的分隔符必須與用於結束腳本內容的分隔符不同。

由於分隔符可能是一個任意的單詞,所以最好使用描述性分隔符,如END_SCRIPT或類似的。

+0

Thx @Tom Fenech和Kusalananda。看起來cat> /path/to/file.sh << - 'EOF'贏得戰爭 – OscarAkaElvis