尝试存储用户

尝试存储用户

正如问题所暗示的,我正在尝试存储用户。如果我想这么做的话。我可以做吗

username = $USER

在脚本的开头还是有其他方法可以解决这个问题?我这样做的原因是因为我稍后成为root,并且我想设置以前的用户shell。我在 Fedora Linux 上,使用 bash,但后来它切换到 zsh

这是我目前运行的:

#User types sudo password.
sudo -i 
#Shell setup
#Install ZSH
sudo dnf install zsh -y
#Install oh-my-zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
#Install starship
sudo dnf install starship
#Export variables & aliases
echo ~/.zshrc > "alias "vim"="nvim""
echo ~/.zshrc > "alias ".."="cd ..""
echo ~/.zshrc > "alias "lsblk"="lsblk -e 7""
#Add it as the default prompt
echo ~/.zshrc > "eval "$(starship init zsh)"
# Change users shell to zsh
chsh -s /bin/zsh $USERNAME```
#Username would be the non-root user that originally ran the script. Username is not defined because I don't know how to get the original user that ran the script before becoming root.

答案1

bash是的,您几乎可以将变量保存在新变量中,就像您所显示的那样,但和中都没有空格zsh

username=$USER

我不知道您要做什么,因为问题中没有信息,但请注意,将变量sudo设置为启动时SUDO_USER的值:$USER

$ sudo sh -c 'echo "user:$USER sudo_user:$SUDO_USER"'
user:root sudo_user:terdon

现在您已经共享了脚本,您还需要修复一些其他问题。echo ~/.zshrc > "alias "vim"="nvim""会将字符串回显~/.zshrc到名为alias vim=nvim.想必您想要回alias vim="nvim"~/.zshrc。当然,这是一个非常非常糟糕的主意,因为每次运行时它都会继续添加这一行,因此您可能需要在回显之前先检查该行是否存在。

接下来,确实可以使用SUDO_USER来获取原始用户名。然而,这毫无意义,因为在 后sudo -i,在退出 shell 之前不会执行其他命令sudo -i。如果您只想进行身份验证,则只需执行一次,除非您sudo没有设置记住密码哪怕几秒钟(但这样就sudo -i不会更好)。看https://unix.stackexchange.com/a/579447/22222有关如何更改sudo超时的详细信息,以便您无需多次输入密码。

最后,您实际上并不需要存储用户:您只使用 sudo 运行一些特定的命令(很好!),因此chsh无论如何都会以原始用户身份运行。此外,安装脚本已经提供了将 zsh 设置为默认 shell 的功能,因此您根本ohmyzsh不需要该命令。chsh

把所有这些放在一起:

#!/bin/bash

#Install ZSH
sudo dnf install zsh -y

#Install oh-my-zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

#Install starship
sudo dnf install starship

#Export variables & aliases
lines=("alias vim='nvim'" "alias ..='cd ..'" \
                          "alias lsblk='lsblk -e 7" \
                          "eval \"$(starship init zsh)\"" )
for line in "${lines[@]}"; do
  grep -q "$line" ~/.zshrc || printf '%s\n' "$line" >> ~/.zshrc
done

# Change user's shell to zsh. This isn't needed, you can simply answer
# yes when prompted by the ohmyzsh installation script.
chsh -s /bin/zsh $USER

相关内容