alias isbashrcmodf='cmp -s "/home/user/.experimental/bc/$(ls /home/user/.experimental/bc -Art | tail -n 1)" "/home/user/.bashrc"'
alias bashrcbak='cp ~/.bashrc ~/.experimental/bc/.bashrc$(date +-%y-%m-%d-%H-%M-%S-%s)'
if isbashrcmodf; then
cd $PWD
else
bashrcbak; echo ".bashrc backed, good to go."
fi
Вышеупомянутый скрипт проверяет папку /home/user/.expiremental/bc/ для последнего измененного файла (который является предыдущей резервной копией моего .bashrc), и если текущий .bashrc отличается, создается резервная копия
Возможно, я хочу избежать части if .. then и иметь только сегмент if .. else. [[7]]
EDIT:
Я просто где-то читал подробную статью о том, что насколько опасно разбирать вывод ls и полагаться на ls, он продолжал говорить, что безопаснее использовать EDIT вдоль ls, поэтому вместо ls /home/user/.experimental/bc -Art | tail -n 1 он должен быть: ls /home/user/.experimental/bc/.bashrc-* -Art | tail -n 1
Вы можете использовать условный оператор «OR» || и группировать ваши зависимые команды внутри фигурных скобок, чтобы они выполнялись вместе, хотя каждая команда должна иметь трейлинг ;:
alias isbashrcmodf='cmp -s "/home/user/experimental/bc/$(ls /home/user/experimental/bc -Art | tail -n 1)" "/home/user/.bashrc"'
alias bashrcbak='cp ~/.bashrc ~/.experimental/bc/.bashrc$(date +-%y-%m-%d-%H-%M-%S-%s)'
isbashrcmodf || { bashrcbak ; echo ".bashrc backed, good to go."; }
[d1 ] Дальнейшее улучшение может заключаться в том, чтобы использовать условный оператор «И» && только для эха, если команда bashrcbak успешна: isbashrcmodf || { bashrcbak && echo ".bashrc backed, good to go."; }
Вы можете использовать условный оператор «OR» || и группировать ваши зависимые команды внутри фигурных скобок, чтобы они выполнялись вместе, хотя каждая команда должна иметь трейлинг ;:
alias isbashrcmodf='cmp -s "/home/user/experimental/bc/$(ls /home/user/experimental/bc -Art | tail -n 1)" "/home/user/.bashrc"'
alias bashrcbak='cp ~/.bashrc ~/.experimental/bc/.bashrc$(date +-%y-%m-%d-%H-%M-%S-%s)'
isbashrcmodf || { bashrcbak ; echo ".bashrc backed, good to go."; }
Дальнейшее улучшение может заключаться в том, чтобы использовать условный оператор «И» && только для эха, если команда bashrcbak успешна:
isbashrcmodf || { bashrcbak && echo ".bashrc backed, good to go."; }
Вы можете использовать условный оператор «OR» || и группировать ваши зависимые команды внутри фигурных скобок, чтобы они выполнялись вместе, хотя каждая команда должна иметь трейлинг ;:
alias isbashrcmodf='cmp -s "/home/user/experimental/bc/$(ls /home/user/experimental/bc -Art | tail -n 1)" "/home/user/.bashrc"'
alias bashrcbak='cp ~/.bashrc ~/.experimental/bc/.bashrc$(date +-%y-%m-%d-%H-%M-%S-%s)'
isbashrcmodf || { bashrcbak ; echo ".bashrc backed, good to go."; }
Дальнейшее улучшение может заключаться в том, чтобы использовать условный оператор «И» && только для эха, если команда bashrcbak успешна:
isbashrcmodf || { bashrcbak && echo ".bashrc backed, good to go."; }
if ! isbashrcmodf; then
Используйте команду AND &&, если вы хотите запустить команду, только если последняя команда выполнена успешно. bashrcbak && echo ".bashrc backed up, good to go."
Не мешайте реверсированию ls сортировки. ls ... -At | head -1
Укажите, на какие файлы ls следует посмотреть, с помощью glob. ~/.experimental/bc/.bashrc-*
Используйте тильды и вары. dir=~/.experimental/bc
bak_prev="$dir/$(ls "$dir"/.bashrc-* -At | head -1)"
cmp -s "$bak_prev" ~/.bashrc
и bak_next="$dir/.bashrc-$(date +%y-%m-%d-%H-%M-%S-%s)"
cp ~/.bashrc "$bak_next"
Это отчасти зависит от личного вкуса, но также делает так, что если вы хотите изменить резервный каталог (например), вам нужно только изменить одну строку кода, где $dir установлен. Не используйте псевдонимы, когда вы должны использовать функции. Псевдонимы предназначены для использования только в интерактивных сеансах, в основном для команд, которые вы часто запускаете с определенным набором аргументов. Например. [F15]. isbashrcmodf(){
local bak_prev="$dir/$(ls "$dir"/.bashrc-* -At | head -1)"
cmp -s "$bak_prev" ~/.bashrc
}
bashrcbak(){
local bak_next="$dir/.bashrc-$(date +%y-%m-%d-%H-%M-%S-%s)"
cp ~/.bashrc "$bak_next"
}
Хотя в этом случае функции / алиасы используются только один раз, поэтому я бы даже не потрудился, если только не больше, чем сценарий, который вы не включили. Обратите особое внимание на имена файлов. experimental (опечатка в скрипте) .expiremental (опечатка в вопросе) В полном объеме:
dir=~/.experimental/bc
bak_prev="$dir/$(ls "$dir"/.bashrc-* -At | head -1)"
if ! cmp -s "$bak_prev" ~/.bashrc; then
bak_next="$dir/.bashrc-$(date +%y-%m-%d-%H-%M-%S-%s)"
cp ~/.bashrc "$bak_next" &&
echo ".bashrc backed up, good to go."
fi
if ! isbashrcmodf; then
Используйте команду AND &&, если вы хотите запустить команду, только если последняя команда выполнена успешно. bashrcbak && echo ".bashrc backed up, good to go."
Не мешайте реверсированию ls. ls ... -At | head -1
Укажите, на какие файлы ls следует посмотреть, с помощью glob. ~/.experimental/bc/.bashrc-*
Используйте тильды и вары. dir=~/.experimental/bc
bak_prev="$dir/$(ls "$dir"/.bashrc-* -At | head -1)"
cmp -s "$bak_prev" ~/.bashrc
и bak_next="$dir/.bashrc-$(date +%y-%m-%d-%H-%M-%S-%s)"
cp ~/.bashrc "$bak_next"
Это отчасти зависит от личного вкуса, но также делает так, что если вы хотите изменить резервный каталог (например), вам нужно только изменить одну строку кода, где $dir установлен. Не используйте псевдонимы, если вы должны использовать функции. Псевдонимы предназначены для использования только в интерактивных сеансах, в основном для команд, которые вы часто запускаете с определенным набором аргументов. Например. [F15]. isbashrcmodf(){
local bak_prev="$dir/$(ls "$dir"/.bashrc-* -At | head -1)"
cmp -s "$bak_prev" ~/.bashrc
}
bashrcbak(){
local bak_next="$dir/.bashrc-$(date +%y-%m-%d-%H-%M-%S-%s)"
cp ~/.bashrc "$bak_next"
}
Хотя в этом случае функции / алиасы используются только один раз, поэтому я бы даже не потрудился, если только не больше, чем сценарий, который вы не включили. Обратите особое внимание на имена файлов. experimental (опечатка в скрипте) .expiremental (опечатка в вопросе) В полном объеме:
dir=~/.experimental/bc
bak_prev="$dir/$(ls "$dir"/.bashrc-* -At | head -1)"
if ! cmp -s "$bak_prev" ~/.bashrc; then
bak_next="$dir/.bashrc-$(date +%y-%m-%d-%H-%M-%S-%s)"
cp ~/.bashrc "$bak_next" &&
echo ".bashrc backed up, good to go."
fi
if ! isbashrcmodf; then
Используйте команду AND &&, если вы хотите запустить команду, только если последняя команда выполнена успешно. bashrcbak && echo ".bashrc backed up, good to go."
Не мешайте реверсированию ls. ls ... -At | head -1
Укажите, на какие файлы ls следует посмотреть, с помощью glob. ~/.experimental/bc/.bashrc-*
Используйте тильды и вары. dir=~/.experimental/bc
bak_prev="$dir/$(ls "$dir"/.bashrc-* -At | head -1)"
cmp -s "$bak_prev" ~/.bashrc
и bak_next="$dir/.bashrc-$(date +%y-%m-%d-%H-%M-%S-%s)"
cp ~/.bashrc "$bak_next"
Это отчасти зависит от личного вкуса, но также делает так, что если вы хотите изменить резервный каталог (например), вам нужно только изменить одну строку кода, где $dir установлен. Не используйте псевдонимы, если вы должны использовать функции. Псевдонимы предназначены для использования только в интерактивных сеансах, в основном для команд, которые вы часто запускаете с определенным набором аргументов. Например. [F15]. isbashrcmodf(){
local bak_prev="$dir/$(ls "$dir"/.bashrc-* -At | head -1)"
cmp -s "$bak_prev" ~/.bashrc
}
bashrcbak(){
local bak_next="$dir/.bashrc-$(date +%y-%m-%d-%H-%M-%S-%s)"
cp ~/.bashrc "$bak_next"
}
Хотя в этом случае функции / алиасы используются только один раз, поэтому я бы даже не потрудился, если только не больше, чем сценарий, который вы не включили. Обратите особое внимание на имена файлов. experimental (опечатка в скрипте) .expiremental (опечатка в вопросе) В полном объеме:
dir=~/.experimental/bc
bak_prev="$dir/$(ls "$dir"/.bashrc-* -At | head -1)"
if ! cmp -s "$bak_prev" ~/.bashrc; then
bak_next="$dir/.bashrc-$(date +%y-%m-%d-%H-%M-%S-%s)"
cp ~/.bashrc "$bak_next" &&
echo ".bashrc backed up, good to go."
fi