2017-05-04 118 views
0

我需要在Bash中執行以下命令:擊傳遞參數給一個命令

beeline -u "${DATALAKE_NAMENODE_HIVE}:${DATALAKE_NAMENODE_PORT_HIVE}/pcgexp; -hiveconf .... -f ..... " 

的事情是,在Linux中「;」字符是命令結束的指示符,我也需要使用環境變量。我怎樣才能做到這一點? 我該如何做到這一點?

+1

嘗試將每個標記的文本放在引號中,以確保;被包含在引號內。因此,-u「...」-hiveconf「...」-f「...」 –

+0

您可以像命令'env_var = value command arguments'那樣在命令的from中指定環境。 – zhenguoli

+0

正如你在這裏所引用的分號,對'bash'沒有特別的意義。 – chepner

回答

0

來自@ilkkachu的答案和chepner的評論一樣,是引用金錢的 - 引用的分號沒有特殊含義,引用的參數比引用的參數集合更有意義。

這就是說,在bash中處理參數的另一個方便的方法是使用數組。

declare -a b_args=() 

b_args+=(-u "${DATALAKE_NAMENODE_HIVE}:${DATALAKE_NAMENODE_PORT_HIVE}/pcgexp;") 
b_args+=(-hiveconf "....") 
b_args+=(-f ".....") 

beeline "${b_args[@]}" 

這有助於管理性 - 你可以註釋掉參數列表的一部分,有什麼東西被設置,而無需一個超長的命令行來找出一個明確的說法。

在一個正常的(非關聯)數組中,參數總是以它們索引的數字順序輸出,當你追加到數組時,它總是遞增的。

0

只是引述您需要的部分(改爲較短的變種名稱):

beeline -u "${var}:${anothervar}/pcgexp;" -hiveconf .... 

如果var包含foo,並anothervar包含bar,將給予這些論點:

-u 
foo:bar/pcgexp; 
-hiveconf 
.... 

引述空格將使字符串成爲單個參數,這可能會或可能不會成爲您需要的參數。