2016-08-22 138 views
0

我試圖製作一個shell腳本來安裝和配置一個名爲logentries的日誌集中程序。他們在自己的網站上有指示,將一些行復制並粘貼到命令行中,以完成此過程。我試圖複製和粘貼這些確切的bash命令到一個shell腳本中,這樣我就可以運行這個腳本而不是複製和粘貼他們的所有指令。在shell腳本中運行sudo -s

這裏是我的腳本的內容:

sudo -s 
echo "sudod" 
tee /etc/yum.repos.d/logentries.repo <<EOF 
[logentries] 
name=Logentries repo 
enabled=1 
metadata_expire=1d 
baseurl=http://rep.logentries.com/amazonlatest/\$basearch 
gpgkey=http://rep.logentries.com/RPM-GPG-KEY-logentries 
EOF 
yum update 
yum install logentries 

我插入第2行echo語句以測試腳本,甚至讓到這一點,但是當我運行該腳本,甚至不會輸出。我想這意味着我不能只在命令行中使用腳本內的sudo -s

有誰知道我可以如何讓這些命令行指令在shell腳本中執行?

回答

3

shell腳本中的每條命令都是獨立運行的。該腳本是父進程,它調用命令作爲子進程。因此,sudo -s創建一個打開root shell的新進程。但是,此過程不能在以後執行這些命令。

如果您從根shell執行exit,您還可以看到正在打印的回顯輸出。發生這種情況是因爲,當你退出時,root shell的進程終止。

您可以在shell腳本中編寫除sudo -s之外的所有命令。通過chmod +x install_logentries.sh使其可執行。並經由sudo install_logentries.sh

執行它另一種選擇是命令嵌入如使用< <子進程(如下面給出的):在須藤線

#!/bin/bash 
sudo -s << SCRIPT 
tee /etc/yum.repos.d/logentries.repo <<EOF 

[logentries] 
name=Logentries repo 
enabled=1 
metadata_expire=1d 
baseurl=http://rep.logentries.com/amazonlatest/\$basearch 
gpgkey=http://rep.logentries.com/RPM-GPG-KEY-logentries 

EOF 
yum update 
yum install logentries 
SCRIPT 
+2

錯字。我認爲你的意思是sudo -s,而不是sudo - s。 –

1

嘗試添加「家當」線(第一行)打電話給你bash,如下例所示:(做which bash來查看您的bash所在,因爲它可能不是/bin/bash

#!/bin/bash 

sudo -s 
echo "sudod" 
tee /etc/yum.repos.d/logentries.repo <<EOF 
[logentries] 
name=Logentries repo 
enabled=1 
metadata_expire=1d 
baseurl=http://rep.logentries.com/amazonlatest/\$basearch 
gpgkey=http://rep.logentries.com/RPM-GPG-KEY-logentries 
EOF 
yum update 
yum install logentries 

注意:當您爲sudo -s輸入密碼時可能會提示您。

2

我一般檢查EUID,如果它不爲零,則是這樣的:。

if [ $EUID -ne 0 ]; then 
    exec sudo $0 
done 

(基本上迫使腳本根,如果它不是已經運行的「執行」 bit確保控制呢不會返回到您的非根腳本。)

2

刪除sudo行並將其作爲sudo ./script調用應該會給你你想要的。

或者,可以在腳本中使用sudo作爲單個命令的前綴(sudo tee,sudo yum)。