Бэш-скрипт с sudo устанавливает файлы в домашний каталог корня, Как я могу это исправить?

Итак, я работаю над своим первым bash-скриптом, это установка моих дотфайлов на новую систему, есть несколько git-клонов и это путает вещи, потому что он устанавливает их в домашний каталог корня, когда скрипт выполняется с sudo

Есть в основном три вещи, которые я должен сделать как корень:

  1. Установить пакеты
  2. переместить некоторые из шрифтов, которые я получаю с помощью git-клона, в /usr/share/fonts ( я могу поместить их в ~/. шрифты, но мне не нужна папка в моём домашнем каталоге только для одного шрифта, который я использую)
  3. Переместить .vimrc файл в домашний каталог root (у меня есть специальный .vimrc для root)

Я мог бы сделать вышеперечисленные шаги вручную, но причина, по которой я делаю скрипт, в том, что я не делаю этого.

Как я могу сделать это без установки или клонирования git'ом всего остального в домашнем каталоге root'а?

Вот скрипт, который у меня пока есть.

PS: Это мой первый скрипт, надеюсь, он выглядит не так уж и плохо.

#!/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
0
задан 9 February 2021 в 01:12

2 ответа

Я бы использовал rsync для команд.

rsync -a user@123.456.789.012:/github.com/ael-code/zsh-colored-man-pages.git ~/.config/zsh/plugins/

Вы делаете только один файл за раз, когда это простое дело. Если место, которое вы храните файлы, позволяет получить учетную запись доступа к оболочку, поэтому можно создавать .ssh / authorized_keys. Может быть создана, это может быть сделано без пароля.

Вышеупомянутая команда использует программу RSYNC для создания архивной копии /Github.com/ael-code/zsh-colored-man-pages.git в каталог на компьютере, который он работает на ~ / .Config / ZSH / плагины /. Прямая копия файла сделана проверкой и гарантированной байтом для копирования байтов или не удается скопировать его с ошибкой.

0
ответ дан 18 March 2021 в 23:36

Содержимое /sys/class/power _ поставке лучше всего считать интерфейсами API, а не файлами. Они могут быть различными на каждом компьютере (даже если это одна и та же модель) в зависимости от:

  • настроек BIOS
  • встроенного ПО батареи
  • аппаратные возможности
  • аппаратные настройки
  • GRUB
  • и т.д....

При просмотре параметров, имеющихся в BAT0 , установить пороговые значения в данный момент невозможно. Я предлагаю вам посмотреть в BIOS под опциями «Power» на что-то, что позволит вам изменить профиль питания.

-121--910470-

Перезагрузка с подключенным клонированным диском невозможна. UEFI или BIOS могут загружать один или другой диск, или даже часть одного и часть другого, что приводит к их потере синхронизации.

Для изменения GUID можно использовать sgdisk. Это изменяет их все там, где sdX является вашим диском, который вы хотите изменить. Лучше всего иметь хорошее резервное копирование.

man sgdisk
sudo sgdisk -G /dev/sdX 

-G, --randomize-guids Выполните рандомизацию GUID диска и уникальных GUID всех разделов (но не GUID кода типа раздела). Этот фанк ‐ tion можно использовать после клонирования диска, чтобы снова сделать все GUID уникальными.

UUID можно изменить с помощью uuidgen или tune2fs.

man tune2fs
man uuidgen

sudo tune2fs -U random /dev/sdaX

Здесь показаны как UUID, так и partUUID/GUID

lsblk -o name,mountpoint,label,size,fstype,uuid,partuuid | egrep -v "^loop"

После этих изменений клонированный диск может быть снова загружен, только если grub переустановлен и все UUID в fstab обновлены вручную. Могут существовать другие ссылки UUID, которые также необходимо изменить, например ,/etc/initramfs-tools/conf.d/resume, если раздел подкачки.

-121--910436-

Создан файл 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

Если не ясно, то лучше всегда давать полные пути и не использовать системные переменные, которые могут интерпретироваться по-разному в зависимости от нескольких условий.

0
ответ дан 18 March 2021 в 23:36

Другие вопросы по тегам:

Похожие вопросы: