質問が示すように、ユーザーを保存しようとしています。私がそうしたかったら。できますか?
username = $USER
スクリプトの先頭にあるか、この問題を解決する他の方法はありますか?これは、後でルートになる予定で、以前のユーザーシェルを設定したいからです。私はbashを使ってFedora Linuxを使っていますが、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""
echoが欲しいでしょう~/.zshrc
。もちろん、これは実行するたびにこの行を追加し続けるので非常に悪い考えなので、エコーする前にその行があることを確認することをお勧めします。alias vim=nvim
alias vim="nvim"
~/.zshrc
次に、実際にをSUDO_USER
使用して元のユーザー名を取得できます。ただし、これはsudo -i
シェルが終了するまで他のコマンドは実行されないため意味がありませんsudo -i
。認証だけをしたい場合は、sudo
パスワードを数秒でも覚えておくように設定しない限り、一度だけするだけです(ただし、sudo -i
これは良くありません)。バラよりhttps://unix.stackexchange.com/a/579447/22222パスワードを複数回入力する必要がないようにタイムアウトを変更する方法のsudo
詳細。
最後に、実際にユーザーを保存する必要はありません。 sudoを使用していくつかの特定のコマンドを実行すると(良い!)、chsh
とにかく元のユーザーとして実行されます。さらに、インストールスクリプトはすでにzshをデフォルトのシェルに設定する機能を提供しているため、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