首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有sudo的Bash脚本在根目录的主目录中安装文件,我如何解决这个问题?

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

Ask Ubuntu用户
提问于 2021-02-08 22:06:42
回答 2查看 749关注 0票数 1

所以,我正在编写我的第一个bash脚本,它是在一个新系统上安装我的dotfile,这里有一些git clones,这会使事情变得混乱,因为当使用sudo执行脚本时,它会将它们安装在根目录中。

从根本上讲,我需要做三件事:

  1. 安装软件包
  2. 将我在git clone中获得的一些字体移到/usr/share/fonts (我可以将它们放在~/.D7中,但我不想在主目录中只使用一种字体)
  3. 将.vimrc文件移动到根目录的主目录(我有一个特定的.vimrc用于根目录)

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

我如何做到这一点,而不安装或git克隆根目录下的其他所有内容?

这是我到目前为止的剧本。

PS:这是我的第一个剧本,我希望它看起来没那么糟。

代码语言:javascript
复制
#!/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
EN

回答 2

Ask Ubuntu用户

发布于 2021-02-08 22:27:57

我会用rsync来执行命令。

代码语言:javascript
复制
rsync -a user@123.456.789.012:/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/目录中。文件的一个直接副本会被检查求和,并保证是字节复制,或者它没有错误地复制它。

票数 0
EN

Ask Ubuntu用户

发布于 2021-02-09 04:12:44

使用以下内容创建了文件test.sh:

代码语言:javascript
复制
echo $HOME

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

如果不清楚,那么最好总是给出完整的路径,而不是使用系统变量,这些变量可能会根据多个条件进行不同的解释。

票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1314805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档