使用sudo运行bash脚本,但创建用户为所有者的文件

时间:2016-08-16 14:37:16

标签: bash macos sudo

我有一个bash脚本create-file.sh,它创建一个名为a:

的文件
   $ cat create-file.sh
   # /bin/bash
   touch a

当我运行脚本时,它会以我的用户为所有者创建一个文件'a'。

 $ ./create-file.sh
 $ ls -l
 -rw-r--r--  1 shai  wheel  0 Aug 16 17:19 a

但是当我在sudo下运行脚本时,文件是以root用户身份创建的:

 $ sudo ./create-file.sh
 $ ls -l
 -rw-r--r--  1 root  wheel  0 Aug 16 17:19 a

有没有办法告诉在sudo下运行的脚本以我的用户为所有者创建文件?

  • 如果说触摸单个文件的脚本不需要在sudo下运行,那就更正确了。这个例子当然是原始问题的减少,我的脚本有更多,需要在sudo下运行,但我仍然希望用我的用户作为所有者创建文件。

1 个答案:

答案 0 :(得分:1)

sudo将原始用户名导出为SUDO_USER;你可chown那样。

#!/bin/bash
touch a
[[ $SUDO_USER ]] && chown "$SUDO_USER" a

同样,如果您的sudo配置允许(默认情况下)root权限在没有明确密码提示的情况下将权限删除给任何其他用户,您可以利用它:

#!/bin/bash

# drop privileges back to non-root user if we got here with sudo
depriv() {
  if [[ $SUDO_USER ]]; then
    sudo -u "$SUDO_USER" -- "$@"
  else
    "$@"
  fi
}

depriv touch a