gpt4 book ai didi

unix - 如何编写一个 shell 脚本,以 super 用户身份运行一些命令,而不以 super 用户身份运行一些命令,而不必照顾它?

转载 作者:行者123 更新时间:2023-12-03 05:48:24 25 4
gpt4 key购买 nike

我想编写一个 shell 脚本来自动执行一系列命令。问题是某些命令必须以 super 用户身份运行,而某些命令不得以 super 用户身份运行。到目前为止我所做的是这样的:

#!/bin/bash

command1
sudo command2
command3
sudo command4

问题是,这意味着有人必须等到 command1 完成后才会提示输入密码,然后,如果 command3 需要足够长的时间,他们就必须等待 command3 完成。如果这个人可以起身走开,然后一小时后回来完成任务,那就太好了。例如,下面的脚本就有这个问题:

#!/bin/bash

sleep 310
sudo echo "Hi, I'm root"
sleep 310
sudo echo "I'm still root?"

我怎样才能让用户一开始就输入一次密码,然后就走开?

更新:

感谢您的回复。我在 Mac OS X Lion 上运行并运行 Stephen P 的脚本并得到了不同的结果:(我还添加了 $HOME)

pair@abbey scratch$ ./test2.sh
uid is 501
user is pair
username is
home directory is /Users/pair
pair@abbey scratch$ sudo ./test2.sh
Password:
uid is 0
user is root
username is root
home directory is /Users/pair

最佳答案

文件sutest

#!/bin/bash
echo "uid is ${UID}"
echo "user is ${USER}"
echo "username is ${USERNAME}"

运行它:`./sutest'给我

uid is 500
user is stephenp
username is stephenp

但使用 sudo:sudo ./sutest 给出

uid is 0
user is root
username is stephenp

因此,当以 sudo 身份运行时,您会在 $USERNAME 中保留原始用户名。这导致了类似于其他人发布的解决方案:

#!/bin/bash
sudo -u ${USERNAME} normal_command_1
root_command_1
root_command_2
sudo -u ${USERNAME} normal_command_2
# etc.

只需 sudo 首先调用您的脚本,它会提示输入密码一次。

<小时/>

我最初是在 Linux 上写这个答案的,它与 OS X 确实有一些差异

OS X(我在 Mountain Lion 10.8.3 上测试)有一个环境变量 SUDO_USER 当您运行 sudo 时,可以就地使用它上面的USERNAME,或者为了更具跨平台性,脚本可以检查是否设置了 SUDO_USER 并使用它(如果设置了),或者使用 USERNAME(如果设置了)。

更改 OS X 的原始脚本,它变成...

#!/bin/bash
sudo -u ${SUDO_USER} normal_command_1
root_command_1
root_command_2
sudo -u ${SUDO_USER} normal_command_2
# etc.

使其跨平台的第一次尝试可能是......

#!/bin/bash
#
# set "THE_USER" to SUDO_USER if that's set,
# else set it to USERNAME if THAT is set,
# else set it to the string "unknown"
# should probably then test to see if it's "unknown"
#
THE_USER=${SUDO_USER:-${USERNAME:-unknown}}

sudo -u ${THE_USER} normal_command_1
root_command_1
root_command_2
sudo -u ${THE_USER} normal_command_2
# etc.

关于unix - 如何编写一个 shell 脚本,以 super 用户身份运行一些命令,而不以 super 用户身份运行一些命令,而不必照顾它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10220019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com