在启动时执行的bash脚本中,如何获取刚刚登录的用户的用户名?

在启动时执行的bash脚本中,如何获取刚刚登录的用户的用户名?,bash,boot,Bash,Boot,我需要在启动时执行bash脚本。 为此,我创建了一个文件 /etc/init.d/blah 我编辑了它并添加了以下几行 #! /bin/sh # /etc/init.d/blah touch '/var/lock/blah' username1=$(id -n -u) username2=$(whoami) touch '/var/lock/1'${username1} touch '/var/lock/2'${username2} exit 0 脚本以root权限执行(这是我所需要的,

我需要在启动时执行bash脚本。
为此,我创建了一个文件

/etc/init.d/blah
我编辑了它并添加了以下几行

#! /bin/sh
# /etc/init.d/blah

touch '/var/lock/blah'
username1=$(id -n -u)
username2=$(whoami)
touch '/var/lock/1'${username1}
touch '/var/lock/2'${username2}

exit 0
脚本以root权限执行(这是我所需要的,因为我必须在脚本中使用
mount
)。。但问题是,我还需要知道刚刚登录的用户的用户名,因为我的目标是根据用户名将某个文件夹装载到某个装载点,如

mount -o bind /home/USERNAME/mount-point /media/data/home/USERNAME/to-be-mounted
回到启动脚本,如果我这样做的话

sudo update-rc.d blah defaults
然后重新启动并使用我的用户名登录(比如说
john
),两种方法都可以在我的脚本中获得
username
,生成
root
,事实上我有3个文件

/var/lock/blah
/var/lock/1root
/var/lock/2root
那么,如何获取刚刚登录的用户的用户名?(
john
在我的示例中)

编辑:
我这样解决:

1.我为每个需要在引导时执行自动装载的用户创建了一个.desktop文件,以便在引导时自动启动脚本(我在LXDE上),并将其放在/home/{username}/.config/autostart上

[Desktop Entry] 
Type=Application
Exec=bash "/path/to/mount-bind.sh"

2.我在该路径中存储了一个名为mount-bind.sh的bash脚本,并使其可执行:

#!/bin/bash

_username=$1

if [[ -z "${_username}" ]]; then
    _username="$(id -u -n)"
fi

mkdir -p "/home/${_username}/mount-folder"
sudo mount -o bind "/media/data/home/${_username}/mount-folder" "/home/${_username}/mount-folder"

exit 0

3.我在/etc/sudoers中添加了以下行

%nopwd ALL=(ALL) NOPASSWD: /bin/mount

4.我创建了nopwd组,并向其中添加了我需要的所有用户

以他的方式登录后,我可以挂载用户主页下的路径。

此方法的问题是,我必须为每个新用户创建桌面文件,并将其添加到nopwd,但它可以工作。


欢迎进一步改进!:)

启动时不会登录。您无法预测启动时哪个用户将登录。

启动时不会登录。启动时无法预知哪个用户将登录。

请尝试导出登录详细信息并使用它


export username2=$(whoami)

尝试导出logindetails并使用它


export username2=$(whoami)

我认为您应该从启动时初始化脚本转移到登录时在登录用户下执行的脚本。要实现这一点,您应该研究允许用户执行所需的mount命令的方法。根据您试图实现的目标,以下方法之一可能会对您有所帮助:

  • 假设您在Linux或其他具有类似功能的UNIX上,请使用
    user
    选项将挂载点添加到
    /etc/fstab
    ,以允许普通用户挂载条目
  • 通过
    sudo
    执行
    mount
    ,使用适当狭窄的
    sudoers
    配置,不允许用户执行任何装载命令
  • 用c编写一个suid root程序,在调用时执行所需的mount命令。然而,在不造成安全漏洞的情况下,这是非常棘手的

我认为您应该从启动时初始化脚本转移到登录时在登录用户下执行的脚本。要实现这一点,您应该研究允许用户执行所需的mount命令的方法。根据您试图实现的目标,以下方法之一可能会对您有所帮助:

  • 假设您在Linux或其他具有类似功能的UNIX上,请使用
    user
    选项将挂载点添加到
    /etc/fstab
    ,以允许普通用户挂载条目
  • 通过
    sudo
    执行
    mount
    ,使用适当狭窄的
    sudoers
    配置,不允许用户执行任何装载命令
  • 用c编写一个suid root程序,在调用时执行所需的mount命令。然而,在不造成安全漏洞的情况下,这是非常棘手的

感谢您的解释。你认为我有办法达到我的目标吗?(这是在启动时根据用户名将某个文件夹装载到某个装载点)@lucasborrione:肯定不是在启动时。不过,在登录时也有可能。谢谢您的解释。你认为我有办法达到我的目标吗?(这是在启动时根据用户名将某个文件夹装载到某个装载点)@lucasborrione:肯定不是在启动时。但是,在登录时可能会这样做。-1在启动时,唯一的用户是
root
。无论如何,导出只影响对当前进程子进程的可见性。最后,您不能在sh脚本中使用Bash语法。-1在启动时,唯一的用户是
root
。无论如何,导出只影响对当前进程子进程的可见性。最后,您不能在sh脚本中使用Bash语法。