Macos 以标准用户身份从sudo提升脚本运行命令

Macos 以标准用户身份从sudo提升脚本运行命令,macos,bash,shell,sudo,Macos,Bash,Shell,Sudo,如果已使用sudo执行bash脚本,那么脚本中的命令如何以当前登录用户的身份而不是root用户的身份运行,然后恢复为root用户以继续运行其他命令 例如:- #!/usr/bash touch fileOwnedByRoot.txt touch fileOwnedByUser.txt touch otherRootFile.txt 如果使用sudo运行此脚本,而不更改命令顺序,那么如何以标准用户的身份运行第二个touch命令 该脚本只是一个简单的示例,因此使用chmod更改所创建文件的所有权

如果已使用sudo执行bash脚本,那么脚本中的命令如何以当前登录用户的身份而不是root用户的身份运行,然后恢复为root用户以继续运行其他命令

例如:-

#!/usr/bash

touch fileOwnedByRoot.txt
touch fileOwnedByUser.txt
touch otherRootFile.txt
如果使用sudo运行此脚本,而不更改命令顺序,那么如何以标准用户的身份运行第二个touch命令

该脚本只是一个简单的示例,因此使用chmod更改所创建文件的所有权并不重要


我使用的实际脚本是由安装程序运行的,因此需要以提升的权限运行,但是特定的命令必须以运行安装程序的用户的身份运行,该用户的名称未知。

不要以
sudo
的身份运行脚本,只运行需要提升权限的命令

#!/bin/bash
sudo touch fileOwnedByRoot.txt
touch fileOwnedByUser.txt
sudo touch otherRootFile.txt

使用
su-other_user-c”“
运行该特定命令:

#!/bin/bash

touch /tmp/f1
su - another_user -c "touch /tmp/f2"
touch /tmp/f3

如下文所述,您需要使用
$SUDO\u USER
$SUDO\u UID
获取运行
SUDO
命令的真实用户的姓名:

su - $SUDO_USER -c "touch /tmp/f2"
这样,运行该命令的用户将触摸该文件

您可以使用以下工具进行测试:

#!/bin/bash
echo "sudo_user: $SUDO_USER"
echo "sudo_uid: $SUDO_UID"
然后使用
/script
sudo./script
运行脚本。在第二种情况下,将填充值。

根据环境变量,在运行SUDO时设置SUDO\u USER,因此可以执行以下操作:

#!/usr/bash

touch fileOwnedByRoot.txt
sudo ${SUDO_USER} touch fileOwnedByUser.txt
touch otherRootFile.txt

我还没有测试过这个,也不知道它在OSX上是否有不同的工作方式,但值得一试。

没有“标准用户”;你是说作为一开始运行
sudo
的用户吗?@chepner是的,负责调用脚本的用户。对不起,我在编辑问题时解释得更清楚了一点;我不知道当前用户是谁在运行脚本。如何在此处指定此选项?
sudo
$sudo\u USER
设置为调用
sudo
的用户的用户名。如有必要,还有
$SUDO\u UID
$SUDO\u GID
。@Merlin069请参阅chepner的评论@chepner,谢谢你们,这正是我想要的。我通常会同意,但该脚本是一个安装后脚本,默认情况下以root用户身份运行,一些命令必须以提升的权限运行,而其他命令则不能,例如运行服务