Итак, я работаю над своим первым bash-скриптом, это установка моих дотфайлов на новую систему, есть несколько git-клонов
и это путает вещи, потому что он устанавливает их в домашний каталог корня, когда скрипт выполняется с sudo
Есть в основном три вещи, которые я должен сделать как корень:
git-клона
, в /usr/share/fonts
( я могу поместить их в ~/. шрифты, но мне не нужна папка в моём домашнем каталоге только для одного шрифта, который я использую)Я мог бы сделать вышеперечисленные шаги вручную, но причина, по которой я делаю скрипт, в том, что я не делаю этого.
Как я могу сделать это без установки или клонирования 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
Я бы использовал 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 / плагины /. Прямая копия файла сделана проверкой и гарантированной байтом для копирования байтов или не удается скопировать его с ошибкой.
Содержимое /sys/class/power _ поставке
лучше всего считать интерфейсами API, а не файлами. Они могут быть различными на каждом компьютере (даже если это одна и та же модель) в зависимости от:
При просмотре параметров, имеющихся в BAT0
, установить пороговые значения в данный момент невозможно. Я предлагаю вам посмотреть в BIOS под опциями «Power» на что-то, что позволит вам изменить профиль питания.
Перезагрузка с подключенным клонированным диском невозможна. 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
Если не ясно, то лучше всегда давать полные пути и не использовать системные переменные, которые могут интерпретироваться по-разному в зависимости от нескольких условий.