我试图创建一个shell脚本来安装和配置一个名为logentries的日志集中程序。他们在他们的网站上有说明,将一些行复制并粘贴到命令行中,从而完成此过程。我尝试将这些确切的bash命令复制并粘贴到shell脚本中,这样我就可以运行一个脚本,而不是复制和粘贴所有指令。
这是我脚本的内容:
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脚本中执行这些命令行指令?
答案 0 :(得分:4)
我通常检查EUID,如果它不是零,那么就像:
if [ $EUID -ne 0 ]; then
exec sudo $0
done
(基本上强制脚本以root身份运行,如果它还没有。&#34; exec&#34;位确保控件不会返回到非root脚本。)
答案 1 :(得分:4)
shell脚本中的每个命令都是独立运行的。该脚本是父进程,它将命令作为子进程调用。因此,sudo -s
创建一个打开root shell的新进程。但是,此进程以后无法执行命令。
如果从root shell执行exit
,您还可以看到正在打印的echo输出。发生这种情况是因为,当您退出时,root shell的进程将被终止。
您可以在shell脚本中编写除sudo -s
之外的所有命令。使其可由chmod +x install_logentries.sh
执行。并通过sudo install_logentries.sh
另一种方法是使用&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; (如下所示):
#!/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 :(得分:2)
删除sudo行并以Dim c As Range, v As String, arr, x As Long, e
Dim d As Range
Set d = WorkSheets("Sheet1").Range("F1") '<<results start here
For Each c In ActiveSheet.Range("D1:D10")
v = Trim(c.Value)
If Len(v) > 0 Then
'normalize other separators to spaces
v = Replace(v, vbLf, " ")
'remove double spaces
Do While InStr(v, " ") > 0
v = Replace(v, " ", " ")
Loop
'split to array
arr = Split(v, " ")
For x = LBound(arr) To UBound(arr)
e = arr(x)
'see if array element is a word of interest
If Not IsError(Application.Match(LCase(e), Array("(hello hey)"), 0)) Then
If x > LBound(arr) Then
d.Value = arr(x - 1) & " " & e 'prepend previous word
Else
d.Value = "??? " & e 'no previous word
End If
Set d = d.Offset(1, 0)
End If
Next x
End If
Next c
End Sub
调用它应该可以为您提供所需的内容。
或者,可以在脚本中使用sudo作为前缀单个命令(sudo ./script
,sudo tee
)。
答案 3 :(得分:1)
尝试添加&#39; shebang&#39;要调用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
输入密码时,系统可能会提示您。