2016-08-23 42 views
0

我有一個腳本類似下面:如何登錄爲超級用戶並執行腳本

腳本的名稱:create_and_set_quota_alternative.sh

#!/bin/bash 



while IFS=$'\t' read -r -a myOptions 

do 

echo "directory: ${myOptions[0]}" 

echo "ownership: ${myOptions[1]}" 

echo "permissions: ${myOptions[2]}" 

echo "quota: ${myOptions[3]}" 


    hdfs dfs -mkdir ${myOptions[0]} 

    hdfs dfs -chown ${myOptions[1]} ${myOptions[0]} 

    hdfs dfs -chmod ${myOptions[2]} ${myOptions[0]} 

    hdfs dfsadmin -setSpaceQuota ${myOptions[3]} ${myOptions[0]} 

done < myFile.txt 

MYFILE.TXT

/usr/t1 hive:hive  776  1T 

/usr/t2 hdfs:hdfs  775  100G 

現在我想以超級用戶身份登錄並執行腳本。 在我的情況下超級用戶是hdfs。 我希望每當我運行命令sh create_and_set_quota_alternative.sh時,它會以hdfs超級用戶的身份登錄並執行腳本。 請建議如何實施它。

+1

推薦雙引號一樣'變量 「$ {myOptions [0]}」'避免分詞。 – sjsam

回答

1

在while while循環前添加su hdfs,並將exit作爲腳本的最後一個命令。

要添加sh create_and_set_quota_alternative.sh調用腳本/bin/sh,但頂行說它應該被稱爲bash create_and_set_quota_alternative.sh。不總是sh鏈接到bash。

0

不幸的是我沒有sudo訪問以及hdfs密碼。有人建議我做如下:

/斌/慶典

而IFS = $ '\ t' 讀-r -a myOptions

回聲「目錄:$ { myOptions [0]}」

回聲 「所有權:$ {myOptions [1]}」

回聲 「權限:$ {myOptions [2]}」

回聲 「配額:$ {myOptions [3]}」

須藤蘇HDFS -c 「HDFS DFS -mkdir $ {myOptions [0]}」

須藤蘇HDFS -c「HDFS DFS -chown $ {myOptions [1]} $ {myOptions [0]}」

須藤蘇HDFS -c 「HDFS DFS -chmod $ {myOptions [2]} $ {myOptions [0]}」

須藤蘇hdfs -c「hdfs dfsadmin -setSpaceQuota $ {myOptions [3]} $ {myOptions [0]}」

done < myFile.txt

MYFILE.TXT在/ usr/T1蜂房:蜂房776 1T

在/ usr/T2 HDFS:HDFS 775 100G

但它也給錯誤如下:

SH create_and_set_quota_alternative。SH

目錄:在/ usr/T1

所有權:蜂房:蜂房

權限:776

配額:1T

錯誤:JAVA_HOME沒有設置,無法找到。

錯誤:未設置JAVA_HOME並找不到。

錯誤:未設置JAVA_HOME並找不到。

錯誤:未設置JAVA_HOME並找不到。

目錄:在/ usr/T2

所有權:HDFS:HDFS

權限:775

配額:100G

錯誤:JAVA_HOME沒有設置,不能被發現。

錯誤:未設置JAVA_HOME並找不到。

錯誤:未設置JAVA_HOME並找不到。

錯誤:未設置JAVA_HOME並找不到。

+0

你不能在使用Bash特性的腳本上使用'sh'。投票結束重複。 – tripleee

0

只要運行腳本

sudo -u hdfs sh create_and_set_quota_alternative.sh 
相關問題