Главное - поставить ваши точечные файлы под контроль версий. Когда вы используете новую машину, проверьте их.
cd
git clone https://github.com/saterhater/home.git
Если на компьютере нет вашего инструмента контроля версий, вы можете хотя бы загрузить версию только для чтения. Github автоматизирует это; если вы используете другой хостинг, который не предоставляет такой возможности, сделайте создание zip-файла ловушкой фиксации.
cd
wget -O - https://github.com/saterhater/home/archive/master.zip | unzip -
Что касается содержимого файлов, вам, очевидно, необходимо убедиться, что они переносимы. Для этого нет волшебного рецепта, всего несколько советов.
Вы можете делиться некоторыми вещами между bash и zsh, в основном псевдонимами и некоторыми функциями. Привязки клавиш и параметры подсказок не подлежат совместному использованию. Функции завершения Bash можно использовать с не древними версиями zsh. Если у вас есть код, который использует автоматическое разделение и подстановку переменных без кавычек, которые zsh не выполняет, вы можете запустить emulate -L ksh
, чтобы заставить zsh переключиться в режим совместимости с ksh на время функция; make эмулирует
псевдоним для :
, если оболочка не zsh (вы можете проверить наличие переменной ZSH_VERSION
).
Рассмотрим этот пример на основе примера из справочной страницы flock
:
#!/bin/bash
func() {
echo "$$ trying to acquire lock"
(
flock -e 42
echo "lock acquired by $$"
sleep 10
) 42> /tmp/mylock
echo "lock released by $$"
}
func
Теперь, если я запущу этот скрипт один раз:
$ bash ex.sh
22241 trying to acquire lock
lock acquired by 22241
lock released by 22241
Если я запускаю два экземпляра в течение этого 10 -секундного окна сна этого скрипта, первый в фоновом режиме, возможная последовательность событий:
$ bash ex.sh& bash ex.sh
[1] 24518
24519 trying to acquire lock
24518 trying to acquire lock
lock acquired by 24519
lock released by 24519
lock acquired by 24518
$
lock released by 24518
В этом примере второй процесс выиграл гонку и первым получил блокировку. Затем он снял блокировку и позволил первому (фоновому )процессу получить доступ, после чего снял блокировку.
Я могу повысить шансы на то, что первый процесс выиграет гонку, введя задержку между их запуском:
$ bash ex.sh& sleep 1; bash ex.sh
[1] 30158
30158 trying to acquire lock
lock acquired by 30158
30179 trying to acquire lock
lock released by 30158
lock acquired by 30179
lock released by 30179