Shell-Script

試圖儲存使用者

  • October 12, 2022

因此,正如問題所暗示的那樣,我正在嘗試儲存使用者。如果我想那樣做。我可以嗎

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.

是的,您幾乎可以像顯示的那樣將變數保存在新變數中,但在bash和中都沒有空格zsh

username=$USER

我不知道您要做什麼,因為問題中沒有資訊,但請注意sudoSUDO_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來獲取原始使用者名。但是,這是毫無意義的,因為在退出shellsudo -i之前,不會執行任何其他命令。sudo -i如果您只想進行身份驗證,則只需執行一次,除非您sudo沒有設置為記住密碼幾秒鐘(但那樣sudo -i不會更好)。有關如何更改超時的詳細資訊,請參閱https://unix.stackexchange.com/a/579447/22222sudo ,以便您無需多次輸入密碼。

最後,您實際上不需要儲存使用者:您只需使用 sudo 執行一些特定的命令(好!),因此chsh無論如何都會以原始使用者身份執行。更重要的是,ohmyzsh安裝腳本已經提供了使 zsh 成為您的預設 shell,因此您根本不需要該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

引用自:https://unix.stackexchange.com/questions/720704