正如问题所暗示的,我正在尝试存储用户。如果我想这么做的话。我可以做吗
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