Bash,调用新shell后执行命令

Mat*_*teo 12 sudo shell-script

我正在尝试制作这样的脚本:

#!/bin/bash
sudo -s
something...
Run Code Online (Sandbox Code Playgroud)

当我执行它时,我得到了一个新的 shell,但something只有当我退出由sudo -s.

有什么帮助吗?

hee*_*ayl 7

问题是sudo -s没有任何参数将为root打开一个交互式shell。

如果您只想使用 运行单个命令sudo -s,您可以简单地执行以下操作:

sudo -s command
Run Code Online (Sandbox Code Playgroud)

例如 :

$ sudo -s whoami
root
Run Code Online (Sandbox Code Playgroud)

或者你可以在这里使用字符串:

$ sudo -s <<<'whoami'
root
Run Code Online (Sandbox Code Playgroud)

如果您有多个命令,您可以在此处使用 doc :

$ sudo -s <<'EOF'
> whoami
> hostname
> EOF
root
something--
Run Code Online (Sandbox Code Playgroud)


ter*_*don 7

另一种方法是将完整的 bash 命令传递给sudo

#!/bin/bash
sudo bash -c 'command1; command2; command3;'
Run Code Online (Sandbox Code Playgroud)

然而,更好的办法是启动脚本sudo代替。sudo将脚本放入脚本中并不是一个好主意。使用 root 权限 ( sudo script.sh)运行整个脚本要好得多。如有必要,您可以使用sudo删除特定命令的权限。例如:

#!/usr/bin/env bash
whoami
echo $HOME
sudo -u terdon whoami  ## drop privileges for specific command.
Run Code Online (Sandbox Code Playgroud)

运行上面的脚本返回:

$ sudo ~/scripts/a.sh
root
/root
terdon
Run Code Online (Sandbox Code Playgroud)