提示输入 sudo 密码并以编程方式提升 bash 脚本中的权限?

Sha*_*una 61 bash sudo

我目前正在编写一个 bash 脚本,该脚本可以在 Linux 系统(目前是 Ubuntu)上安装和设置各种程序。因为它会安装程序并将大量文件复制到需要提升权限的各种文件夹中,所以我已经完成了标准的“我需要提升权限”并退出。

但是,如果可能的话,如果用户不使用 sudo 运行脚本命令(例如从 GUI 文件管理器启动它),我希望能够提示用户输入他们的 sudo 密码并自动提升脚本的权限,无需用户重新启动脚本。

由于这是为在 Linux 安装上运行而设计的,因此任何修改系统的选项都不适用于我的目的。所有选项都需要包含在脚本本身中。

这在 Bash 中可能吗?如果是这样,执行此操作的最佳(安全但简洁)方法是什么?

Mic*_*zek 79

sudo直接从脚本运行:

if [ $EUID != 0 ]; then
    sudo "$0" "$@"
    exit $?
fi
Run Code Online (Sandbox Code Playgroud)

  • 如果出于任何原因未设置`EUID`,这将引发错误 - 最好引用它:`[ "$EUID" != 0 ]` (3认同)

Kev*_*vin 20

将此添加为脚本的第一行:

[ "$UID" -eq 0 ] || exec sudo bash "$0" "$@"
Run Code Online (Sandbox Code Playgroud)

如果您更喜欢图形提示,请更改sudogksugksudo


enz*_*tib 16

我建议:

#!/bin/bash

if (($EUID != 0)); then
  if [[ -t 1 ]]; then
    sudo "$0" "$@"
  else
    exec 1>output_file
    gksu "$0 $@"
  fi
  exit
fi

# some example stuff
ls -l /root
echo "app: $0"
for f; do
  echo ">$f<"
done
Run Code Online (Sandbox Code Playgroud)