带有 sudo 的 Bash 脚本在 root 的主目录中安装文件,我该如何解决这个问题?

带有 sudo 的 Bash 脚本在 root 的主目录中安装文件,我该如何解决这个问题?

因此,我正在编写我的第一个 bash 脚本,它是在新系统上安装我的点文件,有几个,git clones这会弄乱事情,因为当使用以下命令执行脚本时,它会将它们安装在根目录的主目录中sudo

基本上,作为 root,我需要做三件事:

  1. 安装软件包
  2. 将我用得到的某些字体移动git clone/usr/share/fonts(我可以将它们放在 ~/.fonts 中,但我不希望在我的主目录中只为我使用的一种字体创建一个文件夹)
  3. 将 .vimrc 文件移动到 root 的主目录(我有一个针对 root 的特定 .vimrc)

我可以手动完成上述步骤,但我编写脚本的原因就是为了避免这样做。

如何在不安装或 git 克隆 root 主目录中的所有其他内容的情况下执行此操作?

这是我目前拥有的脚本。

附言:这是我的第一个剧本,希望它看起来不会那么糟糕。

#!/bin/bash

if [ ! -d "$HOME/.dotfiles" ]; then
    echo "============================"
    echo "== Installing dotfiles... =="
    echo "============================"
    git clone --separate-git-dir="$HOME"/.dotfiles https://github.com/username/dotfiles.git my-dotfiles-tmp >/dev/null 2>&1;
    rsync --recursive --verbose --exclude '.git' my-dotfiles-tmp/ "$HOME"/ >/dev/null 2>&1;
    rm --recursive my-dotfiles-tmp >/dev/null 2>&1;
else
    echo "Can't make install, '$HOME/.dotfiles' folder already exist"
    exit
fi

if [ -f "$HOME/.zshrc" ]; then
    mv .zshrc .zshrc.bak
fi

# create necessary directories
mkdir -p $HOME/.config/zsh/plugins/{colored-man-pages,syntax-highlighting,zsh-autosuggestions}

# git clone necessary zsh extensions
git clone https://github.com/ael-code/zsh-colored-man-pages.git ~/.config/zsh/plugins/colored-man-pages >/dev/null 2>&1
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.config/zsh/plugins/syntax-highlighting >/dev/null 2>&1
git clone https://github.com/zsh-users/zsh-autosuggestions.git ~/.config/zsh/plugins/zsh-autosuggestions >/dev/null 2>&1

# neovim set up
sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim' >/dev/null 2>&1

function config {
   /usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME $@
}
config config status.showUntrackedFiles no

# clear terminal
clear

echo "=========="
echo "== Done =="
echo "=========="

# reload zsh
zsh >/dev/null 2>&1

答案1

我将使用 rsync 来执行命令。

rsync -a [email protected]:/github.com/ael-code/zsh-colored-man-pages.git ~/.config/zsh/plugins/

您每次只需处理一个文件,这很简单。如果您存储文件的地方允许 shell 访问帐户,那么就可以创建 .ssh/authorized_keys,无需密码即可完成。

上述命令使用 rsync 程序将 /github.com/ael-code/zsh-colored-man-pages.git 的存档副本复制到其运行的计算机上的 ~/.config/zsh/plugins/ 目录中。文件的直接副本经过校验和,并保证逐字节复制,否则将无法复制并出现错误。

答案2

创建文件 test.sh,内容如下:

echo $HOME

fred@z170-focal-k:~$ bash test.sh 
/home/fred
fred@z170-focal-k:~$ sudo bash test.sh
[sudo] password for fred: 
/root

如果不清楚,那么最好始终提供完整路径,而不要使用可能根据多种条件而有不同解释的系统变量。

相关内容